Ejemplo n.º 1
0
        private void ProcessNewFrame()
        {
            Vector3[,] fingerPosition;
            Vector3[] gripPosition;
            FingerShape[,] fingerShape;
            HandShape[] handShape;
            Vector3[]   handVelocity;
            Vector3[]   handAcceleration;

            _GetHandVelocityAndAceleration(out handVelocity, out handAcceleration);
            ComputeFingertipLocalPosition(out fingerPosition, out gripPosition);
            ComputeFingerShape(fingerPosition, out fingerShape);
            ComputeHandShape(fingerShape, out handShape);

            PoseDataFrame oldFrame = cachedPoseData.LatestFrame();

            cachedPoseData.Add(new PoseDataFrame(fingerPosition, gripPosition, fingerShape, handShape, handVelocity, handAcceleration));

            if (oldFrame.HandShape[0] != handShape[0] ||
                oldFrame.HandShape[1] != handShape[1])
            {
                lastHandPoseChangeTime = DateTime.Now;
                _OnHandShapeChange(oldFrame);
            }
        }
Ejemplo n.º 2
0
        private static void _OnHandShapeChange(PoseDataFrame oldData)
        {
            var curData  = cachedPoseData.LatestFrame();
            var oldShape = oldData.HandShape;
            var newShape = curData.HandShape;

            OnHandShapeChange?.Invoke();

            int r = (int)HandType.Right, l = (int)HandType.Left;

            // Right hand OFF signals
            if (FlagTurnedOff(oldShape[r], newShape[r], HandShape.Pinch))
            {
                OnRightHandStopPinch?.Invoke();
            }
            else if (FlagTurnedOff(oldShape[r], newShape[r], HandShape.Fist))
            {
                OnRightHandStopGrab?.Invoke();
            }
            else if (FlagTurnedOff(oldShape[r], newShape[r], HandShape.Pointing))
            {
                OnRightHandStopPoint?.Invoke();
            }
            else if (FlagTurnedOff(oldShape[r], newShape[r], HandShape.AlmostPointing))
            {
                OnRightHandStopAlmostPoint?.Invoke();
            }

            //Right hand ON signals
            if (FlagTurnedOn(oldShape[r], newShape[r], HandShape.Pinch))
            {
                OnRightHandStartPinch?.Invoke();
            }
            else if (FlagTurnedOn(oldShape[r], newShape[r], HandShape.Fist))
            {
                OnRightHandStartGrab?.Invoke();
            }
            else if (FlagTurnedOn(oldShape[r], newShape[r], HandShape.Pointing))
            {
                OnRightHandStartPoint?.Invoke();
            }
            else if (FlagTurnedOn(oldShape[r], newShape[r], HandShape.AlmostPointing))
            {
                OnRightHandStartAlmostPoint?.Invoke();
            }


            // Left hand OFF signals
            if (FlagTurnedOff(oldShape[l], newShape[l], HandShape.Pinch))
            {
                OnLeftHandStopPinch?.Invoke();
            }
            else if (FlagTurnedOff(oldShape[l], newShape[l], HandShape.Fist))
            {
                OnLeftHandStopGrab?.Invoke();
            }
            else if (FlagTurnedOff(oldShape[l], newShape[l], HandShape.Pointing))
            {
                OnLeftHandStopPoint?.Invoke();
            }
            else if (FlagTurnedOff(oldShape[l], newShape[l], HandShape.AlmostPointing))
            {
                OnLeftHandStopAlmostPoint?.Invoke();
            }

            //Left hand ON signals
            if (FlagTurnedOn(oldShape[l], newShape[l], HandShape.Pinch))
            {
                OnLeftHandStartPinch?.Invoke();
            }
            else if (FlagTurnedOn(oldShape[l], newShape[l], HandShape.Fist))
            {
                OnLeftHandStartGrab?.Invoke();
            }
            else if (FlagTurnedOn(oldShape[l], newShape[l], HandShape.Pointing))
            {
                OnLeftHandStartPoint?.Invoke();
            }
            else if (FlagTurnedOn(oldShape[l], newShape[l], HandShape.AlmostPointing))
            {
                OnLeftHandStartAlmostPoint?.Invoke();
            }
        }