From e61b505dd3a1a91e734e0c508eba5766313bbce0 Mon Sep 17 00:00:00 2001 From: kwai Date: Tue, 9 May 2023 19:21:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A9=A1=E7=9A=AE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Adorners/DrawingRubberbandAdorner.cs | 2 +- .../DrawingDesignerItemViewModelBase.cs | 15 ++-- .../EraserDrawingDesignerItemViewModel.cs | 77 +++++++++---------- 3 files changed, 45 insertions(+), 49 deletions(-) diff --git a/AIStudio.Wpf.DiagramDesigner/Adorners/DrawingRubberbandAdorner.cs b/AIStudio.Wpf.DiagramDesigner/Adorners/DrawingRubberbandAdorner.cs index 6386f94..890e967 100644 --- a/AIStudio.Wpf.DiagramDesigner/Adorners/DrawingRubberbandAdorner.cs +++ b/AIStudio.Wpf.DiagramDesigner/Adorners/DrawingRubberbandAdorner.cs @@ -62,7 +62,7 @@ namespace AIStudio.Wpf.DiagramDesigner { _drawingDesignerItem = new EraserDrawingDesignerItemViewModel(_viewModel, dragStartPoint); - _rubberbandBrush = new SolidColorBrush(Colors.Red) { Opacity = 0.5 }; + _rubberbandBrush = null; _rubberbandPen = new Pen(new SolidColorBrush(Colors.Red) { Opacity = 0.5 }, _drawingDesignerItem.ColorViewModel.LineWidth); } else if (DrawMode >= DrawMode.Line && DrawMode <= DrawMode.DirectLine) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs index 2c96fa6..324af7a 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs @@ -26,7 +26,7 @@ namespace AIStudio.Wpf.DiagramDesigner public DrawingDesignerItemViewModelBase(IDiagramViewModel root, DrawMode drawMode, Point startPoint, bool erasable) : this(root, drawMode, new List { startPoint }, erasable) { - + } public DrawingDesignerItemViewModelBase(IDiagramViewModel root, DrawMode drawMode, List points, bool erasable) : base(root) @@ -56,10 +56,10 @@ namespace AIStudio.Wpf.DiagramDesigner if (Erasable) { - var aPen = new Pen(ColorObject.ToBrush(ColorViewModel.LineColor), ColorViewModel.LineWidth); + var aPen = new Pen(ColorObject.ToBrush(ColorViewModel.LineColor), ColorViewModel.LineWidth); Geometry = Geometry.GetWidenedPathGeometry(aPen); //可擦除,需要把Geometry转成几何图像,所以不能有填充色 } - + } return true; } @@ -76,18 +76,17 @@ namespace AIStudio.Wpf.DiagramDesigner } else { - //var area = erase.GetArea(); - //if (area > 10) - //{ + if (this.GetBounds().IntersectsWith(erase.Bounds))//相交 + { return true; - //} + } } return false; } public bool Erasable { - get;set; + get; set; } private Geometry _geometry; diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EraserDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EraserDrawingDesignerItemViewModel.cs index bc5b650..86b9524 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EraserDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EraserDrawingDesignerItemViewModel.cs @@ -29,67 +29,64 @@ namespace AIStudio.Wpf.DiagramDesigner } public override bool OnMouseMove(IInputElement sender, MouseEventArgs e) - { - if (e.LeftButton == MouseButtonState.Pressed) + { + if (e.RightButton == MouseButtonState.Pressed) { var point = e.GetPosition(sender); if (Points == null || Points.Count == 0)//没有起始点 { return true; } - if ((Points[0] - point).Length < ColorViewModel.LineWidth) + + if ((Points.LastOrDefault() - point).Length < ColorViewModel.LineWidth) { return true; } - - PathGeometry geometry; - PathFigure figure; - if (Keyboard.IsKeyDown(Key.LeftShift) && Geometry != null)//预览模式,一并擦除 + + Points.Add(point); + if (Geometry is PathGeometry geometry) { - geometry = (PathGeometry)Geometry; - figure = geometry.Figures[0]; + } else { geometry = new PathGeometry(); - figure = new PathFigure { IsClosed = true, IsFilled = true }; + var figure = new PathFigure { StartPoint = Points[0] }; geometry.Figures.Add(figure); } - - var radius = ColorViewModel.LineWidth / 2; - var positiveX = radius * (point.X > Points[0].X ? 1 : -1); - var positiveY = radius * (point.Y > Points[0].Y ? 1 : -1); - figure.StartPoint = new Point( Points[0].X - positiveX, Points[0].Y - positiveY); - - var line = new LineSegment(new Point( Points[0].X + positiveX, Points[0].Y - positiveY), false); - figure.Segments.Add(line); - - line = new LineSegment(new Point(point.X + positiveX, point.Y - positiveY), false); - figure.Segments.Add(line); - - line = new LineSegment(new Point(point.X + positiveX, point.Y + positiveY), false); - figure.Segments.Add(line); - - line = new LineSegment(new Point(point.X - positiveX, point.Y + positiveY), false); - figure.Segments.Add(line); - - line = new LineSegment(new Point( Points[0].X - positiveX, Points[0].Y + positiveY), false); - figure.Segments.Add(line); - - Points[0] = point; + LineSegment arc = new LineSegment(point, true);// { IsSmoothJoin = true }; + geometry.Figures[0].Segments.Add(arc); Geometry = geometry; - if (Keyboard.IsKeyDown(Key.LeftShift))//预览模式,一并擦除 - { - - } - else - { - Erase(Geometry); - } return true; } + else if (e.LeftButton == MouseButtonState.Pressed) + { + var point = e.GetPosition(sender); + if (Points == null || Points.Count == 0)//没有起始点 + { + return true; + } + + if ((Points.LastOrDefault() - point).Length < ColorViewModel.LineWidth) + { + return true; + } + + var geometry = new PathGeometry(); + var figure = new PathFigure { StartPoint = Points[0] }; + geometry.Figures.Add(figure); + + LineSegment arc = new LineSegment(point, true);// { IsSmoothJoin = true }; + geometry.Figures[0].Segments.Add(arc); + Geometry = geometry; + Points[0] = point; + Erase(Geometry); + + return true; + } + else { return false;