private void DrawBodyGP(GesturePak.Frame Frame, IDictionary <JointType, Point> jointPoints, DrawingContext drawingContext) { try { var joints = (IReadOnlyDictionary <JointType, Joint>)Frame.Joints; CurrentJointPoints = (Dictionary <JointType, Point>)jointPoints; // Draw the bones //// Torso DrawBoneGP(joints, jointPoints, JointType.Head, JointType.Neck, drawingContext); DrawBoneGP(joints, jointPoints, JointType.Neck, JointType.SpineShoulder, drawingContext); DrawBoneGP(joints, jointPoints, JointType.SpineShoulder, JointType.SpineMid, drawingContext); DrawBoneGP(joints, jointPoints, JointType.SpineMid, JointType.SpineBase, drawingContext); DrawBoneGP(joints, jointPoints, JointType.SpineShoulder, JointType.ShoulderRight, drawingContext); DrawBoneGP(joints, jointPoints, JointType.SpineShoulder, JointType.ShoulderLeft, drawingContext); DrawBoneGP(joints, jointPoints, JointType.SpineBase, JointType.HipRight, drawingContext); DrawBoneGP(joints, jointPoints, JointType.SpineBase, JointType.HipLeft, drawingContext); //// Right Arm DrawBoneGP(joints, jointPoints, JointType.ShoulderRight, JointType.ElbowRight, drawingContext); DrawBoneGP(joints, jointPoints, JointType.ElbowRight, JointType.WristRight, drawingContext); DrawBoneGP(joints, jointPoints, JointType.WristRight, JointType.HandRight, drawingContext); DrawBoneGP(joints, jointPoints, JointType.HandRight, JointType.HandTipRight, drawingContext); DrawBoneGP(joints, jointPoints, JointType.WristRight, JointType.ThumbRight, drawingContext); //// Left Arm DrawBoneGP(joints, jointPoints, JointType.ShoulderLeft, JointType.ElbowLeft, drawingContext); DrawBoneGP(joints, jointPoints, JointType.ElbowLeft, JointType.WristLeft, drawingContext); DrawBoneGP(joints, jointPoints, JointType.WristLeft, JointType.HandLeft, drawingContext); DrawBoneGP(joints, jointPoints, JointType.HandLeft, JointType.HandTipLeft, drawingContext); DrawBoneGP(joints, jointPoints, JointType.WristLeft, JointType.ThumbLeft, drawingContext); //// Right Leg DrawBoneGP(joints, jointPoints, JointType.HipRight, JointType.KneeRight, drawingContext); DrawBoneGP(joints, jointPoints, JointType.KneeRight, JointType.AnkleRight, drawingContext); DrawBoneGP(joints, jointPoints, JointType.AnkleRight, JointType.FootRight, drawingContext); //// Left Leg DrawBoneGP(joints, jointPoints, JointType.HipLeft, JointType.KneeLeft, drawingContext); DrawBoneGP(joints, jointPoints, JointType.KneeLeft, JointType.AnkleLeft, drawingContext); DrawBoneGP(joints, jointPoints, JointType.AnkleLeft, JointType.FootLeft, drawingContext); // Draw the joints var Gesture = Frame.Parent; foreach (JointType jointType in joints.Keys) { drawJoint(Gesture.JointTrackOptions[(int)jointType], jointPoints[jointType], drawingContext); } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
/// <summary> /// High-level code to call when you really only want to draw one body frame at a time. /// </summary> /// <param name="Frame"></param> void drawBodyFromFrame(GesturePak.Frame Frame) { try { var mapper = KinectSensor.GetDefault().CoordinateMapper; using (DrawingContext dc = this.drawingGroup.Open()) { // Draw a transparent background to set the render size dc.DrawRectangle(Brushes.Transparent, null, new Rect(0.0, 0.0, this.displayWidth, this.displayHeight)); // draw the body var joints = (Dictionary <JointType, Joint>)Frame.Joints; Dictionary <JointType, Point> jointPoints = new Dictionary <JointType, Point>(); foreach (JointType jointType in joints.Keys) { DepthSpacePoint depthSpacePoint = mapper.MapCameraPointToDepthSpace(joints[jointType].Position); jointPoints[jointType] = new Point(depthSpacePoint.X, depthSpacePoint.Y); } var args = new DrawingFrameEventArgs(Frame, jointPoints, dc); OnDrawingFrame(args); this.DrawBodyGP(Frame, jointPoints, dc); // just draw the hands if (DrawHandsEnabled == true) { this.DrawHand(Frame.LeftHandState, jointPoints[JointType.HandLeft], dc); this.DrawHand(Frame.RightHandState, jointPoints[JointType.HandRight], dc); } OnFrameDrawn(args); } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
/// <summary> /// Moves to the previous frame /// </summary> public void ShowPreviousFrame() { if (animationFrames == null) { return; } if (!drawing) { drawing = true; if (animationIndex == 0) { SetAnimationIndex(animationFrames.Count - 1); } else { SetAnimationIndex(animationIndex - 1); } GesturePak.Frame thisFrame = animationFrames[animationIndex]; drawBodyFromFrame(thisFrame); drawing = false; } }
/// <summary> /// Move to a particular frame /// </summary> /// <param name="FrameNumber"></param> public void SetFrameNumber(int FrameNumber) { if (animationFrames == null) { return; } if (FrameNumber >= animationFrames.Count) { return; } if (FrameNumber <= 0) { return; } if (!drawing) { drawing = true; SetAnimationIndex(FrameNumber - 1); GesturePak.Frame thisFrame = animationFrames[animationIndex]; drawBodyFromFrame(thisFrame); drawing = false; } }
public DrawingFrameEventArgs(GesturePak.Frame Frame, Dictionary <JointType, Point> JointPoints, DrawingContext dc) { this.Frame = Frame; this.JointPoints = JointPoints; this.dc = dc; }