天天看點

Leap Motion SDK學習--API(翻譯)

Leap Motion SDK學習--API(翻譯)

Tool類

函數:

l  Tool()

l  Tool(const Pointable&)

l  Invalid()

l  toString()const

l   

classLeap:: Tool

Tool類表示一個被跟蹤的工具。在LeapMotion中,可指向對象被定義為工具。工具比手指更長,更細,更直。我們可以從一幀圖像或者手對象中得到工具對象。

工具也可指向手,但是它們不像手指一樣與手臂永久關聯,其可以在ID不變的情況下在雙手間傳遞。

工具對象可能無效,這意味着它們不包含有效的跟蹤資料或者不對應于一個實體工具。無效的工具類可能是由于要求一個工具類使用一個在之前幀存在過(但目前幀不存在)的工具類對象的ID号造成的。從工具的構造函數建立的工具對象也是無效的。可以使用Tool::isValid()函數驗證工具對象的有效性。

Pointable類

函數:

l Pointable()

l invalid()

l toString() const

class Leap::Pointable()

Pointable類檢測對象的實體特征。Pointable對象包括finger和Tool兩類,可以通過函數Pointable::isFinger()和Pointable::isTool()來判斷一個對象時finger還是Tool。

Leap::Pointablepointable = frame.pointables().frontmost();

Leap::Vectordirection = pointable.direction();

float length= pointable.length();

float width =pointable.width();

Leap::VectorstabilizedPosition = pointable.stabilizedTipPosition();

Leap::Vectorposition = pointable.tipPosition();

Leap::Vectorspeed = pointable.tipVelocity();

floattouchDistance = pointable.touchDistance();

Leap::Pointable::Zonezone = pointable.touchZone();

Public Functions

l  Vectordirection()

功能: 傳回手指或者工具指向的方向,方向用一個單元向量表示,指向的方向就是手指或者工具頂端指向的方向。

VectorpointingToward=pointable.direction();

//如果需要修改方向擷取需要對pointable類進行內建或覆寫

l  Frameframe()

FrameframeOfThisPointableObject=pointable.frame();

傳回值: 如果有的話,傳回相關Frame對象;否則,傳回一個無效的Frame對象。

l  Handhand()

表示與手指或工具相關聯的手對象

HandattachedHand=pointalbe.hand();

傳回值:如果有的話,傳回相關Hand對象;否則,傳回一個無效的Hand對象。

l  Int32_tid()

給Pointable對象指定的特定的ID号,當被追蹤的手指和工具在連續幀中始終可見時其ID号保持不變。當跟蹤失敗時(例如,當一個手指被另一個手指遮擋或者手指從LeapMotion的可視範圍中離開),LeapMotion會在重新檢測到這個實體時為其重新配置設定一個ID号。

Int32_ttheID=pointable.id();

傳回值:Pointable對象的ID

可以根據ID号以及Frame::pointable()函數在後面的幀中找到該對象。ID号的範圍是1~100,當跟蹤對象超過100時,将使用-1作為ID号直到有可用的ID号。

l  bool isExtended()

功能:檢測Pointable對象是否是延伸的

當手指是從手的直線延長就被認為是擴充的;當手指向下彎曲或卷曲朝向手掌時就不是延伸的。工具永遠是延伸的。

intextendedFingers = 0;

for(int f = 0; f < hand.fingers().count(); f++)

{

    Finger finger = hand.fingers()[f];

    if(finger.isExtended()) extendedFingers++;

}

傳回值: 當對象是延伸的時,傳回TRUE

l  bool isFinger() / bool isTool()

手指比工具短,粗并且沒有那麼直。

if(pointable.isTool()) {

    Leap::Tool tool = Leap::Tool(pointable);

}else {

    Leap::Finger finger =Leap::Finger(pointable);

}

l  boolisValid()

判斷一個Pointable對象是否有效

if(pointable.isValid()) {

    //Use it...

}

當對象包含跟蹤資料時,就真的存在,傳回TRUE。

l  float length()

float apparentlength =pointable.length();

功能:計算在Leap Motion的可見範圍下手指或者工具的長度(機關:mm),如果長度值不知道,就傳回0.

l  booloperator!=(const Pointable &)

bool operator==(const Pointable &)

功能: 比較兩個對象是否對等

thisPointable!=thatPointable;

當且僅當兩個對象都有效且代表同一幀中相同的實體實體時兩個對象才是相同的。

l  VectorstabilizedTipPosition()

Vector stabilizedPosition =pointable.stabilizedTipPosition();

功能:對Pointable對象的頂端進行平滑化和穩定化處理,以使該值更适合于與2D内容進行互動。穩定的位置滞後于頂端位置一個可變值,主要取決于對象的運動速度。

傳回值: 修正的頂端位置。

l  floattimeVisible()

float lifetime=pointable.timeVisible();

功能: Pointable對象被持續跟蹤的時間(在控制器的可見範圍内)。

l  Vector tipPosition()

Vector currentPosition =pointable.tipPosition();

傳回值: 傳回頂端的坐标(機關:mm)。

l  VectortipVelocity()

Vector currentSpeed =pointable.tipVelocity();

傳回值: 傳回頂端的運動速度,為一個矢量。

l  Tool(const Pointable &)

如果一個特定的Pointable對象表示一個工具,那麼建立它的一個副本作為工具對象;否則建立一個無效的工具對象。

If(pointable.isTool()){

    Tool tool=Tool(pointable);

}

l  std::stringtoString()

傳回一個字元串,包含了工具的簡單說明。

l  floattouchDistance()

Pointable對象與自适應觸摸屏面之間的距離。範圍為[-1,1],值為1.0表示對象與平面無限遠,0表示對象剛好進入可觸摸區域;-1表示對象堅定滴在可觸摸區域,0.5表示對象在正在進入懸停區。

floatdistance = pointable.touchDistance();

if(distance > 0) {

    //Handle hovering ...

}else {

    //Handle touching ...

}

l  ZonetouchZone()

LeapMotion的軟體依據能夠适應使用者手指移動和手指形狀的浮動觸摸區來計算觸摸區。LeapMotion軟甲将有目的的運動作為可能的觸摸點。當Pointable對象靠近自适應觸摸平面時,他進入了“徘徊”區域,當對象到達或者穿過了平面時,他進入了“觸摸”區。

touchDistance為在懸停區和觸摸區的對象提供了一個歸一化的預測。

傳回值:對象目前的觸摸區域。

switch(pointable.touchZone()) {

    case Pointable::Zone::ZONE_NONE:

        //Handle distant pointable

        break;

    case Pointable::Zone::ZONE_HOVERING:

        //Handle pointable near touch plane

        break;

    case Pointable::Zone::ZONE_TOUCHING:

        //Handle pointable penetrating touchplane

        break;

    default:

        //Handle error cases...

        break;

}

l  Floatwidth()

floataverageThickness=pointable.width();

傳回值:手指或工具的寬度(機關: mm)。

Public Static Functions

l  constTool&invalid()

功能: 傳回一個無效的工具對象,可以用該函數驗證一個給定的工具執行個體是否是有效的。

if(tool != Tool::invalid()) {

    //Handle valid tool data

}

繼續閱讀