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); }
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; } }
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); }