Exemplo n.º 1
0
        //No longer previewing
        protected override void LeftMouseUpResizing(Viewport2D viewport, ViewportEvent e)
        {
            if (_currentTool == null)
            {
                base.LeftMouseUpResizing(viewport, e);
                return;
            }
            var transformation = GetTransformMatrix(viewport, e);

            if (transformation.HasValue)
            {
                Matrix4           m = (Matrix4)transformation;
                Vector3           c = m.ExtractTranslation();
                OpenTK.Quaternion q = m.ExtractRotation();
                if (_currentTool.GetType() == typeof(MoveTool))
                {
                    TotalTranslation += new Coordinate((decimal)c.X, (decimal)c.Y, (decimal)c.Z);
                }
                else if (_currentTool.GetType() == typeof(RotateTool))
                {
                    q.Invert();
                    TotalRotation *= q;
                }
                _form.KeyFrameEdit(-1, TotalTranslation, ToGeometric(TotalRotation));

                //var createClone = KeyboardState.Shift && State.Handle == ResizeHandle.Center;
                //ExecuteTransform(_currentTool.GetTransformName(), CreateMatrixMultTransformation(transformation.Value), createClone);
            }
            Document.EndSelectionTransform();
            State.ActiveViewport = null;
            State.Action         = BoxAction.Drawn;

            SelectionChanged();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Transforms a vector by a quaternion rotation.
        /// </summary>
        /// <param name="vec">The vector to transform.</param>
        /// <param name="quat">The quaternion to rotate the vector by.</param>
        /// <param name="result">The result of the operation.</param>
        public static void Transform(ref Vector2 vec, ref Quaternion quat, out Vector2 result)
        {
            Quaternion v = new Quaternion(vec.X, vec.Y, 0, 0), i, t;

            Quaternion.Invert(ref quat, out i);
            Quaternion.Multiply(ref quat, ref v, out t);
            Quaternion.Multiply(ref t, ref i, out v);

            result = new Vector2(v.X, v.Y);
        }
Exemplo n.º 3
0
        public static void Transform(ref Vector2 vec, ref Quaternion quat, out Vector2 result)
        {
            Quaternion result1 = new Quaternion(vec.X, vec.Y, 0.0f, 0.0f);
            Quaternion result2;

            Quaternion.Invert(ref quat, out result2);
            Quaternion result3;

            Quaternion.Multiply(ref quat, ref result1, out result3);
            Quaternion.Multiply(ref result3, ref result2, out result1);
            result = new Vector2(result1.X, result1.Y);
        }
Exemplo n.º 4
0
        public static void Transform(ref Vector4 vec, ref Quaternion quat, out Vector4 result)
        {
            Quaternion result1 = new Quaternion(vec.X, vec.Y, vec.Z, vec.W);
            Quaternion result2;

            Quaternion.Invert(ref quat, out result2);
            Quaternion result3;

            Quaternion.Multiply(ref quat, ref result1, out result3);
            Quaternion.Multiply(ref result3, ref result2, out result1);
            result = new Vector4(result1.X, result1.Y, result1.Z, result1.W);
        }