connecting to controller ------LeapMotion API

来源:互联网 发布:tensorflow官方 编辑:程序博客网 时间:2024/06/05 15:25

创建一个Controller对象,来连接设备,这个对象自动的建立与LM后台进程或服务的连接,后台进程随后在Frame对象中可以用来传递追踪数据。

Leap::Contriller controller;

使用controller对象来获取连接状态和连接硬件的情况,以及应用的参数设置情况。

Getting Frames

获得Frame 对象包括通过controller.frame()函数来追踪数据。当APP准备处理数据来得到设备产生的最新数据集时,你可以调用这个函数。你可以实现Listener对象定义一个回调函数,并且当新的数据帧准备就时,Controller会唤醒这个函数。

Foreground and background APPlications

通常情况下,只有应用在当前系统中获得焦点时,LM服务才向其传递数据。这种特性能够防止应用在不获得焦点的空载时,获得其他应用的输入数据的情况。


获得图像

为了从相机获得图像,必须设置图像性质,控制面板中的allow Imags选项,需要选中。

启动手势

为了使用内置的手势(built-in gestures),首先需要使用 controller。enableGesture();

 controller.enableGesture(Leap::Gesture::TYPE_CIRCLE);
只需要开启,应用中需要的手势。

连接状态

当你创造一个控制器,对象将建立与LM服务的连接,controller.isserviceConneceted属性变成true.同样的,如果LM硬件接入并被服务检测到时,controller.isConnected()属性变为真。

控制器事件监听器

控制器对象使用监听机制监听一些事件。为了处理这些事件,你能够拓展Listener类实现回调函数。当事件发生时,控制器唤醒相关的回调函数。

事件包括:

onConnect()The Controller连接了服务和LM设备onDeviceChange()LM硬件状态发生改变onDisconnect()The Controller服务和LM设备失去连接onExit()The Controller 对象被销毁onFocusGained()应用获取焦点,并开始接受数据onFocusLost()应用失去焦点,停止接受数据theBACKGROUND_FRAMES_POLICY.onFrame()新的数据帧已经准备就绪onInit()The Controller对象被初始化onServiceConnect()The Controller连接到服务onServiceDisconnect()                                                                               下面的例子表明监听器父类的实现。

#include <iostream>#include "Leap.h"using namespace Leap;class LeapEventListener : public Listener {  public:    virtual void onConnect(const Controller&);    virtual void onDisconnect(const Controller&);    virtual void onFrame(const Controller&);};void LeapEventListener::onConnect(const Controller& controller) {    std::cout << "Connected" << std::endl;    // Enable gestures, set Config values:    controller.enableGesture(Gesture::TYPE_SWIPE);    controller.config().setFloat("Gesture.Swipe.MinLength", 200.0);    controller.config().save();}//Not dispatched when running in a debuggervoid LeapEventListener::onDisconnect(const Controller& controller) {    std::cout << "Disconnected" << std::endl;}void LeapEventListener::onFrame(const Controller& controller) {    std::cout << "New frame available" << std::endl;    Frame frame = controller.frame();    // Process this frame's data...}
为controller添加监听器

Controller controller;LeapEventListener listener;controller.addListener(listener);



0 0