示例#1
0
        /// <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
        }
示例#3
0
        /// <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);
        }
示例#5
0
        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);
        }