コード例 #1
0
        void mouseZone_MouseMove(object sender, MouseEventArgs e)
        {
            if (IsActive)
            {
                _viewport.Cursor = Cursors.None;

                var centerOfViewport  = _viewport.PointToScreen(new Point(_viewport.ActualWidth / 2, _viewport.ActualHeight / 2));
                var relativePos       = e.MouseDevice.GetPosition(_viewport);
                var actualRelativePos = new Point(relativePos.X - _viewport.ActualWidth / 2, _viewport.ActualHeight / 2 - relativePos.Y);
                var dx = actualRelativePos.X;
                var dy = actualRelativePos.Y;
                _yaw   += dx;
                _pitch += dy;

                // Rotate
                RawRotation = QuaternionHelper.EulerAnglesInDegToQuaternion(_pitch * Sensitivity * 0.1, _yaw * Sensitivity * 0.1, 0);
                UpdatePositionAndRotation();

                // Set mouse position back to the center of the viewport in screen coordinates
                MouseUtilities.SetPosition(centerOfViewport);
            }
            else
            {
                _viewport.Cursor = Cursors.Arrow;
            }
        }
コード例 #2
0
        public void AngleIntegrity()
        {
            var q      = QuaternionHelper.EulerAnglesInDegToQuaternion(30, 0, 0);
            var angles = QuaternionHelper.QuaternionToEulerAnglesInDeg(q);

            Assert.That(angles.X, Is.EqualTo(30));
        }
コード例 #3
0
        public void VerifyQuaternionToEulerIntegrity()
        {
            var q1 = QuaternionHelper.EulerAnglesInDegToQuaternion(30, 10, 25);
            var e  = QuaternionHelper.QuaternionToEulerAnglesInDeg(q1);
            var q2 = QuaternionHelper.EulerAnglesInDegToQuaternion(e.Y, e.X, e.Z);

            Assert.That(q1, Is.EqualTo(q2));
        }
コード例 #4
0
        public YEI3SpacePlugin()
        {
            Name = "YEI 3-Space";
            var tracker = new YEI3SpaceTracker()
            {
                PositionScaleFactor = ConfigHelper.ParseDouble(Config.AppSettings.Settings["PositionScaleFactor"].Value),
                RotationOffset      = QuaternionHelper.EulerAnglesInDegToQuaternion(ConfigHelper.ParseVector3D(Config.AppSettings.Settings["RotationOffset"].Value)),
            };

            Content = tracker;
            Panel   = new YEI3SpacePanel(tracker);
        }
コード例 #5
0
        public RazerHydraPlugin()
        {
            Name = "Razer Hydra";
            var tracker = new RazerHydraTracker
            {
                PositionScaleFactor = ConfigHelper.ParseDouble(Config.AppSettings.Settings["PositionScaleFactor"].Value),
                RotationOffset      = QuaternionHelper.EulerAnglesInDegToQuaternion(ConfigHelper.ParseVector3D(Config.AppSettings.Settings["RotationOffset"].Value)),
                FilterEnabled       = bool.Parse(Config.AppSettings.Settings["FilterEnabled"].Value),
            };

            Content = tracker;
            Panel   = new RazerHydraPanel(tracker);
        }
コード例 #6
0
        public VrpnPlugin()
        {
            Name = "VRPN";
            var tracker = new VrpnTracker(
                Config.AppSettings.Settings["TrackerAddress"].Value,
                Config.AppSettings.Settings["ButtonAddress"].Value)
            {
                PositionScaleFactor = ConfigHelper.ParseDouble(Config.AppSettings.Settings["PositionScaleFactor"].Value),
                RotationOffset      = QuaternionHelper.EulerAnglesInDegToQuaternion(ConfigHelper.ParseVector3D(Config.AppSettings.Settings["RotationOffset"].Value)),
            };

            Content = tracker;
            Panel   = new VrpnPanel(tracker);
        }
コード例 #7
0
        void wiimote_WiimoteChanged(object sender, WiimoteChangedEventArgs e)
        {
            RawRotation = QuaternionHelper.EulerAnglesInDegToQuaternion(
                e.WiimoteState.MotionPlusState.Values.Y,
                e.WiimoteState.MotionPlusState.Values.X,
                e.WiimoteState.MotionPlusState.Values.Z);

            if (e.WiimoteState.ButtonState.Plus)
            {
                Dispatcher.Invoke((Action)(Calibrate));
            }

            Dispatcher.Invoke((Action)(UpdatePositionAndRotation));
        }
コード例 #8
0
        public override void UpdateCurrentFrame(int frame)
        {
            var data = DeshakerData.FirstOrDefault(d => d.FrameNumber == frame);

            if (data == null)
            {
                return;
            }

            var scaledTranslation = new Vector3D(-data.PanX, -data.PanY, -data.Zoom) / 10000;

            Logger.Instance.Info(string.Format("Translation: ({0},{1},{2})", scaledTranslation.X, scaledTranslation.Y, scaledTranslation.Z));
            Translation = new Vector3D(scaledTranslation.X * TranslationFactor, scaledTranslation.Y * TranslationFactor, scaledTranslation.Z * ZoomFactor);
            Rotation    = QuaternionHelper.EulerAnglesInDegToQuaternion(0, 0, data.Rotation * RotationFactor);
        }
コード例 #9
0
        void data_timer_Tick(object sender, EventArgs e)
        {
            try
            {
                float x, y, z, pitch, yaw, roll;
                var   result = TIR_Update(&x, &y, &z, &pitch, &yaw, &roll);
                ThrowErrorOnResult(result, "Error while getting data from the Track IR");

                RawPosition = new Vector3D(-x, -y, z);
                RawRotation = QuaternionHelper.EulerAnglesInDegToQuaternion(
                    -(yaw - Int16.MaxValue) / UnitsByDeg,
                    -(pitch - Int16.MaxValue) / UnitsByDeg,
                    (roll - Int16.MaxValue) / UnitsByDeg);

                UpdatePositionAndRotation();
            }
            catch (Exception exc)
            {
                Logger.Instance.Error(exc.Message, exc);
            }
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var coord = (double)value;

            var axis = parameter.ToString().ToLower();

            switch (axis)
            {
            case "x":
                return(QuaternionHelper.EulerAnglesInDegToQuaternion(coord, 0, 0));

            case "y":
                return(QuaternionHelper.EulerAnglesInDegToQuaternion(0, coord, 0));

            case "z":
                return(QuaternionHelper.EulerAnglesInDegToQuaternion(0, 0, coord));

            default:
                throw new Exception("Invalid parameter in QuaternionToCoordConverter.");
            }
        }