本文整理汇总了C++中Finger::bone方法的典型用法代码示例。如果您正苦于以下问题:C++ Finger::bone方法的具体用法?C++ Finger::bone怎么用?C++ Finger::bone使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Finger
的用法示例。
在下文中一共展示了Finger::bone方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: drawFinger
//--------------------------------------------------------------
void LeapVisualizer::drawFinger (const Finger & finger,ofxLeapMotion & leap){
if (finger.isValid()){
// For every bone (i.e. phalange) in the finger,
for (int b=0; b<4; b++) {
// Get each bone;
Bone::Type boneType = static_cast<Bone::Type>(b);
Bone bone = finger.bone(boneType);
if (bone.isValid()){
// Don't consider zero-length bones, such as the Thumb's metacarpal.
if (bone.length() > 0){
drawBone (finger, bone,leap);
} // end if boneLength
} // end if bone isValid()
} // end for each bone
if (bDrawSimple){
// Draw the fingertip, which is an extra point within the last phalange.
ofSetColor(ofColor::white);
ofPoint fingerTipPt = leap.getofPoint ( finger.tipPosition() );
ofDrawSphere(fingerTipPt, finger.width() * 0.05);
}
}
}
示例2: getGesture
bool Detect::getGesture(std::string& ret)
{
if(false == LeapController->isConnected())
{
return false;
}
HandList HL = LeapController->frame().hands();
Hand hand = HL[0];
FingerList fingers = hand.fingers();
GestureModel * gm = new GestureModel;
Leap::Matrix handTransform = hand.basis();
handTransform.origin = hand.palmPosition();
handTransform = handTransform.rigidInverse();
//get gesture data
int i = 0;
for (FingerList::const_iterator fl = fingers.begin(); fl != fingers.end(); ++fl) {
const Finger finger = *fl;
// Get finger bones
for (int b = 0; b < 4; ++b) {
Bone::Type boneType = static_cast<Bone::Type>(b);
Bone bone = finger.bone(boneType);
Leap::Vector ori = bone.prevJoint();
Leap::Vector tP = handTransform.transformPoint(ori);
gm->GestureData[i][b][0][0] = tP[0];
gm->GestureData[i][b][0][1] = tP[1];
gm->GestureData[i][b][0][2] = tP[2];
tP = handTransform.transformPoint(bone.nextJoint());
gm->GestureData[i][b][1][0] = tP[0];
gm->GestureData[i][b][1][1] = tP[1];
gm->GestureData[i][b][1][2] = tP[2];
tP = handTransform.transformPoint(bone.direction());
gm->GestureData[i][b][2][0] = gm->GestureData[i][b][1][0] - gm->GestureData[i][b][0][0];
gm->GestureData[i][b][2][1] = gm->GestureData[i][b][1][1] - gm->GestureData[i][b][0][1];
gm->GestureData[i][b][2][2] = gm->GestureData[i][b][1][2] - gm->GestureData[i][b][0][2];
}
i++;
}
//compare
for (int index = 0; index < GestureList.size(); index++)
{
if (true == compareGesture(GestureList[index], gm))
{
ret = GestureList[index]->GestureName;
return true;
}
}
ret = " ";
return false;
}
示例3: recordFingerXML
//--------------------------------------------------------------
void testApp::recordFingerXML (const Finger & finger){
if (bRecordingThisFrame){
if (finger.isValid()){
Finger::Type fingerType = finger.type();
int fingerTagNum = XML.addTag("F");
if( XML.pushTag("F", fingerTagNum) ){
XML.setValue("TYPE", (int)fingerType, fingerTagNum);
XML.setValue("WIDTH", finger.width(), fingerTagNum);
// Add in the fingerTip point as its own point.
ofPoint fingerTipPt = leap.getofPoint ( finger.tipPosition() );
int tipTagNum = XML.addTag("T");
XML.setValue("T:X", fingerTipPt.x, tipTagNum);
XML.setValue("T:Y", fingerTipPt.y, tipTagNum);
XML.setValue("T:Z", fingerTipPt.z, tipTagNum);
// For every bone (i.e. phalange) in the finger,
for (int b=0; b<4; b++) {
// Get each bone;
Bone::Type boneType = static_cast<Bone::Type>(b);
Bone bone = finger.bone(boneType);
if (bone.isValid()){
// Don't consider zero-length bones, such as the Thumb's metacarpal.
if (bone.length() > 0){
recordBoneXML (finger, bone);
} // end if boneLength
} // end if bone isValid()
} // end for each bone
XML.popTag(); // pop F(INGER)
}
} //end if finger isValid()
}
}
示例4: onFrame
void LeapHands::onFrame(const Controller& controller)
{
//Game::Instance()->PrintFloat("Hand children: ", childrenMap.size());
std::map<string, BoneData> tempBoneData;
HandList hands = controller.frame().hands();
int handId = 0;
hands[0].fingers()[(int) Finger::Type::TYPE_THUMB];
for (HandList::const_iterator hl = hands.begin(); hl != hands.end(); ++hl) {
// Get the first hand
const Hand hand = *hl;
// Get fingers
const FingerList fingers = hand.fingers();
int fingerId = 0;
bool firstFinger = true;
Finger previousFinger;
stringstream ass;
ass << "Arm: 0 Hand: " << handId;
tempBoneData[ass.str()] = BoneData(ass.str(), LeapToGlVec3(hand.arm().wristPosition()), LeapToGlVec3(hand.arm().elbowPosition()), true);
ass.clear();
glm::vec3 thumbBone = LeapToGlVec3(hand.fingers()[Finger::Type::TYPE_THUMB].bone(Bone::Type::TYPE_DISTAL).nextJoint());
glm::vec3 indexBone = LeapToGlVec3(hand.fingers()[Finger::Type::TYPE_INDEX].bone(Bone::Type::TYPE_DISTAL).nextJoint());
pinchDist = glm::length(thumbBone - indexBone);
if (pinchDist < 5.0f)
{
pinch = true;
}
else
{
pinch = false;
}
for (FingerList::const_iterator fl = fingers.begin(); fl != fingers.end(); ++fl) {
const Finger finger = *fl;
// Get finger bones
for (int b = 0; b < 4; ++b) {
Bone::Type boneType = static_cast<Bone::Type>(b);
Bone bone = finger.bone(boneType);
stringstream ss;
ss << "Hand: " << handId << " Finger: " << fingerId << " Bone: " << b;
tempBoneData[ss.str()] = BoneData(ss.str(), LeapToGlVec3(bone.prevJoint()), LeapToGlVec3(bone.nextJoint()), true);
}
// Draw some other bits of the hand
if (!firstFinger)
{
for (int b = 0; b < 2; ++b)
{
stringstream ss;
ss << "Hand: " << handId << "Finger: " << (fingerId - 1) << "Finger: " << (fingerId) << " Bone: " << b;
Bone startBone = previousFinger.bone(static_cast<Bone::Type>(b));
Bone endBone = finger.bone(static_cast<Bone::Type>(b));
if ((b == 1) && (fingerId == 1))
{
tempBoneData[ss.str()] = BoneData(ss.str(), LeapToGlVec3(startBone.nextJoint()), LeapToGlVec3(endBone.prevJoint()), false);
}
else
{
tempBoneData[ss.str()] = BoneData(ss.str(), LeapToGlVec3(startBone.prevJoint()), LeapToGlVec3(endBone.prevJoint()), false);
}
}
}
const GestureList gestures = controller.frame().gestures();
for (int g = 0; g < gestures.count(); ++g)
{
Gesture gesture = gestures[g];
switch (gesture.type())
{
case Gesture::TYPE_CIRCLE:
{
CircleGesture circle = gesture;
if (gesture.durationSeconds() > 1)
{
if (circle.pointable().direction().angleTo(circle.normal()) <= PI / 2) {
spawn = vehicle;
}
else {
spawn = model;
}
}
}
}
}
previousFinger = finger;
firstFinger = false;
++fingerId;
}
++handId;
}
EnterCriticalSection(&criticalSection);
trackedHands = handId;
//.........这里部分代码省略.........
示例5: onFrame
void LeapListener::onFrame(const Controller & controller) {
// Get the most recent frame and report some basic information
const Frame frame = controller.frame();
std::cout << "Frame id: " << frame.id()
<< ", timestamp: " << frame.timestamp()
<< ", hands: " << frame.hands().count()
<< ", extended fingers: " << frame.fingers().extended().count()
<< ", tools: " << frame.tools().count()
<< ", gestures: " << frame.gestures().count() << std::endl;
HandList hands = frame.hands();
for (HandList::const_iterator hl = hands.begin(); hl != hands.end(); ++hl) {
// Get the first hand
const Hand hand = *hl;
std::string handType = hand.isLeft() ? "Left hand" : "Right hand";
std::cout << std::string(2, ' ') << handType << ", id: " << hand.id()
<< ", palm position: " << hand.palmPosition() << std::endl;
// Get the hand's normal vector and direction
const Vector normal = hand.palmNormal();
const Vector direction = hand.direction();
// Calculate the hand's pitch, roll, and yaw angles
std::cout << std::string(2, ' ') << "pitch: " << direction.pitch() * RAD_TO_DEG << " degrees, "
<< "roll: " << normal.roll() * RAD_TO_DEG << " degrees, "
<< "yaw: " << direction.yaw() * RAD_TO_DEG << " degrees" << std::endl;
// Get the Arm bone
Arm arm = hand.arm();
std::cout << std::string(2, ' ') << "Arm direction: " << arm.direction()
<< " wrist position: " << arm.wristPosition()
<< " elbow position: " << arm.elbowPosition() << std::endl;
// Get fingers
const FingerList fingers = hand.fingers();
for (FingerList::const_iterator fl = fingers.begin(); fl != fingers.end(); ++fl) {
const Finger finger = *fl;
std::cout << std::string(4, ' ') << fingerNames[finger.type()]
<< " finger, id: " << finger.id()
<< ", length: " << finger.length()
<< "mm, width: " << finger.width() << std::endl;
// Get finger bones
for (int b = 0; b < 4; ++b) {
Bone::Type boneType = static_cast<Bone::Type>(b);
Bone bone = finger.bone(boneType);
std::cout << std::string(6, ' ') << boneNames[boneType]
<< " bone, start: " << bone.prevJoint()
<< ", end: " << bone.nextJoint()
<< ", direction: " << bone.direction() << std::endl;
}
}
}
// Get tools
const ToolList tools = frame.tools();
for (ToolList::const_iterator tl = tools.begin(); tl != tools.end(); ++tl) {
const Tool tool = *tl;
std::cout << std::string(2, ' ') << "Tool, id: " << tool.id()
<< ", position: " << tool.tipPosition()
<< ", direction: " << tool.direction() << std::endl;
}
// Get gestures
const GestureList gestures = frame.gestures();
for (int g = 0; g < gestures.count(); ++g) {
Gesture gesture = gestures[g];
switch (gesture.type()) {
case Gesture::TYPE_CIRCLE: {
CircleGesture circle = gesture;
std::string clockwiseness;
if (circle.pointable().direction().angleTo(circle.normal()) <= PI/2) {
clockwiseness = "clockwise";
} else {
clockwiseness = "counterclockwise";
}
// Calculate angle swept since last frame
float sweptAngle = 0;
if (circle.state() != Gesture::STATE_START) {
CircleGesture previousUpdate = CircleGesture(controller.frame(1).gesture(circle.id()));
sweptAngle = (circle.progress() - previousUpdate.progress()) * 2 * PI;
}
std::cout << std::string(2, ' ')
<< "Circle id: " << gesture.id()
<< ", state: " << stateNames[gesture.state()]
<< ", progress: " << circle.progress()
<< ", radius: " << circle.radius()
<< ", angle " << sweptAngle * RAD_TO_DEG
<< ", " << clockwiseness << std::endl;
break;
}
case Gesture::TYPE_SWIPE: {
SwipeGesture swipe = gesture;
std::cout << std::string(2, ' ')
<< "Swipe id: " << gesture.id()
<< ", state: " << stateNames[gesture.state()]
<< ", direction: " << swipe.direction()
<< ", speed: " << swipe.speed() << std::endl;
//.........这里部分代码省略.........
示例6: onFrame
//metodo en bucle que actualiza la informacion de frecuencia, volumen y handsGl
void leapMotion::onFrame(const Controller& controller) {
const Frame frame = controller.frame();
int j = 0;
float mejor = 1000;
float mejorVol = 1000;
int nada=-1000;
Vector vNada = Vector(nada,nada,nada);
Matrix mNada = Matrix(vNada,vNada,vNada);
HandList hands = frame.hands();
numManos = hands.count();
for(int i=0; i<numManos; i++){
palma[i] = hands[i].palmPosition();
//anchuraPalmas[i] = hands[i].palmWidth();
direccionMano[i] = hands[i].basis();
float distVol=palma[i].y;
if((palma[i].x/50)<-4 && (palma[i].x/50)>-7 && distVol<=mejorVol) mejorVol=distVol;
//if(distVol<=mejorVol) mejorVol=distVol;
for (int f = 0; f < hands[i].fingers().count(); f++) {
Finger finger = hands[i].fingers()[f];
for (int b = 0; b < 4; b++) {
Bone bone = finger.bone(static_cast<Leap::Bone::Type>(b));
handsGl[i*20+f*4+b]=bone.nextJoint();
float dist=sqrt(pow(4.125-(handsGl[i*20+f*4+b].x/50),2)+pow((-0.75)-(handsGl[i*20+f*4+b].z/50),2));
if(dist<=mejor) mejor=dist;
centroHuesos[i*20+f*4+b]=bone.nextJoint();
direccionHuesos[i*20+f*4+b]=bone.basis();
longitudHuesos[i*20+f*4+b]=bone.length();
anchuraHuesos[i*20+f*4+b]=bone.width()/2;
}
}
}
for(int i=numManos*20;i<40;i++) handsGl[i] = vNada;
for(int i=numManos; i<2; i++) palma[i] = vNada;
//for(int i=numManos; i<2; i++) anchuraPalmas[i] = 0;
for(int i=numManos; i<2; i++) direccionMano[i] = mNada;
for(int i=numManos*20; i<40; i++) direccionHuesos[i] = mNada;
for(int i=numManos*20; i<40; i++) centroHuesos[i] = vNada;
for(int i=numManos*20; i<40; i++) longitudHuesos[i] = 0;
for(int i=numManos*20; i<40; i++) anchuraHuesos[i] = 0;
if(mejor<=0.1) freq=7902.13; //se supone que al tocar la antena del theremin, se produce una frecuencia de sonido muy alta
else if(mejor<=5){
freq=4000*(1-mejor/5);
}
else freq=0;
if(mejorVol>=250 && mejorVol<=350) volumen=1*((mejorVol-250)/100);
else if(mejorVol<250) volumen=0;
else volumen=1;
}
示例7: onFrame
void SampleListener::onFrame(const Controller& controller)
{
bool thand, index = false;
// Get the most recent frame and report some basic information
const Frame frame = controller.frame();
// Receive Hand List
HandList hands = frame.hands();
// For all hands
for (HandList::const_iterator hl = hands.begin(); hl != hands.end(); ++hl)
{
// Get the first hand
const Hand hand = *hl;
// Only for right hand
if( hand.isRight() )
{
// Get fingers
const FingerList fingers = hand.fingers();
// For all fingers in the list
for (FingerList::const_iterator fl = fingers.begin(); fl != fingers.end(); ++fl)
{
Bone bone;
const Finger finger = *fl;
// If thamb or Index finger
if( finger.type() == Finger::TYPE_THUMB )
{
// Receive nided bone
bone = finger.bone(Bone::TYPE_DISTAL);
m_vThand = bone.center();
thand = true;
}
else if( finger.type() == Finger::TYPE_INDEX )
{
// Receive nided bone
bone = finger.bone(Bone::TYPE_DISTAL);
m_vIndex = bone.center();
index = true;
}
}
}
}
bool newState;
if( !thand || !index )
{
newState = false;
}
else
{
float distance = m_vThand.distanceTo(m_vIndex);
qDebug () << "Distance: " << distance;
if( distance < 40 )
{
newState = true;
}
else
{
newState = false;
}
}
if( newState != m_bLastState )
{
Q_EMIT releySignal( newState );
m_bLastState = newState;
}
}
示例8: frame
void LeapHander::frame(pugi::xml_node &frameNode){
Leap::Frame currentFrame = m_sampleListener.frame();
m_lock.lock();
frameNode.append_attribute("id").set_value(currentFrame.id());
pugi::xml_node handList = frameNode.append_child("hands");
HandList hands = currentFrame.hands();
for (HandList::const_iterator hl = hands.begin(); hl != hands.end(); ++hl) {
// Get the first hand
const Hand hand = *hl;
pugi::xml_node handNode = handList.append_child("hand");
handNode.append_attribute("id").set_value(hand.id());
std::string handType;
if (hand.isLeft()) {
handType = "Left";
}
else {
handType = "Right";
}
handNode.append_attribute("type").set_value(handType.c_str());
pugi::xml_node positionNode = handNode.append_child("position");
positionToXml(positionNode, hand.palmPosition());
/*pugi::xml_node normalNode = handNode.append_child("normal");
positionToXml(normalNode, hand.palmNormal());
pugi::xml_node directionNode = handNode.append_child("direction");
positionToXml(directionNode, hand.direction());
pugi::xml_node rotationNode = handNode.append_child("basis");
rotationToXml(rotationNode, hand.basis());*/
//// Get fingers
pugi::xml_node fingerList = handNode.append_child("fingers");
const FingerList fingers = hand.fingers();
for (FingerList::const_iterator fl = fingers.begin(); fl != fingers.end(); ++fl) {
const Finger finger = *fl;
pugi::xml_node fingerNode = fingerList.append_child("finger");
fingerNode.append_attribute("id").set_value(finger.id());
fingerNode.append_attribute("name").set_value(fingerNames[finger.type()].c_str());
pugi::xml_node boneList = fingerNode.append_child("bones");
// Get finger bones
for (int b = 0; b < 4; ++b) {
Bone::Type boneType = static_cast<Bone::Type>(b);
Bone bone = finger.bone(boneType);
pugi::xml_node boneNode = boneList.append_child("bone");
boneNode.append_attribute("length").set_value(bone.length());
boneNode.append_attribute("name").set_value(boneNames[boneType].c_str());
pugi::xml_node prevJoint = boneNode.append_child("prevJoint");
positionToXml(prevJoint, bone.prevJoint());
pugi::xml_node nextJoint = boneNode.append_child("nextJoint");
positionToXml(nextJoint, bone.nextJoint());
/*pugi::xml_node rotation = boneNode.append_child("basis");
rotationToXml(rotation, bone.basis());*/
}
}
}
m_lock.unlock();
}
示例9: drawHands
void LeapBrowser::drawHands()
{
Frame frame = leap_controller.frame();
math::vector trans = leap_transform.translation;
math::quater rot_quat = leap_transform.rotation;
math::vector rot_vect = math::ln( rot_quat );
double angle = rot_vect.length() * 2.0;
math::vector axis = ( angle != 0 ? rot_vect / angle : rot_vect );
glMatrixMode( GL_MODELVIEW );
glPushMatrix();
glTranslatef( trans.x(), trans.y(), trans.z() );
if( angle != 0 )
{
glRotatef( angle * 180.0 / M_PI, axis.x(), axis.y(), axis.z() );
}
HandList hands = frame.hands();
for( HandList::const_iterator hl = hands.begin(); hl != hands.end(); ++hl )
{
const Hand hand = *hl;
float joint_radius = 5.0f;
float bone_radius = 4.5f;
Vector prev_palm_start(0,0,0);
Vector prev_palm_end(0,0,0);
int f = 0;
const FingerList fingers = hand.fingers();
for( FingerList::const_iterator fl = fingers.begin(); fl != fingers.end(); ++fl, ++f )
{
const Finger finger = *fl;
Vector curr_palm_start(0,0,0);
Vector curr_palm_end(0,0,0);
for( int b=0; b < 4; b++ )
{
Bone::Type bone_type = static_cast<Bone::Type>( b );
Bone bone = finger.bone( bone_type );
Vector start = bone.prevJoint();
Vector end = bone.nextJoint();
math::position p0( start.x, start.y, start.z );
math::position p1( end.x, end.y, end.z );
if( is_tracking_pose == true && finger.type() == Finger::Type::TYPE_INDEX && b==3 )
{
drawing_tool.setColor( 1, 0, 0, 1 );
}
else
{
drawing_tool.setColor( 0.5, 0.7, 0.5, 1 );
}
drawing_tool.drawSphere( p1, joint_radius );
drawing_tool.setColor( 0.5, 0.7, 0.5, 1 );
drawing_tool.drawSphere( p0, joint_radius );
drawing_tool.drawCylinder( p0, p1, bone_radius );
//
if( b == 0 && fl != fingers.begin() || b == 1 && fl == fingers.begin() )
{
curr_palm_start = start;
curr_palm_end = end;
}
}
if( f > 1 ) //fl != fingers.begin() )
{
drawing_tool.setColor( 0.5, 0.7, 0.5, 1 );
drawing_tool.applyColor();
glBegin( GL_QUADS );
glVertex3f( prev_palm_start.x, prev_palm_start.y, prev_palm_start.z );
glVertex3f( prev_palm_end.x, prev_palm_end.y, prev_palm_end.z );
glVertex3f( curr_palm_end.x, curr_palm_end.y, curr_palm_end.z );
glVertex3f( curr_palm_start.x, curr_palm_start.y, curr_palm_start.z );
glEnd();
}
prev_palm_start = curr_palm_start;
prev_palm_end = curr_palm_end;
}
}
glPopMatrix();
}