Exemplo n.º 1
0
        public void ToggleButtonRecChecked(object sender, RoutedEventArgs e)
        {
            Controls.ConsoleControl.LogEntries.Add(new LogEntry(DateTime.Now, "Initialization"));

            Microsoft.Win32.SaveFileDialog saveFileDialog = new Microsoft.Win32.SaveFileDialog {
                Title = "Select filename", Filter = "Replay files|*.replay"
            };

            if (saveFileDialog.ShowDialog() == true)
            {
                Controls.ConsoleControl.LogEntries.Add(new LogEntry(DateTime.Now, "Recording Stream"));
                DirectRecord(saveFileDialog.FileName);

                if (BVHFile == null && sensor != null)
                {
                    Controls.ConsoleControl.LogEntries.Add(new LogEntry(DateTime.Now, "Recording BHV"));

                    string txtFileName = saveFileDialog.FileName.Replace(".replay", "");
                    BVHFile = new BVHWriter(txtFileName);
                    Window     w  = Window.GetWindow(this);
                    MainWindow mw = (MainWindow)w;
                    BVHFile.SetBvhEditor(mw.bvhEditor);
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// calculate length of each bone, get each joint's original position based on T pose;
        /// todo: give each bone a rotation as its start position, and calculate the original offset using this rotation and bone length;
        /// </summary>
        /// <param name="skeleton"></param>
        public void CliberateSkeleton(Skeleton skeleton)
        {
            _cliberateNum++;
            if (NeedBoneClibrated())
            {
                //clibrateStartPosition(skeleton);
                updateBoneLengths(skeleton);
                initializeJoints(skeleton);
            }
            else
            {
                // set each joint original offset - T pose
                foreach (JointNode node in JointNodes)
                {
                    switch (node.JointIndex)
                    {
                    case JointType.HipCenter:
                        //node.OriginalOffset = new Point3D(BVHWriter.BVHScaledValue(_initialOffsets[(int)node.JointIndex].X),
                        //    BVHWriter.BVHScaledValue(_initialOffsets[(int)node.JointIndex].Y + calRealHeightOfHipJoint()), BVHWriter.BVHScaledValue(_initialOffsets[(int)node.JointIndex].Z));
                        node.OriginalOffset = new Point3D();
                        break;

                    default:
                        node.OriginalOffset = new Point3D(BVHWriter.BVHScaledValue(_initialOffsets[(int)node.JointIndex].X),
                                                          BVHWriter.BVHScaledValue(_initialOffsets[(int)node.JointIndex].Y), BVHWriter.BVHScaledValue(_initialOffsets[(int)node.JointIndex].Z));
                        node.OriginalOffset.X *= 2;
                        node.OriginalOffset.Y *= 2;
                        node.OriginalOffset.Z *= 2;
                        break;
                    }
                }
            }
        }
Exemplo n.º 3
0
        public void ToggleButtonRecUnChecked(object sender, RoutedEventArgs e)
        {
            if (BVHFile != null)
            {
                BVHFile.CloseBVHFile();
                Controls.ConsoleControl.LogEntries.Add(new LogEntry(DateTime.Now, "Record saved"));
                BVHFile = null;
            }

            if (recorder != null)
            {
                StopRecord();
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// update all nodes' offsets and rotations with the latest skeleton frame
        /// </summary>
        /// <param name="skeleton"></param>
        public void UpdateJoints(Skeleton skeleton)
        {
            //StringBuilder sb = new StringBuilder();
            //foreach (JointType joint in Enum.GetValues(typeof(JointType)))
            //{
            //    sb.Append(joint.ToString() + ", Start: " + skeleton.BoneOrientations[joint].StartJoint.ToString()
            //        + ", End : " + skeleton.BoneOrientations[joint].EndJoint.ToString()
            //        + " Rotation: " + getrotationString(skeleton.BoneOrientations[joint].HierarchicalRotation) + "\n");
            //}

            //MessageBox.Show(sb.ToString());


            /******* using position to calculate orientation ********/
            //Vector3D vectorX, vectorY, vectorZ;
            //if (node.JointIndex == JointType.HipCenter)
            //{
            //    vectorY = KinectDataConverter.SkeletonPosToVector3d(skeleton.Joints[JointType.Spine].Position)
            //        - KinectDataConverter.SkeletonPosToVector3d(skeleton.Joints[JointType.HipCenter].Position);
            //    vectorX = KinectDataConverter.SkeletonPosToVector3d(skeleton.Joints[JointType.HipLeft].Position)
            //        - KinectDataConverter.SkeletonPosToVector3d(skeleton.Joints[JointType.HipRight].Position);
            //    Matrix3D rotationMatrix = new Matrix3D();
            //    KinectDataConverter.MakeMatrixFromYX(vectorX, vectorY, ref rotationMatrix);
            //    Quaternion rotationQuaternion = KinectDataConverter.LookRotation(
            //        KinectDataConverter.GetZColumn(rotationMatrix), KinectDataConverter.GetYColumn(rotationMatrix));
            //}
            /******* using position to calculate orientation ********/

            foreach (JointNode node in JointNodes)
            {
                JointType  rotationJoint = getRotationJoint(node);
                Quaternion rotation      = new Quaternion();
                if (node.Type == NodeTypeEnum.ROOT)
                {
                    node.Offset.X = BVHWriter.BVHScaledValue(skeleton.Joints[node.JointIndex].Position.X - _initialOffsets[(int)node.JointIndex].X);
                    node.Offset.Y = BVHWriter.BVHScaledValue(skeleton.Joints[node.JointIndex].Position.Y - _initialOffsets[(int)node.JointIndex].Y + calRealHeightOfHipJoint());
                    node.Offset.Z = BVHWriter.BVHScaledValue(skeleton.Joints[node.JointIndex].Position.Z - _initialOffsets[(int)node.JointIndex].Z);

                    rotation = KinectDataConverter.Vector4ToQuaternion(skeleton.BoneOrientations[node.JointIndex].AbsoluteRotation.Quaternion);

                    Quaternion initialQuat = _initialRotations[(int)node.JointIndex];
                    initialQuat.Invert();
                    rotation      = initialQuat * rotation;
                    node.Rotation = KinectDataConverter.QuaternionToAxisAngles(rotation);
                }
                else
                {
                    rotation = KinectDataConverter.Vector4ToQuaternion(skeleton.BoneOrientations[rotationJoint].HierarchicalRotation.Quaternion);
                    Quaternion initialQuat = _initialRotations[(int)node.JointIndex];
                    initialQuat.Invert();
                    rotation      = initialQuat * rotation;
                    node.Rotation = KinectDataConverter.QuaternionToAxisAngles(rotation);

                    //if (node.Axis == TransAxis.X || node.Axis == TransAxis.nX)
                    //{
                    //    Vector3D tempRotation = node.Rotation;
                    //    node.Rotation.X = tempRotation.Z;
                    //    node.Rotation.Z = tempRotation.X;
                    //}
                }
            }
        }