//Handle Leap Gesture processing. //Trigger the corresponding effects in the particle field. void GesturesDemo::processGestures() { Leap::Frame frame = controller.frame(); if ( lastFrame == frame ) { return; } Leap::GestureList gestures = lastFrame.isValid() ? frame.gestures(lastFrame) : frame.gestures(); lastFrame = frame; size_t numGestures = gestures.count(); for (size_t i=0; i < numGestures; i++) { if (gestures[i].type() == Leap::Gesture::TYPE_SCREEN_TAP) { printf("screen screen tap gesture"); Leap::ScreenTapGesture tap = gestures[i]; ci::Vec3f tapLoc = normalizeCoords(tap.position()); field.Repel(tap.id(), ci::Vec2f(tapLoc.x, tapLoc.y), 3.0); } else if (gestures[i].type() == Leap::Gesture::TYPE_KEY_TAP) { printf("screen key tap gesture"); Leap::KeyTapGesture tap = gestures[i]; ci::Vec3f tapLoc = normalizeCoords(tap.position()); field.Repel(tap.id(), ci::Vec2f(tapLoc.x, tapLoc.y), -3.0); } else if (gestures[i].type() == Leap::Gesture::TYPE_SWIPE) { printf(" swipe gesture"); Leap::SwipeGesture swipe = gestures[i]; Leap::Vector diff = 0.004f*(swipe.position() - swipe.startPosition()); ci::Vec3f curSwipe(diff.x, -diff.y, diff.z); field.Translate(swipe.id(), curSwipe); } else if (gestures[i].type() == Leap::Gesture::TYPE_CIRCLE) { printf(" circle gesture"); Leap::CircleGesture circle = gestures[i]; float progress = circle.progress(); if (progress >= 1.0f) { ci::Vec3f center = normalizeCoords(circle.center()); ci::Vec3f normal(circle.normal().x, circle.normal().y, circle.normal().z); double curAngle = 6.5; if (normal.z < 0) { curAngle *= -1; } field.Rotate(circle.id(), ci::Vec2f(center.x, center.y), circle.radius()/250, curAngle); } } } }
void QtLeapScreenTapGesture::update(const Leap::Gesture &gesture) { Leap::ScreenTapGesture tapGesture = static_cast<Leap::ScreenTapGesture>(gesture); this->setId(tapGesture.id()); this->setState(gesture.state()); this->setDirection(QVector3D(tapGesture.direction().x, tapGesture.direction().y, tapGesture.direction().x)); this->setPosition(QVector3D(tapGesture.position().x, tapGesture.position().y, tapGesture.position().z)); this->setState(tapGesture.state()); }