Ejemplo n.º 1
0
        internal bool UpdateModel(OptiTrackTrackingEventArgs e)
        {
            bool armUpdated = false;

            RigidBodyData forearmData = e[Constants.ForearmRigidBodyName];
            RigidBodyData wristData   = e[Constants.WristRigidBodyName];

            if (forearmData != null &&
                wristData != null)
            {
                double millimeterFactor = 1000.0;

                m_forearmPosition = new Point3D(forearmData.x * millimeterFactor,
                                                forearmData.y * millimeterFactor, forearmData.z * millimeterFactor);
                m_forearmOrientation = new Quaternion(forearmData.qx,
                                                      forearmData.qy, forearmData.qz, forearmData.qw);

                m_wristPosition = new Point3D(wristData.x * millimeterFactor,
                                              wristData.y * millimeterFactor, wristData.z * millimeterFactor);
                m_wristOrientation = new Quaternion(wristData.qx,
                                                    wristData.qy, wristData.qz, wristData.qw);

                Application.Current.Dispatcher.Invoke(
                    new Action(delegate()
                {
                    Update();
                }));

                armUpdated = true;
            }

            return(armUpdated);
        }
Ejemplo n.º 2
0
        private void OnOptiTrackTrackingUpdated(object sender, OptiTrackTrackingEventArgs e)
        {
            lock (m_syncObj)
            {
                if (m_arm == null ||
                    m_finger == null ||
                    m_optiTrackBusy)
                {
                    return;
                }
                m_optiTrackBusy = true;
            }

            // now we just update all models
            // the models will notify clients directly
            bool armUpdated    = m_arm.UpdateModel(e);
            bool fingerUpdated = m_finger.UpdateModel(e);

            if (Constants.DebugPrint)
            {
                Debug.WriteLine("Arm: " + armUpdated + ", Finger: " + fingerUpdated);
            }

            // do calculations
            if (armUpdated && fingerUpdated)
            {
                m_processor.DetectTouch();
            }

            lock (m_syncObj)
            {
                m_optiTrackBusy = false;
            }
        }
Ejemplo n.º 3
0
        internal bool UpdateModel(OptiTrackTrackingEventArgs e)
        {
            bool          fingerUpdated = false;
            RigidBodyData fingertipData = e[Constants.FingerRigidBodyName];

            if (fingertipData != null)
            {
                double millimeterFactor = 1000.0;

                m_fingertipPosition = new Point3D(fingertipData.x * millimeterFactor,
                                                  fingertipData.y * millimeterFactor, fingertipData.z * millimeterFactor);
                m_fingertipOrientation = new Quaternion(fingertipData.qx,
                                                        fingertipData.qy, fingertipData.qz, fingertipData.qw);

                Application.Current.Dispatcher.Invoke(
                    new Action(delegate()
                {
                    Update();
                }));

                fingerUpdated = true;
            }

            return(fingerUpdated);
        }