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