package org.myrobotlab.leap; import com.leapmotion.leap.Arm; import com.leapmotion.leap.Bone; import com.leapmotion.leap.CircleGesture; import com.leapmotion.leap.Controller; import com.leapmotion.leap.Finger; import com.leapmotion.leap.Frame; import com.leapmotion.leap.Gesture; import com.leapmotion.leap.Gesture.State; import com.leapmotion.leap.GestureList; import com.leapmotion.leap.Hand; import com.leapmotion.leap.KeyTapGesture; import com.leapmotion.leap.Listener; import com.leapmotion.leap.ScreenTapGesture; import com.leapmotion.leap.SwipeGesture; import com.leapmotion.leap.Tool; import com.leapmotion.leap.Vector; public class SampleListener extends Listener { @Override public void onConnect(Controller controller) { System.out.println("Connected"); controller.enableGesture(Gesture.Type.TYPE_SWIPE); controller.enableGesture(Gesture.Type.TYPE_CIRCLE); controller.enableGesture(Gesture.Type.TYPE_SCREEN_TAP); controller.enableGesture(Gesture.Type.TYPE_KEY_TAP); } @Override public void onDisconnect(Controller controller) { // Note: not dispatched when running in a debugger. System.out.println("Disconnected"); } @Override public void onExit(Controller controller) { System.out.println("Exited"); } @Override public void onFrame(Controller controller) { // Get the most recent frame and report some basic information Frame frame = controller.frame(); System.out.println("Frame id: " + frame.id() + ", timestamp: " + frame.timestamp() + ", hands: " + frame.hands().count() + ", fingers: " + frame.fingers().count() + ", tools: " + frame.tools().count() + ", gestures " + frame.gestures().count()); // Get hands for (Hand hand : frame.hands()) { String handType = hand.isLeft() ? "Left hand" : "Right hand"; System.out.println(" " + handType + ", id: " + hand.id() + ", palm position: " + hand.palmPosition()); // Get the hand's normal vector and direction Vector normal = hand.palmNormal(); Vector direction = hand.direction(); // Calculate the hand's pitch, roll, and yaw angles System.out.println(" pitch: " + Math.toDegrees(direction.pitch()) + " degrees, " + "roll: " + Math.toDegrees(normal.roll()) + " degrees, " + "yaw: " + Math.toDegrees(direction.yaw()) + " degrees"); // Get arm bone Arm arm = hand.arm(); System.out.println(" Arm direction: " + arm.direction() + ", wrist position: " + arm.wristPosition() + ", elbow position: " + arm.elbowPosition()); // Get fingers for (Finger finger : hand.fingers()) { System.out.println(" " + finger.type() + ", id: " + finger.id() + ", length: " + finger.length() + "mm, width: " + finger.width() + "mm"); // Get Bones for (Bone.Type boneType : Bone.Type.values()) { Bone bone = finger.bone(boneType); System.out.println(" " + bone.type() + " bone, start: " + bone.prevJoint() + ", end: " + bone.nextJoint() + ", direction: " + bone.direction()); } } } // Get tools for (Tool tool : frame.tools()) { System.out.println(" Tool id: " + tool.id() + ", position: " + tool.tipPosition() + ", direction: " + tool.direction()); } GestureList gestures = frame.gestures(); for (int i = 0; i < gestures.count(); i++) { Gesture gesture = gestures.get(i); switch (gesture.type()) { case TYPE_CIRCLE: CircleGesture circle = new CircleGesture(gesture); // Calculate clock direction using the angle between circle // normal and pointable String clockwiseness; if (circle.pointable().direction().angleTo(circle.normal()) <= Math.PI / 2) { // Clockwise if angle is less than 90 degrees clockwiseness = "clockwise"; } else { clockwiseness = "counterclockwise"; } // Calculate angle swept since last frame double sweptAngle = 0; if (circle.state() != State.STATE_START) { CircleGesture previousUpdate = new CircleGesture(controller.frame(1).gesture(circle.id())); sweptAngle = (circle.progress() - previousUpdate.progress()) * 2 * Math.PI; } System.out.println(" Circle id: " + circle.id() + ", " + circle.state() + ", progress: " + circle.progress() + ", radius: " + circle.radius() + ", angle: " + Math.toDegrees(sweptAngle) + ", " + clockwiseness); break; case TYPE_SWIPE: SwipeGesture swipe = new SwipeGesture(gesture); System.out .println(" Swipe id: " + swipe.id() + ", " + swipe.state() + ", position: " + swipe.position() + ", direction: " + swipe.direction() + ", speed: " + swipe.speed()); break; case TYPE_SCREEN_TAP: ScreenTapGesture screenTap = new ScreenTapGesture(gesture); System.out.println(" Screen Tap id: " + screenTap.id() + ", " + screenTap.state() + ", position: " + screenTap.position() + ", direction: " + screenTap.direction()); break; case TYPE_KEY_TAP: KeyTapGesture keyTap = new KeyTapGesture(gesture); System.out.println(" Key Tap id: " + keyTap.id() + ", " + keyTap.state() + ", position: " + keyTap.position() + ", direction: " + keyTap.direction()); break; default: System.out.println("Unknown gesture type."); break; } } if (!frame.hands().isEmpty() || !gestures.isEmpty()) { System.out.println(); } } @Override public void onInit(Controller controller) { System.out.println("Initialized"); } public void strenght(Controller controller) { Frame frame = controller.frame(); Hand hand = frame.hands().rightmost(); System.out.println("Strenght is: " + hand.grabStrength()); } }