public static void assign_joint_value(HumanSenser.SkeletonJointTransformation src, int joint, int index)
 {
     switch (joint)
     {
         case 0:
             copy_joint_info(src, ref rec_head[index]);
             break;
         case 1:
             copy_joint_info(src, ref rec_chest[index]);
             break;
         case 2:
             copy_joint_info(src, ref rec_lshoulder[index]);
             break;
         case 3:
             copy_joint_info(src, ref rec_lelbow[index]);
             break;
         case 4:
             copy_joint_info(src, ref rec_lhand[index]);
             break;
         case 5:
             copy_joint_info(src, ref rec_rshoulder[index]);
             break;
         case 6:
             copy_joint_info(src, ref rec_relbow[index]);
             break;
         case 7:
             copy_joint_info(src, ref rec_rhand[index]);
             break;
     }
 }
 public static void create_joint_array(HumanSenser.SkeletonJoint joint, int size)
 {
     switch (joint)
     {
         case HumanSenser.SkeletonJoint.HEAD:
             rec_head = new HumanSenser.SkeletonJointTransformation[size];
             break;
         case HumanSenser.SkeletonJoint.TORSO_CENTER:
             rec_chest = new HumanSenser.SkeletonJointTransformation[size];
             break;
         case HumanSenser.SkeletonJoint.LEFT_SHOULDER:
             rec_lshoulder = new HumanSenser.SkeletonJointTransformation[size];
             break;
         case HumanSenser.SkeletonJoint.LEFT_ELBOW:
             rec_lelbow = new HumanSenser.SkeletonJointTransformation[size];
             break;
         case HumanSenser.SkeletonJoint.LEFT_HAND:
             rec_lhand = new HumanSenser.SkeletonJointTransformation[size];
             break;
         case HumanSenser.SkeletonJoint.RIGHT_SHOULDER:
             rec_rshoulder = new HumanSenser.SkeletonJointTransformation[size];
             break;
         case HumanSenser.SkeletonJoint.RIGHT_ELBOW:
             rec_relbow = new HumanSenser.SkeletonJointTransformation[size];
             break;
         case HumanSenser.SkeletonJoint.RIGHT_HAND:
             rec_rhand = new HumanSenser.SkeletonJointTransformation[size];
             break;
     }
 }
 public static void copy_joint_info(HumanSenser.SkeletonJointTransformation src, ref HumanSenser.SkeletonJointTransformation dest)
 {
     dest.ori.confidence = src.ori.confidence;
     dest.ori.m00 = src.ori.m00;
     dest.ori.m01 = src.ori.m01;
     dest.ori.m02 = src.ori.m02;
     dest.ori.m10 = src.ori.m10;
     dest.ori.m11 = src.ori.m11;
     dest.ori.m12 = src.ori.m12;
     dest.ori.m20 = src.ori.m20;
     dest.ori.m21 = src.ori.m21;
     dest.ori.m22 = src.ori.m22;
     dest.pos.confidence = src.pos.confidence;
     dest.pos.x = src.pos.x;
     dest.pos.y = src.pos.y;
     dest.pos.z = src.pos.z;
 }
 public static extern bool GetUserCenterOfMass(uint userID, ref HumanSenser.XnVector3D pCenterOfMass);
 public static extern bool GetTransferredJointTransformation(uint userID, HumanSenser.SkeletonJoint joint, ref HumanSenser.SkeletonJointTransformation pTransformation);
 public static void reload_joint_info(HumanSenser.SkeletonJoint joint, ref HumanSenser.SkeletonJointTransformation dest, int index)
 {
     switch (joint)
     {
         case HumanSenser.SkeletonJoint.HEAD:
             dest = rec_head[index];
             break;
         case HumanSenser.SkeletonJoint.TORSO_CENTER:
             dest = rec_chest[index];
             break;
         case HumanSenser.SkeletonJoint.LEFT_SHOULDER:
             dest = rec_lshoulder[index];
             break;
         case HumanSenser.SkeletonJoint.LEFT_ELBOW:
             dest = rec_lelbow[index];
             break;
         case HumanSenser.SkeletonJoint.LEFT_HAND:
             dest = rec_lhand[index];
             break;
         case HumanSenser.SkeletonJoint.RIGHT_SHOULDER:
             dest = rec_rshoulder[index];
             break;
         case HumanSenser.SkeletonJoint.RIGHT_ELBOW:
             dest = rec_relbow[index];
             break;
         case HumanSenser.SkeletonJoint.RIGHT_HAND:
             dest = rec_rhand[index];
             break;
     }
 }
 bool TransformBone(uint userId, HumanSenser.SkeletonJoint joint, Transform dest)
 {
     HumanSenser.SkeletonJointTransformation trans = new HumanSenser.SkeletonJointTransformation();
     if (DetectBone(userId, joint, ref trans) == true)
     {
         Vector3 newPos = new Vector3(trans.pos.x, trans.pos.y, (trans.pos.z -= distanceToCamera));
         if (relativeTo != null)
         {
             dest.localPosition = (newPos *= m_jointPositionScale);
         }
         else
         {
             dest.position = (newPos *= m_jointPositionScale);
         }
         return true;
     }
     return false;
 }
    bool GetSubjectTransformation(uint userID, HumanSenser.SkeletonJoint joint, ref HumanSenser.SkeletonJointTransformation pTransformation)
    {
        if (!Replay)
        {
            if (HumanSenser.GetTransferredJointTransformation(userID, joint, ref pTransformation))
            {

            }
            else
            {
                return false;
            }
        }
        return true;
    }
 bool DetectBone(uint userId, HumanSenser.SkeletonJoint joint, ref HumanSenser.SkeletonJointTransformation trans)
 {
     if (GetSubjectTransformation(userId, joint, ref trans))
     {
         if (trans.pos.confidence > 0.5f)
         {
             return true;
         }
     }
     return false;
 }