public void Started(Vector2 startingPoint, Vector2 point)
        {
            this.CursorMode = CursorMode.None;

            if (ToolBase.TransformerTool.Started(startingPoint, point))//TransformerTool
            {
                this.CursorMode = CursorMode.Transformer;
                return;
            }

            if (ToolBase.MoveTool.Started(startingPoint, point))//MoveTool
            {
                this.CursorMode = CursorMode.Move;
                return;
            }

            //Box
            this.CursorMode = CursorMode.BoxChoose;

            Matrix3x2 inverseMatrix       = this.ViewModel.CanvasTransformer.GetInverseMatrix();
            Vector2   canavsStartingPoint = Vector2.Transform(startingPoint, inverseMatrix);
            Vector2   canvasPoint         = Vector2.Transform(point, inverseMatrix);

            this.BoxRect = new TransformerRect(canavsStartingPoint, canvasPoint);

            this.ViewModel.Invalidate(InvalidateMode.Thumbnail);//Invalidate
        }
Exemple #2
0
        /// <summary>
        /// Create a specific geometry.
        /// </summary>
        /// <param name="resourceCreator"> The resource-creator. </param>
        /// <returns> The product geometry. </returns>
        public override CanvasGeometry CreateGeometry(ICanvasResourceCreator resourceCreator)
        {
            Transformer transformer = base.Transform.Transformer;


            CanvasTextFormat textFormat = new CanvasTextFormat
            {
                FontSize   = this.FontSize,
                FontFamily = this.FontFamily,

                HorizontalAlignment = this.FontAlignment,
                FontStyle           = this.FontStyle,
                FontWeight          = this.FontWeight,
            };

            float           width  = transformer.Horizontal.Length();
            float           height = transformer.Vertical.Length();
            TransformerRect rect   = new TransformerRect(width, height, Vector2.Zero);
            Matrix3x2       matrix = Transformer.FindHomography(rect, transformer);

            CanvasTextLayout textLayout = new CanvasTextLayout(resourceCreator, this.FontText, textFormat, width, height);
            CanvasGeometry   geometry   = CanvasGeometry.CreateText(textLayout).Transform(matrix);


            return(geometry);
        }
