文档章节

如何-在运行时创建和销毁虚拟按钮

高通科技-孙豪
 高通科技-孙豪
发布于 2016/03/30 13:53
字数 451
阅读 4
收藏 0

请求按钮状态

    你可以从场景中被激活的目标中以迭代按钮子对象的方式请求按钮状态。下面的代码片段提供了这种行为的列子程序。

// Iterate through this target virtual buttons:
for (int i = 0; i < targetResult->getNumVirtualButtons(); ++i)
{
    const VirtualButtonResult* button = targetResult->getVirtualButtonResult(i);
    // If the button is pressed, then use this texture:
    if (buttonResult->isPressed())
    {
        textureIndex = i+1;
        break;
    }
}

对象从QCAR SDK中接收update回调函数

    为了动态的创建和销毁虚拟按钮,你应该在tracker升级状态后做出这些改变。在tracker投送了一个有效状态后,高通SDK在每一帧调用被注册的回调函数,如下面的代码片段所述。

// Object to receive update callbacks from QCAR SDK
class VirtualButton_UpdateCallback : public QCAR::UpdateCallback
{    
    // Update runs in the tracking thread therefore it is guaranteed that the tracker is
    // not doing anything at this point. => Reconfiguration is possible.
    virtual void QCAR_onUpdate(QCAR::State& /*state*/)
    {
        if (updateBtns)
        {
            // Collect the references to the imageTarget
            ...
            if (buttonMask & BUTTON_1)
            {
                toggleVirtualButton(imageTarget, virtualButtonColors[0],
                                    -108.68f, -53.52f, -75.75f, -65.87f);
            }
            if (buttonMask & BUTTON_2)
            {
                ...
            }
            ...
            buttonMask = 0;
            updateBtns = false;
        }
    }
} qcarUpdate;

创建和销毁虚拟按钮

    下面的方法执行按钮的实际切换开关。这个方法被在上一个代码片段中创建的每一个按钮所调用。下面的代码片段显示了如何创建一个新的按钮和如何得到一个现有的按钮或者销毁它。

// Create/destroy a Virtual Button at runtime
//
// Note: This will NOT work if the tracker is active!
bool
toggleVirtualButton(QCAR::ImageTarget* imageTarget, const char* name,
                    float left, float top, float right, float bottom)
{
    bool buttonToggleSuccess = false;
   
    QCAR::VirtualButton* virtualButton = imageTarget->getVirtualButton(name);
    if (virtualButton != NULL)
    {
        // Destroying Virtual Button
        buttonToggleSuccess = imageTarget->destroyVirtualButton(virtualButton);
    }
    else
    {
        // Creating Virtual Button
        QCAR::Rectangle vbRectangle(left, top, right, bottom);
        QCAR::VirtualButton* virtualButton = imageTarget->createVirtualButton(name, vbRectangle);
        if (virtualButton != NULL)
            buttonToggleSuccess = true;
    }
   
    return buttonToggleSuccess;
}


© 著作权归作者所有

高通科技-孙豪
粉丝 0
博文 5
码字总数 2533
作品 0
济南
项目经理
私信 提问
CasperJS 的安装和快速入门

前些日子我看见StackOverflow的一个问题,说如何动态地延时创建以及销毁容器。我那时就回答说他可以参考我以前写过的有关于如何动态创建与销毁按钮的技术博客,但也许对方实在太懒而根本没有...

王振威
2012/11/27
199
1
wxPython: 让容器自行创建并销毁

前些日子我看见StackOverflow的一个问题,说如何动态地延时创建以及销毁容器。我那时就回答说他可以参考我以前写过的有关于如何动态创建与销毁按钮的技术博客,但也许对方实在太懒而根本没有...

junwong
2012/07/02
2.8K
5
Android生命周期——认识Activity

1、什么是Activity? Activity是一个应用程序组件,提供用户与程序交互的界面。 2、Activity如何创建使用: 继承Android的Activity类 重写方法 设置显示布局 在AndroidManifest文件中,注册A...

落叶-归根
2016/07/23
8
0
使用 AppDomain 存储实现大数据集合

下载源码 335.1KB 介绍 你有32位系统?你在写32位应用?你可能对如何增加你的应用的内存,减少硬盘存储大小更加感兴趣!在应用领域秘诀是什么? 背景 在这篇文章我只谈虚拟内存。真实内存和虚...

oschina
2015/02/13
898
1
JVM 之 运行时数据区(更新)

第一篇 JVM 之 Class文件结构 JVM定义了一系列程序运行期间使用的运行时数据区(run-time data area)。这些数据区域中的一些随着JVM的启动而创建直到JVM的停止而销毁,而另一些则随着某个线...

麦壳原野
2014/12/19
0
9

没有更多内容

加载失败,请刷新页面

加载更多

八、RabbitMQ的集群原理

集群架构 写在前面 RabbitMQ集群是按照低延迟环境设计的,千万不要跨越WAN或者互联网来搭建RabbitMQ集群。如果一定要在高延迟环境下使用RabbitMQ集群,可以参考使用Shovel和Federation工具。...

XuePeng77
今天
1
0
mac系统下,brew 安装mysql,用终端可以连接,navicat却连接不上?

问题: 1.报错? 2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found 2.自己通过设置,已经把密......

写bug的攻城狮
昨天
2
0
老生常谈,HashMap的死循环

问题 最近的几次面试中,我都问了是否了解HashMap在并发使用时可能发生死循环,导致cpu100%,结果让我很意外,都表示不知道有这样的问题,让我意外的是面试者的工作年限都不短。 由于HashMap...

群星纪元
昨天
5
0
拉普拉斯算子

拉普拉斯算子是二阶微分算子。 我们知道,一维离散信号一阶微分公式如下: 相应的,一维离散信号二阶微分公式如下: 由于图像有x和y两个方向,因此图像信号属于二维离散信号。其在x,y两个...

yepanl
昨天
3
0
记录"正则表达式"

详细请查看我的博客:https://blog.enjoytoshare.club/article/RegularExpression.html 1 写在前面 正则表达式(Regular Expression)在代码中常常简写为regex。正则表达式通常被用来检索、替...

wugenqiang
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部