/// <summary> /// Draws one bone of a body (joint to joint) /// </summary> /// <param name="joints">joints to draw</param> /// <param name="jointPoints">translated positions of joints to draw</param> /// <param name="jointType0">first joint of bone to draw</param> /// <param name="jointType1">second joint of bone to draw</param> /// <param name="drawingContext">drawing context to draw to</param> /// /// <param name="drawingPen">specifies color to draw a specific bone</param> private void DrawBone(IReadOnlyDictionary <JointType, Joint> joints, IDictionary <JointType, Point> jointPoints, JointType jointType0, JointType jointType1, DrawingContext drawingContext, Pen drawingPen) { Joint joint0 = joints[jointType0]; Joint joint1 = joints[jointType1]; // If we can't find either of these joints, exit if (joint0.TrackingState == TrackingState.NotTracked || joint1.TrackingState == TrackingState.NotTracked) { return; } // We assume all drawn bones are inferred unless BOTH joints are tracked Pen drawPen = this.inferredBonePen; if ((joint0.TrackingState == TrackingState.Tracked) && (joint1.TrackingState == TrackingState.Tracked)) { drawPen = drawingPen; } var HeadPositon = joints[JointType.Head].Position; var FootPostion = joints[JointType.FootLeft].Position; var headV = new Vector3D(HeadPositon.X, HeadPositon.Y, HeadPositon.Z); var footV = new Vector3D(FootPostion.X, FootPostion.Y, FootPostion.Z); var hei = headV - footV; float height = (float)hei.Length; height += (float)0.18; Console.WriteLine(hei.Length + 0.18); height *= 100; byte[] b = BitConverter.GetBytes(height); ComPort.ComSetData(b); drawingContext.DrawLine(drawPen, jointPoints[jointType0], jointPoints[jointType1]); }