Exemple #3
0
        /// <summary>
        /// Create a specific geometry.
        /// </summary>
        /// <param name="resourceCreator"> The resource-creator. </param>
        /// <returns> The product geometry. </returns>
        public override CanvasGeometry CreateGeometry(ICanvasResourceCreator resourceCreator)
        {
            Transformer transformer = base.Transform.Transformer;

            if (string.IsNullOrEmpty(this.FontText))
            {
                return(CanvasGeometry.CreateText(new CanvasTextLayout(resourceCreator, string.Empty, new CanvasTextFormat(), 0, 0)));
            }

            using (CanvasTextFormat textFormat = new CanvasTextFormat
            {
                FontSize = this.FontSize,
                FontFamily = this.FontFamily,

                HorizontalAlignment = this.HorizontalAlignment,
                Direction = this.Direction,

                FontStyle = this.FontStyle,
                FontWeight = this.FontWeight.ToFontWeight(),
            })
            {
                float width = transformer.Horizontal.Length();
                if (width < 1 || float.IsNaN(width))
                {
                    width = 10;
                }
                float height = transformer.Vertical.Length();
                if (height < 1 || float.IsNaN(height))
                {
                    height = 10;
                }
                using (CanvasTextLayout textLayout = new CanvasTextLayout(resourceCreator, this.FontText, textFormat, width, height))
                {
                    int fontLength = this.FontText.Length;
                    if (this.Underline)
                    {
                        textLayout.SetUnderline(0, fontLength, true);
                    }


                    TransformerRect rect     = new TransformerRect(width, height, Vector2.Zero);
                    Matrix3x2       matrix   = Transformer.FindHomography(rect, transformer);
                    CanvasGeometry  geometry = CanvasGeometry.CreateText(textLayout).Transform(matrix);


                    return(geometry);
                }
            }
        }
        public void Complete(Vector2 startingPoint, Vector2 point, bool isOutNodeDistance)
        {
            Matrix3x2 inverseMatrix       = this.ViewModel.CanvasTransformer.GetInverseMatrix();
            Vector2   canvasStartingPoint = Vector2.Transform(startingPoint, inverseMatrix);
            Vector2   canvasPoint         = Vector2.Transform(point, inverseMatrix);

            if (this.Layerage == null)
            {
                this.TransformerRect    = new TransformerRect(canvasStartingPoint, canvasPoint);
                this.NodeCollectionMode = NodeCollectionMode.None;
                this.ViewModel.Invalidate(InvalidateMode.HD);//Invalidate
                return;
            }

            if (isOutNodeDistance)
            {
                switch (this.NodeCollectionMode)
                {
                case NodeCollectionMode.Move:
                    this.MoveComplete(canvasStartingPoint, canvasPoint);
                    break;

                case NodeCollectionMode.MoveSingleNodePoint:
                    this.MoveSingleNodePointComplete(canvasPoint);
                    break;

                case NodeCollectionMode.MoveSingleNodeLeftControlPoint:
                    this.MoveSingleNodeControlPointComplete(canvasPoint, isLeftControlPoint: true);
                    break;

                case NodeCollectionMode.MoveSingleNodeRightControlPoint:
                    this.MoveSingleNodeControlPointComplete(canvasPoint, isLeftControlPoint: false);
                    break;

                case NodeCollectionMode.RectChoose:
                    this.RectChooseComplete(canvasStartingPoint, canvasPoint);
                    break;
                }
            }

            this.NodeCollectionMode = NodeCollectionMode.None;

            this.ViewModel.Invalidate(InvalidateMode.HD);//Invalidate
        }
        public void Started(Vector2 startingPoint, Vector2 point)
        {
            Matrix3x2 matrix = this.ViewModel.CanvasTransformer.GetMatrix();

            this.Layerage = this.GetNodeCollectionLayer(startingPoint, matrix);
            if (this.Layerage == null)
            {
                Matrix3x2 inverseMatrix       = this.ViewModel.CanvasTransformer.GetInverseMatrix();
                Vector2   canvasStartingPoint = Vector2.Transform(startingPoint, inverseMatrix);
                Vector2   canvasPoint         = Vector2.Transform(point, inverseMatrix);

                this.TransformerRect    = new TransformerRect(canvasStartingPoint, canvasPoint);
                this.NodeCollectionMode = NodeCollectionMode.RectChoose;
                this.ViewModel.Invalidate(InvalidateMode.Thumbnail);//Invalidate
                return;
            }

            switch (this.NodeCollectionMode)
            {
            case NodeCollectionMode.Move:
                this.MoveStarted();
                break;

            case NodeCollectionMode.MoveSingleNodePoint:
                this.MoveSingleNodePointStarted(startingPoint, matrix);
                break;

            case NodeCollectionMode.MoveSingleNodeLeftControlPoint:
            case NodeCollectionMode.MoveSingleNodeRightControlPoint:
                this.MoveSingleNodeControlPointStarted();
                break;

            case NodeCollectionMode.RectChoose:
                this.RectChooseStarted(startingPoint, point);
                break;
            }

            this.ViewModel.Invalidate(InvalidateMode.Thumbnail);//Invalidate
        }
        public void Delta(Vector2 startingPoint, Vector2 point)
        {
            Matrix3x2 inverseMatrix       = this.ViewModel.CanvasTransformer.GetInverseMatrix();
            Vector2   canvasStartingPoint = Vector2.Transform(startingPoint, inverseMatrix);
            Vector2   canvasPoint         = Vector2.Transform(point, inverseMatrix);

            if (this.Layerage == null)
            {
                this.TransformerRect = new TransformerRect(canvasStartingPoint, canvasPoint);
                this.ViewModel.Invalidate();//Invalidate
                return;
            }

            switch (this.NodeCollectionMode)
            {
            case NodeCollectionMode.Move:
                this.MoveDelta(canvasStartingPoint, canvasPoint);
                break;

            case NodeCollectionMode.MoveSingleNodePoint:
                this.MoveSingleNodePointDelta(canvasPoint);
                break;

            case NodeCollectionMode.MoveSingleNodeLeftControlPoint:
                this.MoveSingleNodeControlPointDelta(canvasPoint, isLeftControlPoint: true);
                break;

            case NodeCollectionMode.MoveSingleNodeRightControlPoint:
                this.MoveSingleNodeControlPointDelta(canvasPoint, isLeftControlPoint: false);
                break;

            case NodeCollectionMode.RectChoose:
                this.RectChooseDelta(canvasStartingPoint, canvasPoint);
                break;
            }

            this.ViewModel.Invalidate();//Invalidate
        }
        public void Delta(Vector2 startingPoint, Vector2 point)
        {
            switch (this.CursorMode)
            {
            case CursorMode.Transformer:
                ToolBase.TransformerTool.Delta(startingPoint, point);    //TransformerTool
                break;

            case CursorMode.Move:
                ToolBase.MoveTool.Delta(startingPoint, point);    //MoveTool
                break;

            case CursorMode.BoxChoose:
            {
                Matrix3x2 inverseMatrix       = this.ViewModel.CanvasTransformer.GetInverseMatrix();
                Vector2   canavsStartingPoint = Vector2.Transform(startingPoint, inverseMatrix);
                Vector2   canvasPoint         = Vector2.Transform(point, inverseMatrix);
                this.BoxRect = new TransformerRect(canavsStartingPoint, canvasPoint);

                this.ViewModel.Invalidate();        //Invalidate
            }
            break;
            }
        }
        //@Construct
        public DottedLinePage()
        {
            this.InitializeComponent();
            this.Loaded += async(s2, e2) =>
            {
                this.MarkdownText1.Text = await FanKit.Samples.File.GetFile("ms-appx:///TXT/Transformers/DottedLinePage.xaml.txt");

                this.MarkdownText1.LinkClicked += async(s, e) => await Launcher.LaunchUriAsync(new Uri("https://github.com/ysdy44/FanKit-UWP/blob/master/FanKit/Frames/Transformers/DottedLinePage.xaml"));

                this.MarkdownText2.Text = await FanKit.Samples.File.GetFile("ms-appx:///TXT/Transformers/DottedLinePage.xaml.cs.txt");

                this.MarkdownText2.LinkClicked += async(s, e) => await Launcher.LaunchUriAsync(new Uri("https://github.com/ysdy44/FanKit-UWP/blob/master/FanKit/Frames/Transformers/DottedLinePage.xaml.cs"));
            };

            this.ResetButton.Tapped += (s, e) =>
            {
                //DottedLine
                using (var ds = this.DottedLineImage.CreateDrawingSession())
                {
                    ds.Clear(Windows.UI.Colors.Transparent);
                }
                this.DottedLineImage.Baking(this.CanvasAnimatedControl);
            };

            #region Draw


            //Canvas
            this.CanvasAnimatedControl.SizeChanged += (s, e) =>
            {
                if (e.NewSize == e.PreviousSize)
                {
                    return;
                }
            };
            this.CanvasAnimatedControl.CreateResources += (sender, args) =>
            {
                CanvasRenderTarget canvasRenderTarget = new CanvasRenderTarget(sender, this._canvasWidth, this._canvasHeight);

                //DottedLine
                this.DottedLineImage = new DottedLineImage(canvasRenderTarget);
                this.DottedLineBrush = new DottedLineBrush(sender, 6);

                this.DottedLineImage.Baking(sender);
            };
            this.CanvasAnimatedControl.Draw += (sender, args) =>
            {
                int width  = this._canvasWidth;
                int height = this._canvasHeight;

                //DottedLine
                args.DrawingSession.DrawDottedLine(sender, this.DottedLineBrush, this.DottedLineImage, this._canvasWidth, this._canvasHeight);

                Rect rect = this._transformerRect.ToRect();
                args.DrawingSession.DrawThickRectangle(rect);
            };
            this.CanvasAnimatedControl.Update += (sender, args) =>
            {
                this.DottedLineBrush.Update(1);
            };


            #endregion

            #region CanvasOperator


            //Single
            this.CanvasOperator.Single_Start += (point) =>
            {
                this._startingPoint   = point;
                this._transformerRect = new TransformerRect(point, point);
            };
            this.CanvasOperator.Single_Delta += (point) =>
            {
                this._transformerRect = new TransformerRect(_startingPoint, point);
            };
            this.CanvasOperator.Single_Complete += (point) =>
            {
                //DottedLine
                using (var ds = this.DottedLineImage.CreateDrawingSession())
                {
                    ds.FillRectangle(this._transformerRect.ToRect(), Windows.UI.Colors.Gray);
                }
                this.DottedLineImage.Baking(this.CanvasAnimatedControl);

                this._transformerRect = new TransformerRect(Vector2.Zero, Vector2.Zero);
            };


            #endregion
        }
        //@Construct
        public DottedLinePage2()
        {
            this.InitializeComponent();
            this.Loaded += async(s2, e2) =>
            {
                this.MarkdownText1.Text = await FanKit.Samples.File.GetFile("ms-appx:///TXT/Transformers/DottedLinePage2.xaml.txt");

                this.MarkdownText1.LinkClicked += async(s, e) => await Launcher.LaunchUriAsync(new Uri("https://github.com/ysdy44/FanKit-UWP/blob/master/FanKit/Frames/Transformers/DottedLinePage2.xaml"));

                this.MarkdownText2.Text = await FanKit.Samples.File.GetFile("ms-appx:///TXT/Transformers/DottedLinePage2.xaml.cs.txt");

                this.MarkdownText2.LinkClicked += async(s, e) => await Launcher.LaunchUriAsync(new Uri("https://github.com/ysdy44/FanKit-UWP/blob/master/FanKit/Frames/Transformers/DottedLinePage2.xaml.cs"));
            };

            this.ResetButton.Tapped += (s, e) =>
            {
                using (var ds = this.DottedLineImage.CreateDrawingSession())
                {
                    ds.Clear(Windows.UI.Colors.Transparent);
                }
                this.DottedLineImage.Baking(this.CanvasAnimatedControl);

                this.CanvasTransformer.Fit();
            };
            this.RadianSlider.ValueChanged += (s, e) =>
            {
                float radian = ((float)e.NewValue) * FanKit.Math.Pi / 180.0f;
                this.CanvasTransformer.Radian = radian;
                this.CanvasTransformer.ReloadMatrix();

                Matrix3x2 matrix = this.CanvasTransformer.GetMatrix();
                this.DottedLineImage.Baking(this.CanvasAnimatedControl, matrix);
                this.CanvasAnimatedControl.Invalidate();
            };


            #region Draw


            //Canvas
            this.CanvasAnimatedControl.SizeChanged += (s, e) =>
            {
                if (e.NewSize == e.PreviousSize)
                {
                    return;
                }
                this.CanvasTransformer.Size = e.NewSize;
            };
            this.CanvasAnimatedControl.CreateResources += (sender, args) =>
            {
                CanvasRenderTarget canvasRenderTarget = new CanvasRenderTarget(sender, this.CanvasTransformer.Width, this.CanvasTransformer.Height);
                this.DottedLineImage = new DottedLineImage(canvasRenderTarget);
                this.DottedLineBrush = new DottedLineBrush(sender, 6);

                Matrix3x2 matrix = this.CanvasTransformer.GetMatrix();
                this.DottedLineImage.Baking(sender, matrix);
            };
            this.CanvasAnimatedControl.Draw += (sender, args) =>
            {
                Matrix3x2 matrix = this.CanvasTransformer.GetMatrix();

                //DrawCrad
                var previousImage = new ColorSourceEffect {
                    Color = Windows.UI.Colors.White
                };
                args.DrawingSession.DrawCrad(previousImage, this.CanvasTransformer);

                //DrawDottedLine
                args.DrawingSession.DrawDottedLine(sender, this.DottedLineBrush, this.DottedLineImage, this.CanvasTransformer.Width, this.CanvasTransformer.Height);

                CanvasGeometry canvasGeometry          = this._transformerRect.ToRectangle(sender);
                CanvasGeometry canvasGeometryTransform = canvasGeometry.Transform(matrix);
                args.DrawingSession.DrawThickGeometry(canvasGeometryTransform);
            };
            this.CanvasAnimatedControl.Update += (sender, args) =>
            {
                this.DottedLineBrush.Update(1);
            };


            #endregion


            #region CanvasOperator


            //Single
            this.CanvasOperator.Single_Start += (point) =>
            {
                Matrix3x2 inverseMatrix = this.CanvasTransformer.GetInverseMatrix();
                Vector2   canvasPoint   = Vector2.Transform(point, inverseMatrix);

                this._startingPoint = point;

                this._transformerRect = new TransformerRect(point, point);
            };
            this.CanvasOperator.Single_Delta += (point) =>
            {
                Matrix3x2 inverseMatrix       = this.CanvasTransformer.GetInverseMatrix();
                Vector2   canvasStartingPoint = Vector2.Transform(this._startingPoint, inverseMatrix);
                Vector2   canvasPoint         = Vector2.Transform(point, inverseMatrix);

                this._transformerRect = new TransformerRect(canvasStartingPoint, canvasPoint);
            };
            this.CanvasOperator.Single_Complete += (point) =>
            {
                Matrix3x2 matrix              = this.CanvasTransformer.GetMatrix();
                Matrix3x2 inverseMatrix       = this.CanvasTransformer.GetInverseMatrix();
                Vector2   canvasStartingPoint = Vector2.Transform(this._startingPoint, inverseMatrix);
                Vector2   canvasPoint         = Vector2.Transform(point, inverseMatrix);

                //DottedLine
                using (var ds = this.DottedLineImage.CreateDrawingSession())
                {
                    TransformerRect transformerRect = new TransformerRect(canvasStartingPoint, canvasPoint);
                    ds.FillRectangle(transformerRect.ToRect(), Windows.UI.Colors.Gray);
                }
                this.DottedLineImage.Baking(this.CanvasAnimatedControl, matrix);

                this._transformerRect = new TransformerRect(Vector2.Zero, Vector2.Zero);
            };


            //Right
            this.CanvasOperator.Right_Start += (point) =>
            {
                this.CanvasTransformer.CacheMove(point);
            };
            this.CanvasOperator.Right_Delta += (point) =>
            {
                this.CanvasTransformer.Move(point);

                //DottedLine
                Matrix3x2 matrix = this.CanvasTransformer.GetMatrix();
                this.DottedLineImage.Baking(this.CanvasAnimatedControl, matrix);
                this.CanvasAnimatedControl.Invalidate();
            };
            this.CanvasOperator.Right_Complete += (point) =>
            {
                this.CanvasTransformer.Move(point);

                //DottedLine
                Matrix3x2 matrix = this.CanvasTransformer.GetMatrix();
                this.DottedLineImage.Baking(this.CanvasAnimatedControl, matrix);
                this.CanvasAnimatedControl.Invalidate();
            };


            //Double
            this.CanvasOperator.Double_Start += (center, space) =>
            {
                this.CanvasTransformer.CachePinch(center, space);
                this.CanvasAnimatedControl.Invalidate();
            };
            this.CanvasOperator.Double_Delta += (center, space) =>
            {
                this.CanvasTransformer.Pinch(center, space);

                //DottedLine
                Matrix3x2 matrix = this.CanvasTransformer.GetMatrix();
                this.DottedLineImage.Baking(this.CanvasAnimatedControl, matrix);
                this.CanvasAnimatedControl.Invalidate();
            };
            this.CanvasOperator.Double_Complete += (center, space) =>
            {
                //DottedLine
                Matrix3x2 matrix = this.CanvasTransformer.GetMatrix();
                this.DottedLineImage.Baking(this.CanvasAnimatedControl, matrix);
                this.CanvasAnimatedControl.Invalidate();
            };


            //Wheel
            this.CanvasOperator.Wheel_Changed += (point, space) =>
            {
                if (space > 0)
                {
                    this.CanvasTransformer.ZoomIn(point);
                }
                else
                {
                    this.CanvasTransformer.ZoomOut(point);
                }

                //DottedLine
                Matrix3x2 matrix = this.CanvasTransformer.GetMatrix();
                this.DottedLineImage.Baking(this.CanvasAnimatedControl, matrix);
                this.CanvasAnimatedControl.Invalidate();
            };


            #endregion
        }