private MagicLeapHand GetOrAddHand(MLHandTracking.Hand mlHand, Handedness handedness) { if (trackedHands.ContainsKey(handedness)) { return(trackedHands[handedness]); } // Add new hand var pointers = RequestPointers(SupportedControllerType.ArticulatedHand, handedness); var inputSourceType = InputSourceType.Hand; var inputSource = Service?.RequestNewGenericInputSource($"Magic Leap {handedness} Hand", pointers, inputSourceType); var controller = new MagicLeapHand(TrackingState.Tracked, handedness, inputSource); controller.Initalize(new ManagedHand(mlHand)); for (int i = 0; i < controller.InputSource?.Pointers?.Length; i++) { controller.InputSource.Pointers[i].Controller = controller; } Service?.RaiseSourceDetected(controller.InputSource, controller); trackedHands.Add(handedness, controller); return(controller); }
//Constructors: public ManagedHand(MLHandTracking.Hand hand, HandInput handInput) { _handInput = handInput; Hand = hand; Skeleton = new ManagedHandSkeleton(this); Gesture = new ManagedHandGesture(this); Collider = new ManagedHandCollider(this); }
/// <summary> /// Gets the confidence value for the hand being tracked. /// </summary> /// <param name="hand">Hand to check the confidence value on.</param> private float GetKeyPoseConfidence(MLHandTracking.Hand hand) { if (hand != null) { if (hand.KeyPose == _keyPoseToTrack) { return(hand.HandKeyPoseConfidence); } } return(0.0f); }
protected void UpdateHand(MLHandTracking.Hand mlHand, Handedness handedness) { if (mlHand.IsVisible) { var hand = GetOrAddHand(mlHand, handedness); hand.DoUpdate(); } else { RemoveHandDevice(handedness); } }
//Constructors: public ManagedHand(MLHandTracking.Hand hand, HandInput handInput) { _handInput = handInput; Hand = hand; Skeleton = new ManagedHandSkeleton(this); Gesture = new ManagedHandGesture(this); // Modified here by prnvcher to not explode if using null hand input if (handInput != null) { Collider = new ManagedHandCollider(this); } }
/// <summary> /// Gets the confidence value for the hand being tracked. /// </summary> /// <param name="hand">Hand to check the confidence value on.</param> private float GetKeyPoseConfidence(MLHandTracking.Hand hand) { if (hand != null) { switch (hand.KeyPose) { case MLHandTracking.HandKeyPose.Finger: { cur_pose[0] = "Finger"; break; } case MLHandTracking.HandKeyPose.Pinch: { cur_pose[0] = "Pinch"; break; } case MLHandTracking.HandKeyPose.Thumb: { cur_pose[0] = "Thumb"; break; } case MLHandTracking.HandKeyPose.L: { cur_pose[0] = "L"; break; } case MLHandTracking.HandKeyPose.OpenHand: { cur_pose[0] = "Open Hand"; break; } case MLHandTracking.HandKeyPose.Ok: { cur_pose[0] = "Ok"; break; } case MLHandTracking.HandKeyPose.C: { cur_pose[0] = "C"; break; } case MLHandTracking.HandKeyPose.NoPose: { cur_pose[0] = "No Pose"; break; } } } PostPoseToConsole(cur_pose[0]); return(hand.HandKeyPoseConfidence); }
private bool GetGesture(MLHandTracking.Hand hand, MLHandTracking.HandKeyPose type) { if (hand != null) { if (hand.KeyPose == type) { if (hand.HandKeyPoseConfidence > 0.9f) { return(true); } } } return(false); }
protected void UpdateHand(MLHandTracking.Hand mlHand, Handedness handedness) { if (!IsHandednessValid(handedness, CurrentHandSettings)) { return; } if (mlHand != null && mlHand.IsVisible) { var hand = GetOrAddHand(mlHand, handedness); hand.DoUpdate(); } else { RemoveHandDevice(handedness); } }
//Constructors: public ManagedFinger(MLHandTracking.Hand hand, FingerType fingerType, params ManagedKeypoint[] points) { //sets: _hand = hand; this.points = points; _lastReliableEnd = points[0]; FingerType = fingerType; //hooks: foreach (var item in points) { item.OnFound += HandlePointVisibilityChanged; item.OnLost += HandlePointVisibilityChanged; } //initial events: OnVisibilityChanged?.Invoke(this, false); HandlePointVisibilityChanged(); }
protected void UpdateHand(MLHandTracking.Hand mlHand, Handedness handedness) { switch (CurrentHandSettings) { case HandSettings.None: return; case HandSettings.Left: if (handedness != Handedness.Left) { return; } break; case HandSettings.Right: if (handedness != Handedness.Right) { return; } break; case HandSettings.Both: if (handedness != Handedness.Left && handedness != Handedness.Right) { return; } break; } if (mlHand != null && mlHand.IsVisible) { var hand = GetOrAddHand(mlHand, handedness); hand.DoUpdate(); } else { if (trackedHands.TryGetValue(handedness, out Input.MagicLeapHand hand)) { RemoveHandDevice(hand); } } }
//Constructors: public ManagedHand(MLHandTracking.Hand hand) { Hand = hand; Skeleton = new ManagedHandSkeleton(this); Gesture = new ManagedHandGesture(this); }