コード例 #1
0
        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);
        }
コード例 #2
0
 //Constructors:
 public ManagedHand(MLHandTracking.Hand hand, HandInput handInput)
 {
     _handInput = handInput;
     Hand       = hand;
     Skeleton   = new ManagedHandSkeleton(this);
     Gesture    = new ManagedHandGesture(this);
     Collider   = new ManagedHandCollider(this);
 }
コード例 #3
0
 /// <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);
 }
コード例 #4
0
 protected void UpdateHand(MLHandTracking.Hand mlHand, Handedness handedness)
 {
     if (mlHand.IsVisible)
     {
         var hand = GetOrAddHand(mlHand, handedness);
         hand.DoUpdate();
     }
     else
     {
         RemoveHandDevice(handedness);
     }
 }
コード例 #5
0
        //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);
            }
        }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
ファイル: HandTrackScript.cs プロジェクト: gameicom/MR_TEST
 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);
 }
コード例 #8
0
        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);
            }
        }
コード例 #9
0
        //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();
        }
コード例 #10
0
        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);
                }
            }
        }
コード例 #11
0
 //Constructors:
 public ManagedHand(MLHandTracking.Hand hand)
 {
     Hand     = hand;
     Skeleton = new ManagedHandSkeleton(this);
     Gesture  = new ManagedHandGesture(this);
 }