/// <summary>
		/// Updates all gestures.
		/// </summary>
		/// <param name='data'>
		/// Data.
		/// </param>
		public void UpdateAllGestures(NuiSkeletonData data)
		{
			foreach (Gesture gesture in gestureCollection)
			{
				gesture.UpdateGesture(data);
			}
		}
Ejemplo n.º 2
0
    private static void PopulateSkeletonData(BodyData data, ref NuiSkeletonData skeleton)
    {
        int jointsCount = (int)NuiSkeletonPositionIndex.Count;

        skeleton.eTrackingState = data.isTracked ? NuiSkeletonTrackingState.SkeletonTracked : NuiSkeletonTrackingState.NotTracked;
        skeleton.TrackingId     = data.trackingId;
        skeleton.ClippedEdges   = (FrameEdges)data.clippedEdges;

        if (skeleton.SkeletonPositions == null)
        {
            skeleton.SkeletonPositions = new Vector4[jointsCount];
        }
        if (skeleton.SkeletonTrackingState == null)
        {
            skeleton.SkeletonTrackingState = new NuiSkeletonPositionTrackingState[jointsCount];
        }
        for (int i = 0; i != jointsCount; i++)
        {
            data.SetJointPosition(i, ref skeleton.SkeletonPositions[i]);
            data.SetJointTrackingState(i, ref skeleton.SkeletonTrackingState[i]);
        }

        /*
         * var i = (int)NuiSkeletonPositionIndex.HandLeft;
         * data.JointPosition(i, ref skeleton.SkeletonPositions[i]);
         * skeleton.eSkeletonPositionTrackingState[i] = NuiSkeletonPositionTrackingState.Tracked;
         *
         * i = (int)NuiSkeletonPositionIndex.HandRight;
         * data.JointPosition(i, ref skeleton.SkeletonPositions[i]);
         * skeleton.eSkeletonPositionTrackingState[i] = NuiSkeletonPositionTrackingState.Tracked;
         *
         * i = (int)NuiSkeletonPositionIndex.Head;
         * data.JointPosition(i, ref skeleton.SkeletonPositions[i]);
         * skeleton.eSkeletonPositionTrackingState[i] = NuiSkeletonPositionTrackingState.Tracked;
         *
         * i = (int)NuiSkeletonPositionIndex.Neck;
         * data.JointPosition(i, ref skeleton.SkeletonPositions[i]);
         * skeleton.eSkeletonPositionTrackingState[i] = NuiSkeletonPositionTrackingState.Tracked;
         *
         * i = (int)NuiSkeletonPositionIndex.ShoulderLeft;
         * data.JointPosition(i, ref skeleton.SkeletonPositions[i]);
         * skeleton.eSkeletonPositionTrackingState[i] = NuiSkeletonPositionTrackingState.Tracked;
         *
         * i = (int)NuiSkeletonPositionIndex.ShoulderRight;
         * data.JointPosition(i, ref skeleton.SkeletonPositions[i]);
         * skeleton.eSkeletonPositionTrackingState[i] = NuiSkeletonPositionTrackingState.Tracked;
         *
         * i = (int)NuiSkeletonPositionIndex.SpineBase;
         * data.JointPosition(i, ref skeleton.SkeletonPositions[i]);
         * skeleton.eSkeletonPositionTrackingState[i] = NuiSkeletonPositionTrackingState.Tracked;
         */
    }
Ejemplo n.º 3
0
	    /// <summary>
	    /// Updates the gesture.
	    /// </summary>
	    /// <param name="data">The skeleton data.</param>
	    public void UpdateGesture(NuiSkeletonData data)
	    {
	        if (this.paused)
	        {
	            if (this.frameCount == this.pausedFrameCount)
	            {
	                this.paused = false;
	            }
	 
	            this.frameCount++;
	        }
	 
	        //GesturePartResult result = this.gestureParts[this.currentGesturePart].CheckGesture(data);
	        GesturePartResult result = this.gestureParts[this.currentGesturePart].CheckGesture();
	        if (result == GesturePartResult.Succeed)
	        {
	            if (this.currentGesturePart + 1 < this.gestureParts.Length)
	            {
	                this.currentGesturePart++;
	                this.frameCount = 0;
	                this.pausedFrameCount = 10;
	                this.paused = true;
	            }
	            else
	            {
	                if (this.GestureRecognized != null)
	                {
	                    this.GestureRecognized(this, new GestureEventArgs(this.name, data.dwTrackingID));
	                    this.Reset();
	                }
	            }
	        }
	        else if (result == GesturePartResult.Fail || this.frameCount == 50)
	        {
	            this.currentGesturePart = 0;
	            this.frameCount = 0;
	            this.pausedFrameCount = 5;
	            this.paused = true;
	        }
	        else
	         {
	             this.frameCount++;
	             this.pausedFrameCount = 5;
	             this.paused = true;
	         }
	     }
 public static extern int NuiSkeletonCalculateBoneOrientations(ref NuiSkeletonData pSkeletonData, NuiSkeletonBoneOrientation[] pBoneOrientations);
