/// <summary> /// It controls the transformation of transformer. /// </summary> /// <param name="mode"> The mode. </param> /// <param name="startingPoint"> The starting point. </param> /// <param name="point"> The point. </param> /// <param name="startingTransformer"> The starting transformer. </param> /// <param name="inverseMatrix"> The inverse matrix. </param> /// <param name="isRatio"> Maintain a ratio when scaling. </param> /// <param name="isCenter"> Scaling around the center. </param> /// <param name="isSnapToTick"> Snap to tick when spinning. </param> /// <returns> The controlled transformer. </returns> public static Transformer Controller(TransformerMode mode, Vector2 startingPoint, Vector2 point, Transformer startingTransformer, Matrix3x2 inverseMatrix, bool isRatio = false, bool isCenter = false, bool isSnapToTick = false) { switch (mode) { case TransformerMode.None: return(startingTransformer); case TransformerMode.Rotation: return(Transformer.Rotation(startingPoint, point, startingTransformer, inverseMatrix, isSnapToTick)); case TransformerMode.SkewLeft: return(Transformer.SkewLeft(startingPoint, point, startingTransformer, isCenter)); case TransformerMode.SkewTop: return(Transformer.SkewTop(startingPoint, point, startingTransformer, isCenter)); case TransformerMode.SkewRight: return(Transformer.SkewRight(startingPoint, point, startingTransformer, isCenter)); case TransformerMode.SkewBottom: return(Transformer.SkewBottom(startingPoint, point, startingTransformer, isCenter)); case TransformerMode.ScaleLeft: return(Transformer.ScaleLeft(point, startingTransformer, inverseMatrix, isRatio, isCenter)); case TransformerMode.ScaleTop: return(Transformer.ScaleTop(point, startingTransformer, inverseMatrix, isRatio, isCenter)); case TransformerMode.ScaleRight: return(Transformer.ScaleRight(point, startingTransformer, inverseMatrix, isRatio, isCenter)); case TransformerMode.ScaleBottom: return(Transformer.ScaleBottom(point, startingTransformer, inverseMatrix, isRatio, isCenter)); case TransformerMode.ScaleLeftTop: return(Transformer.ScaleLeftTop(point, startingTransformer, inverseMatrix, isRatio, isCenter)); case TransformerMode.ScaleRightTop: return(Transformer.ScaleRightTop(point, startingTransformer, inverseMatrix, isRatio, isCenter)); case TransformerMode.ScaleRightBottom: return(Transformer.ScaleRightBottom(point, startingTransformer, inverseMatrix, isRatio, isCenter)); case TransformerMode.ScaleLeftBottom: return(Transformer.ScaleLeftBottom(point, startingTransformer, inverseMatrix, isRatio, isCenter)); } return(startingTransformer); }
public void Complete(Vector2 startingPoint, Vector2 point, bool isOutNodeDistance) { if (this.Layerage is null) { return; } if (this.IsMove == false && this.TransformerMode == TransformerMode.None) { return; } Matrix3x2 inverseMatrix = this.ViewModel.CanvasTransformer.GetInverseMatrix(); Vector2 canvasStartingPoint = Vector2.Transform(startingPoint, inverseMatrix); Vector2 canvasPoint = Vector2.Transform(point, inverseMatrix); // Snap if (this.IsSnap) { canvasPoint = this.Snap.Snap(canvasPoint); this.Snap.Default(); } this.CropDelta(canvasStartingPoint, canvasPoint); this.CropComplete(); this.Layerage = null; this.IsMove = false; this.TransformerMode = TransformerMode.None; this.ViewModel.Invalidate(InvalidateMode.HD); // Invalidate }
/// <summary> /// Is corner-scale mode? /// </summary> /// <param name="transformerMode"> The transformer mode. </param> public static bool IsScaleCorner(this TransformerMode transformerMode) { switch (transformerMode) { case TransformerMode.ScaleLeftTop: case TransformerMode.ScaleRightTop: case TransformerMode.ScaleRightBottom: case TransformerMode.ScaleLeftBottom: return(true); default: return(false); } }
private Layerage GetTransformerLayer(Vector2 startingPoint, Matrix3x2 matrix) { switch (this.SelectionMode) { case ListViewSelectionMode.None: return(null); case ListViewSelectionMode.Single: { Layerage layerage = this.SelectionViewModel.SelectionLayerage; if (layerage is null) { return(null); } // Transformer Transformer transformer = layerage.GetActualTransformer(); this.TransformerMode = Transformer.ContainsNodeMode(startingPoint, transformer, matrix, false); return(layerage); } case ListViewSelectionMode.Multiple: foreach (Layerage layerage in this.SelectionViewModel.SelectionLayerages) { // Transformer Transformer transformer = layerage.GetActualTransformer(); TransformerMode mode = Transformer.ContainsNodeMode(startingPoint, transformer, matrix, false); if (mode != TransformerMode.None) { this.TransformerMode = mode; return(layerage); } } break; } return(null); }
public static void SizeTranfrom(TransformerMode mode, float angle) { if (CoreCursorExtension.PointerDeviceType == PointerDeviceType.Mouse || CoreCursorExtension.PointerDeviceType == PointerDeviceType.Pen) { if (CoreCursorExtension.IsPointerEntered || CoreCursorExtension.IsManipulationStarted) { switch (mode) { case TransformerMode.None: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Arrow, 0); break; case TransformerMode.Rotation: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorExtension.SnapRotateCoreCursorType(angle), 0); break; case TransformerMode.SkewLeft: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorExtension.SnapRotateCoreCursorType(-90 + angle), 0); break; case TransformerMode.SkewTop: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorExtension.SnapRotateCoreCursorType(angle), 0); break; case TransformerMode.SkewRight: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorExtension.SnapRotateCoreCursorType(90 + angle), 0); break; case TransformerMode.SkewBottom: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorExtension.SnapRotateCoreCursorType(180 + angle), 0); break; case TransformerMode.ScaleLeft: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorExtension.SnapScaleCoreCursorType(-90 + angle), 0); break; case TransformerMode.ScaleTop: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorExtension.SnapScaleCoreCursorType(angle), 0); break; case TransformerMode.ScaleRight: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorExtension.SnapScaleCoreCursorType(90 + angle), 0); break; case TransformerMode.ScaleBottom: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorExtension.SnapScaleCoreCursorType(180 + angle), 0); break; case TransformerMode.ScaleLeftTop: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorExtension.SnapScaleCoreCursorType(-45 + angle), 0); break; case TransformerMode.ScaleRightTop: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorExtension.SnapScaleCoreCursorType(45 + angle), 0); break; case TransformerMode.ScaleRightBottom: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorExtension.SnapScaleCoreCursorType(135 + angle), 0); break; case TransformerMode.ScaleLeftBottom: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorExtension.SnapScaleCoreCursorType(225 + angle), 0); break; default: Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Arrow, 0); break; } return; } } Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Arrow, 0); }