Пример #1
0
 public MySkeleton(MySkeleton a, MySkeleton b, long ABtimeDif, long AThisTimeDif)
 {
     foreach (DictionaryEntry pair in a.getJoints())
     {
         String        jointName = (String)pair.Key;
         JointPosition apos      = a.getJoint(jointName);
         JointPosition bpos      = b.getJoint(jointName);
         float         cx        = ((float)AThisTimeDif / (float)ABtimeDif) * (bpos.x - apos.x) + apos.x;
         float         cy        = ((float)AThisTimeDif / (float)ABtimeDif) * (bpos.y - apos.y) + apos.y;
         float         cz        = ((float)AThisTimeDif / (float)ABtimeDif) * (bpos.z - apos.z) + apos.z;
         joints.Add(jointName, new JointPosition(cx, cy, cz));
     }
 }
Пример #2
0
        /// <summary>
        /// simply converts a 3d point to display on 640 * 480 : 2d frame
        /// </summary>
        /// <param name="bg">frame to draw skeleton on</param>
        /// <param name="skeleton">skeleton of the frame</param>
        /// <param name="initsize">skeleton frame initial size</param>
        /// <param name="proportion">ratio of skeleton fram scale</param>
        /// <param name="paintskeleton">determines whether or not all skeleton bones should be painted</param>
        /// <param name="hidedead">whether or not the head should be hided with a black square or not</param>
        private static System.Drawing.Image paint(Image bg, MySkeleton skeleton, Point initsize, double proportion, Boolean paintskeleton, Boolean hidehead)
        {
            if (skeleton == null)
            {
                return(bg);
            }
            Graphics g              = Graphics.FromImage(bg);
            Pen      bonePen        = new Pen(System.Drawing.ColorTranslator.FromHtml("#008000"), 6);
            Pen      jointPen       = new Pen(System.Drawing.ColorTranslator.FromHtml("#44c044"), 4);
            Point    head           = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.Head.ToString()), initsize, proportion);
            Point    shoulderCenter = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.ShoulderCenter.ToString()), initsize, proportion);
            Point    shoulderLeft   = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.ShoulderLeft.ToString()), initsize, proportion);
            Point    shoulderRight  = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.ShoulderRight.ToString()), initsize, proportion);
            Point    ankleLeft      = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.AnkleLeft.ToString()), initsize, proportion);

            Point ankleRight = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.AnkleRight.ToString()), initsize, proportion);
            Point elbowLeft  = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.ElbowLeft.ToString()), initsize, proportion);
            Point elbowRight = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.ElbowRight.ToString()), initsize, proportion);
            Point footLeft   = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.FootLeft.ToString()), initsize, proportion);
            Point footRight  = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.FootRight.ToString()), initsize, proportion);

            Point handLeft  = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.HandLeft.ToString()), initsize, proportion);
            Point handRight = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.HandRight.ToString()), initsize, proportion);
            Point hipCenter = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.HipCenter.ToString()), initsize, proportion);
            Point hipLeft   = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.HipLeft.ToString()), initsize, proportion);
            Point hipRight  = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.HipRight.ToString()), initsize, proportion);

            Point kneeLeft   = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.KneeLeft.ToString()), initsize, proportion);
            Point kneeRight  = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.KneeRight.ToString()), initsize, proportion);
            Point spine      = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.Spine.ToString()), initsize, proportion);
            Point wristLeft  = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.WristLeft.ToString()), initsize, proportion);
            Point wristRight = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.WristRight.ToString()), initsize, proportion);

            if (paintskeleton)
            {
                g.DrawLine(bonePen, head, shoulderCenter);
                g.DrawLine(bonePen, shoulderCenter, shoulderLeft);
                g.DrawLine(bonePen, shoulderCenter, shoulderRight);
                g.DrawLine(bonePen, shoulderCenter, spine);
                g.DrawLine(bonePen, spine, hipCenter);
                g.DrawLine(bonePen, hipCenter, hipLeft);
                g.DrawLine(bonePen, hipCenter, hipRight);

                g.DrawLine(bonePen, shoulderLeft, elbowLeft);
                g.DrawLine(bonePen, elbowLeft, wristLeft);
                g.DrawLine(bonePen, wristLeft, handLeft);

                g.DrawLine(bonePen, shoulderRight, elbowRight);
                g.DrawLine(bonePen, elbowRight, wristRight);
                g.DrawLine(bonePen, wristRight, handRight);

                g.DrawLine(bonePen, hipLeft, kneeLeft);
                g.DrawLine(bonePen, kneeLeft, ankleLeft);
                g.DrawLine(bonePen, ankleLeft, footLeft);

                g.DrawLine(bonePen, hipRight, kneeRight);
                g.DrawLine(bonePen, kneeRight, ankleRight);
                g.DrawLine(bonePen, ankleRight, footRight);

                g.DrawEllipse(jointPen, head.X - 2, head.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, shoulderCenter.X - 2, shoulderCenter.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, shoulderLeft.X - 2, shoulderLeft.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, shoulderRight.X - 2, shoulderRight.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, elbowLeft.X - 2, elbowLeft.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, elbowRight.X - 2, elbowRight.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, handLeft.X - 2, handLeft.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, handRight.X - 2, handRight.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, wristLeft.X - 2, wristLeft.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, wristRight.X - 2, wristRight.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, hipCenter.X - 2, hipCenter.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, hipLeft.X - 2, hipLeft.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, hipRight.X - 2, hipRight.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, kneeLeft.X - 2, kneeLeft.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, kneeRight.X - 2, kneeRight.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, footLeft.X - 2, footLeft.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, footRight.X - 2, footRight.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, spine.X - 2, spine.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, ankleLeft.X - 2, ankleLeft.Y - 2, 4, 4);
                g.DrawEllipse(jointPen, ankleRight.X - 2, ankleRight.Y - 2, 4, 4);
            }
            if (hidehead)
            {
                Point headCoverSize = getHeadCoverSize(skeleton.getJoint(JointType.Head.ToString()).z);
                int   coverx        = head.X - Convert.ToInt32(headCoverSize.X / 2);
                int   covery        = head.Y - Convert.ToInt32(headCoverSize.Y / 3);

                System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
                g.FillRectangle(myBrush, new Rectangle(coverx, covery, headCoverSize.X, headCoverSize.Y));
            }

            return(bg);
        }