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