Ejemplo n.º 5
0
 /*
  * NuiSkeletonBoneOrientation[] KinectInterface.getBoneOrientations(NuiSkeletonFrame skeleton){
  *      return null;
  * }
  */
 NuiSkeletonBoneOrientation[] KinectInterface.getBoneOrientations(NuiSkeletonData skeletonData)
 {
     NuiSkeletonBoneOrientation[] boneOrientations = new NuiSkeletonBoneOrientation[(int)(NuiSkeletonPositionIndex.Count)];
     NativeMethods.NuiSkeletonCalculateBoneOrientations(ref skeletonData, boneOrientations);
     return(boneOrientations);
 }
Ejemplo n.º 6
0
 /*
  * NuiSkeletonBoneOrientation[] KinectInterface.getBoneOrientations(NuiSkeletonFrame skeleton){
  *      return null;
  * }
  */
 NuiSkeletonBoneOrientation[] KinectInterface.getBoneOrientations(NuiSkeletonData skeletonData)
 {
     return(null);
 }
Ejemplo n.º 7
0
 public static extern int NuiSkeletonCalculateBoneOrientations(ref NuiSkeletonData pSkeletonData, NuiSkeletonBoneOrientation[] pBoneOrientations);
    public bool PollBodyFrame(KinectInterop.SensorData sensorData, ref KinectInterop.BodyFrameData bodyFrame, ref Matrix4x4 kinectToWorld)
    {
        bool newSkeleton = false;

        int hr = NuiSkeletonGetNextFrame(0, ref skeletonFrame);

        if (hr == 0)
        {
            newSkeleton = true;
        }

        if (newSkeleton)
        {
            hr = NuiTransformSmooth(ref skeletonFrame, ref smoothParameters);
            if (hr != 0)
            {
                Debug.LogError("Skeleton Data Smoothing failed");
            }

            for (uint i = 0; i < sensorData.bodyCount; i++)
            {
                NuiSkeletonData body = skeletonFrame.SkeletonData[i];

                bodyFrame.bodyData[i].bIsTracked = (short)(body.eTrackingState == NuiSkeletonTrackingState.SkeletonTracked ? 1 : 0);

                if (body.eTrackingState == NuiSkeletonTrackingState.SkeletonTracked)
                {
                    // transfer body and joints data
                    bodyFrame.bodyData[i].liTrackingID = (long)body.dwTrackingID;

                    for (int j = 0; j < sensorData.jointCount; j++)
                    {
                        KinectInterop.JointData jointData = bodyFrame.bodyData[i].joint[j];

                        jointData.jointType     = GetJointAtIndex(j);
                        jointData.trackingState = (KinectInterop.TrackingState)body.eSkeletonPositionTrackingState[j];

                        if (jointData.trackingState != KinectInterop.TrackingState.NotTracked)
                        {
                            jointData.kinectPos = body.SkeletonPositions[j];
                            jointData.position  = kinectToWorld.MultiplyPoint3x4(jointData.kinectPos);
                        }

                        jointData.orientation = Quaternion.identity;
//							Windows.Kinect.Vector4 vQ = body.JointOrientations[jointData.jointType].Orientation;
//							jointData.orientation = new Quaternion(vQ.X, vQ.Y, vQ.Z, vQ.W);

                        if (j == 0)
                        {
                            bodyFrame.bodyData[i].position    = jointData.position;
                            bodyFrame.bodyData[i].orientation = jointData.orientation;
                        }

                        bodyFrame.bodyData[i].joint[j] = jointData;
                    }


                    // tranfer hand states
                    uint intCount = GetInteractorsCount();

                    for (uint intIndex = 0; intIndex < intCount; intIndex++)
                    {
                        uint skeletonId = GetSkeletonTrackingID(intIndex);

                        if (skeletonId == body.dwTrackingID)
                        {
                            uint leftHandState = GetLeftHandState(intIndex);
                            InteractionHandEventType leftHandEvent = GetLeftHandEvent(intIndex);

                            uint rightHandState = GetRightHandState(intIndex);
                            InteractionHandEventType rightHandEvent = GetRightHandEvent(intIndex);

                            GetHandStateAndConf(leftHandState, leftHandEvent,
                                                ref bodyFrame.bodyData[i].leftHandState,
                                                ref bodyFrame.bodyData[i].leftHandConfidence);

                            GetHandStateAndConf(rightHandState, rightHandEvent,
                                                ref bodyFrame.bodyData[i].rightHandState,
                                                ref bodyFrame.bodyData[i].rightHandConfidence);
                        }
                    }
                }
            }
        }

        return(newSkeleton);
    }