From da9cdb55c936ea99fcff6261d046cb5dac5fe7b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=89=BE=E7=AB=B9?= Date: Sun, 14 May 2023 23:26:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E6=B7=BB=E5=8A=A0=E7=BB=98?= =?UTF-8?q?=E5=9B=BE=E5=85=83=E7=B4=A0=EF=BC=8CDemo=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E4=B8=80=E5=8D=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModels/DrawingViewModel.cs | 65 ++++ .../ViewModels/FlowchartViewModel.cs | 14 +- .../ViewModels/LogicalViewModel.cs | 10 +- .../ViewModels/MainWindowViewModel.cs | 8 + .../ViewModels/MindViewModel.cs | 7 +- .../ViewModels/SFCViewModel.cs | 17 +- AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml | 3 + ...esigner.Additionals_sf145ux0_wpftmp.csproj | 293 ++++++++++++++++++ .../Enums/DiagramType.cs | 3 +- .../Serializables/DrawingDesignerItemBase.cs | 18 +- .../DesignerItemViewModelBase.cs | 14 +- ...ColorPickerDrawingDesignerItemViewModel.cs | 5 + .../DirectLineDrawingDesignerItemViewModel.cs | 27 ++ .../DrawingDesignerItemViewModelBase.cs | 136 +++++--- .../EllipseDrawingDesignerItemViewModel.cs | 15 + .../EraserDrawingDesignerItemViewModel.cs | 5 + ...aserPreviewDrawingDesignerItemViewModel.cs | 5 + .../LineDrawingDesignerItemViewModel.cs | 20 +- .../PolygonDrawingDesignerItemViewModel.cs | 28 ++ .../PolylineDrawingDesignerItemViewModel.cs | 29 +- .../RectangleDrawingDesignerItemViewModel.cs | 14 + .../SharpDrawingDesignerItemViewModel.cs | 67 ++-- .../TextDrawingDesignerItemViewModel.cs | 75 +++-- .../AIStudio.Wpf.SFC_0ml2nkmq_wpftmp.csproj | 235 ++++++++++++++ .../AIStudio.Wpf.SFC_gujzkzga_wpftmp.csproj | 236 ++++++++++++++ 25 files changed, 1225 insertions(+), 124 deletions(-) create mode 100644 AIStudio.Wpf.DiagramApp/ViewModels/DrawingViewModel.cs create mode 100644 AIStudio.Wpf.DiagramDesigner.Additionals/AIStudio.Wpf.DiagramDesigner.Additionals_sf145ux0_wpftmp.csproj create mode 100644 Extensions/AIStudio.Wpf.SFC/AIStudio.Wpf.SFC_0ml2nkmq_wpftmp.csproj create mode 100644 Extensions/AIStudio.Wpf.SFC/AIStudio.Wpf.SFC_gujzkzga_wpftmp.csproj diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/DrawingViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/DrawingViewModel.cs new file mode 100644 index 0000000..11926c0 --- /dev/null +++ b/AIStudio.Wpf.DiagramApp/ViewModels/DrawingViewModel.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using AIStudio.Wpf.DiagramApp.Models; +using AIStudio.Wpf.DiagramDesigner; +using AIStudio.Wpf.DiagramDesigner.Additionals; +using AIStudio.Wpf.Mind.Models; + +namespace AIStudio.Wpf.DiagramApp.ViewModels +{ + public class DrawingViewModel : PageViewModel + { + public DrawingViewModel(string title, string status, DiagramType diagramType) : base(title, status, diagramType) + { + + } + public DrawingViewModel(string filename, DiagramDocument diagramDocument) : base(filename, diagramDocument) + { + foreach (var vm in DiagramViewModels) + { + vm.Init(false); + } + } + + protected override void InitDiagramViewModel() + { + base.InitDiagramViewModel(); + + DiagramViewModel.DiagramOption.LayoutOption.GridCellSize = new Size(100, 100); + DiagramViewModel.DiagramOption.LayoutOption.ShowGrid = false; + DiagramViewModel.DiagramOption.LayoutOption.AllowDrop = true; + } + + + protected override void Init(bool initNew) + { + DiagramViewModels = new ObservableCollection() + { + GetDiagramViewModel("页-1", DiagramType, initNew), + }; + DiagramViewModel = DiagramViewModels.FirstOrDefault(); + + DesignerItemViewModelBase line = new LineDrawingDesignerItemViewModel(DiagramViewModel, new List { new Point(38, 38), new Point(118, 118) }, true); + DiagramViewModel.Add(line); + + DesignerItemViewModelBase rectangle = new RectangleDrawingDesignerItemViewModel(DiagramViewModel, new List { new Point(138, 38), new Point(218, 118) }, true); + DiagramViewModel.Add(rectangle); + + DesignerItemViewModelBase ellipse = new EllipseDrawingDesignerItemViewModel(DiagramViewModel, new List { new Point(238, 38), new Point(318, 118) }, true); + DiagramViewModel.Add(ellipse); + + TextDrawingDesignerItemViewModel text = new TextDrawingDesignerItemViewModel(DiagramViewModel, new Point(338, 38), "文字", true); + DiagramViewModel.Add(text); + } + + public override void Dispose() + { + base.Dispose(); + } + } +} diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs index 68dc726..0fc4631 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs @@ -1,17 +1,13 @@ -using AIStudio.Wpf.DiagramApp.Models; -using AIStudio.Wpf.DiagramApp.ViewModels; -using AIStudio.Wpf.Flowchart.ViewModels; -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; +using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows; using System.Windows.Media; +using AIStudio.Wpf.DiagramApp.Models; using AIStudio.Wpf.DiagramDesigner; +using AIStudio.Wpf.Flowchart; +using AIStudio.Wpf.Flowchart.ViewModels; -namespace AIStudio.Wpf.Flowchart +namespace AIStudio.Wpf.DiagramApp.ViewModels { public class FlowchartViewModel : PageViewModel { diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/LogicalViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/LogicalViewModel.cs index 794517f..297ce97 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/LogicalViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/LogicalViewModel.cs @@ -1,13 +1,13 @@ -using AIStudio.Wpf.DiagramApp.Models; -using AIStudio.Wpf.DiagramApp.ViewModels; -using AIStudio.Wpf.Logical.ViewModels; -using System; +using System; using System.Linq; using System.Windows; using System.Windows.Media; +using AIStudio.Wpf.DiagramApp.Models; using AIStudio.Wpf.DiagramDesigner; +using AIStudio.Wpf.Logical; +using AIStudio.Wpf.Logical.ViewModels; -namespace AIStudio.Wpf.Logical +namespace AIStudio.Wpf.DiagramApp.ViewModels { public class LogicalViewModel : PageViewModel { diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/MainWindowViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/MainWindowViewModel.cs index 0a7e3d3..b2821d4 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/MainWindowViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/MainWindowViewModel.cs @@ -541,6 +541,10 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels { flow = new ScriptViewModel(filename, diagram); } + else if (diagram.DiagramType == DiagramType.Drawing) + { + flow = new DrawingViewModel(filename, diagram); + } else { flow = new PageViewModel(filename, diagram); @@ -660,6 +664,10 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels { PageViewModel = new ScriptViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", (DiagramType)Enum.Parse(typeof(DiagramType), type)); } + else if (type == DiagramType.Drawing.ToString()) + { + PageViewModel = new DrawingViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", (DiagramType)Enum.Parse(typeof(DiagramType), type)); + } else { PageViewModel = new PageViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", (DiagramType)Enum.Parse(typeof(DiagramType), type)); diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs index 2d7385f..8cb473d 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs @@ -16,7 +16,7 @@ using AIStudio.Wpf.DiagramDesigner.Additionals; using AIStudio.Wpf.Mind.Helpers; using AIStudio.Wpf.Mind.Models; -namespace AIStudio.Wpf.Flowchart +namespace AIStudio.Wpf.DiagramApp.ViewModels { public class MindViewModel : PageViewModel { @@ -119,10 +119,7 @@ namespace AIStudio.Wpf.Flowchart { base.Dispose(); - foreach (var viewModel in DiagramViewModels) - { - FlowchartService.Dispose(viewModel); - } + } } } diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/SFCViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/SFCViewModel.cs index 7484b00..77065c9 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/SFCViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/SFCViewModel.cs @@ -1,20 +1,13 @@ -using AIStudio.Wpf.DiagramApp.Models; -using AIStudio.Wpf.DiagramApp.ViewModels; -using AIStudio.Wpf.Flowchart.ViewModels; -using AIStudio.Wpf.SFC; -using AIStudio.Wpf.SFC.ViewModels; -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; +using System.Collections.ObjectModel; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Timers; using System.Windows; -using System.Windows.Media; +using AIStudio.Wpf.DiagramApp.Models; using AIStudio.Wpf.DiagramDesigner; +using AIStudio.Wpf.SFC; +using AIStudio.Wpf.SFC.ViewModels; -namespace AIStudio.Wpf.Flowchart +namespace AIStudio.Wpf.DiagramApp.ViewModels { public class SFCViewModel : PageViewModel { diff --git a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml index eeec5c6..ece665e 100644 --- a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml +++ b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml @@ -100,6 +100,9 @@ + diff --git a/AIStudio.Wpf.DiagramDesigner.Additionals/AIStudio.Wpf.DiagramDesigner.Additionals_sf145ux0_wpftmp.csproj b/AIStudio.Wpf.DiagramDesigner.Additionals/AIStudio.Wpf.DiagramDesigner.Additionals_sf145ux0_wpftmp.csproj new file mode 100644 index 0000000..f6d2fba --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Additionals/AIStudio.Wpf.DiagramDesigner.Additionals_sf145ux0_wpftmp.csproj @@ -0,0 +1,293 @@ + + + AIStudio.Wpf.DiagramDesigner.Additionals + obj\Debug\ + obj\ + F:\aistudio.-wpf.-diagram\AIStudio.Wpf.DiagramDesigner.Additionals\obj\ + <_TargetAssemblyProjectName>AIStudio.Wpf.DiagramDesigner.Additionals + + + + true + true + AIStudio.Wpf.Controls + akwkevin + https://gitee.com/akwkevin + A.png + + + 1.0.1 + 一个Wpf的Diagram控件帮助库 + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AIStudio.Wpf.DiagramDesigner/Enums/DiagramType.cs b/AIStudio.Wpf.DiagramDesigner/Enums/DiagramType.cs index 71a2c17..443564d 100644 --- a/AIStudio.Wpf.DiagramDesigner/Enums/DiagramType.cs +++ b/AIStudio.Wpf.DiagramDesigner/Enums/DiagramType.cs @@ -11,6 +11,7 @@ namespace AIStudio.Wpf.DiagramDesigner Logical, SFC, Mind, - Script + Script, + Drawing } } diff --git a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DrawingDesignerItemBase.cs b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DrawingDesignerItemBase.cs index 56fad40..6ad98cf 100644 --- a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DrawingDesignerItemBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DrawingDesignerItemBase.cs @@ -20,10 +20,10 @@ namespace AIStudio.Wpf.DiagramDesigner { this.Erasable = item.Erasable; this.Geometry = item.Geometry.ToString(); - //if (item.Geometry.Transform != null) - //{ - // this.Matrix = item.Geometry.Transform.Value; - //} + if (item.Geometry.Transform != null) + { + this.Matrix = item.Geometry.Transform.Value.ToString(); + } this.Points = item.Points; this.DrawMode = item.DrawMode; } @@ -40,11 +40,11 @@ namespace AIStudio.Wpf.DiagramDesigner get; set; } - //[XmlIgnore] - //public Matrix Matrix - //{ - // get; set; - //} + [XmlAttribute] + public string Matrix + { + get; set; + } //[JsonIgnore] //[XmlElement("Matrix")] //public string XmlMatrix diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs index 950e70b..e924c73 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs @@ -3,11 +3,11 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.ComponentModel; -using System.Windows; using System.Linq; using System.Reactive.Linq; -using AIStudio.Wpf.DiagramDesigner.Models; +using System.Windows; using AIStudio.Wpf.DiagramDesigner.Geometrys; +using AIStudio.Wpf.DiagramDesigner.Models; namespace AIStudio.Wpf.DiagramDesigner { @@ -425,7 +425,7 @@ namespace AIStudio.Wpf.DiagramDesigner { return new PointBase(Left, Top); } - } + } [CanDo] public PointBase TopLeft @@ -441,6 +441,14 @@ namespace AIStudio.Wpf.DiagramDesigner } } + public PointBase RightBottom + { + get + { + return new Point(Left + ItemWidth, Top + ItemHeight); + } + } + private double _angle; [CanDo] public double Angle diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/ColorPickerDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/ColorPickerDrawingDesignerItemViewModel.cs index dd7d920..9d7db41 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/ColorPickerDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/ColorPickerDrawingDesignerItemViewModel.cs @@ -20,6 +20,11 @@ namespace AIStudio.Wpf.DiagramDesigner { } + public ColorPickerDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List points, bool erasable) : base(root, drawMode, points, erasable) + { + + } + public ColorPickerDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DirectLineDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DirectLineDrawingDesignerItemViewModel.cs index 60999d6..64071e9 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DirectLineDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DirectLineDrawingDesignerItemViewModel.cs @@ -21,6 +21,11 @@ namespace AIStudio.Wpf.DiagramDesigner { } + public DirectLineDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List points, bool erasable) : base(root, drawMode, points, erasable) + { + + } + public DirectLineDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -31,6 +36,28 @@ namespace AIStudio.Wpf.DiagramDesigner } + protected override void InitNew() + { + if (Points?.Count > 1) + { + var geometry = new PathGeometry(); + var figure = new PathFigure { StartPoint = Points[0] }; + geometry.Figures.Add(figure); + + foreach (var point in Points) + { + if (Points[0] == point) continue; + + LineSegment arc = new LineSegment(point, true); + geometry.Figures[0].Segments.Add(arc); + } + + Geometry = geometry; + IsFinish = true; + } + base.InitNew(); + } + public override bool OnMouseMove(IInputElement sender, MouseEventArgs e) { var point = e.GetPosition(sender); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs index 5b81aeb..6b0ae72 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs @@ -1,14 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; +using System.Collections.Generic; +using System.ComponentModel; using System.Linq; -using System.Text; using System.Windows; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Media3D; -using System.Windows.Shapes; -using System.Windows.Controls; using AIStudio.Wpf.DiagramDesigner.Models; namespace AIStudio.Wpf.DiagramDesigner @@ -20,22 +16,18 @@ namespace AIStudio.Wpf.DiagramDesigner } - public DrawingDesignerItemViewModelBase(IDiagramViewModel root, DrawMode drawMode, Point startPoint, bool erasable) : base(root) + public DrawingDesignerItemViewModelBase(IDiagramViewModel root, DrawMode drawMode, Point startPoint, bool erasable) : this(root, drawMode, new List { startPoint }, erasable, false) + { + + } + + public DrawingDesignerItemViewModelBase(IDiagramViewModel root, DrawMode drawMode, List points, bool erasable, bool isFinish = true) : base(root) { DrawMode = drawMode; - Points = new List { startPoint }; + Points = points; Erasable = erasable; - if (Erasable) - { - if (Root?.DrawModeViewModel != null) - { - this.ColorViewModel = CopyHelper.Mapper(Root.DrawModeViewModel.DrawingColorViewModel); - } - else - { - this.ColorViewModel = CopyHelper.Mapper(_service.DrawModeViewModel.DrawingColorViewModel); - } - } + IsFinish = isFinish; + InitNewDrawing(); } public DrawingDesignerItemViewModelBase(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) @@ -55,7 +47,7 @@ namespace AIStudio.Wpf.DiagramDesigner protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root, initNew); + base.Init(root, initNew); } protected override void InitNew() @@ -63,6 +55,26 @@ namespace AIStudio.Wpf.DiagramDesigner ClearConnectors(); } + protected virtual void InitNewDrawing() + { + if (IsFinish) + { + OnMouseUp(null, null); + this.SelectedDisable = Erasable; + } + else if (Erasable) + { + if (Root?.DrawModeViewModel != null) + { + this.ColorViewModel = CopyHelper.Mapper(Root.DrawModeViewModel.DrawingColorViewModel); + } + else + { + this.ColorViewModel = CopyHelper.Mapper(_service.DrawModeViewModel.DrawingColorViewModel); + } + } + } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { base.LoadDesignerItemViewModel(designerbase); @@ -70,8 +82,11 @@ namespace AIStudio.Wpf.DiagramDesigner if (designerbase is DrawingDesignerItemBase designer) { this.Erasable = designer.Erasable; - this.Geometry = Geometry.Parse(designer.Geometry).GetFlattenedPathGeometry(); - //this.Geometry.Transform = Transform.Parse(designer.Matrix.ToString()); + this.Geometry = PathGeometry.CreateFromGeometry(Geometry.Parse(designer.Geometry)); + if (!string.IsNullOrEmpty(designer.Matrix)) + { + this.Geometry.Transform = Transform.Parse(designer.Matrix); + } this.Points = designer.Points; this.DrawMode = designer.DrawMode; this.SelectedDisable = Erasable; @@ -92,26 +107,32 @@ namespace AIStudio.Wpf.DiagramDesigner { if (IsFinish) { + IsLoaded = false; if (Geometry != null) { if (Geometry.Transform is TransformGroup transformGroup) { TranslateTransform translateTransform = transformGroup.Children.OfType().FirstOrDefault(); - transformGroup.Children.Remove(translateTransform); ; + transformGroup.Children.Remove(translateTransform); transformGroup.Children.Add(new TranslateTransform(0 - Geometry.Bounds.Left, 0 - Geometry.Bounds.Top)); } else - Geometry.Transform = new TranslateTransform(0 - Geometry.Bounds.Left, 0 - Geometry.Bounds.Top); - + { + transformGroup = new TransformGroup(); + transformGroup.Children.Add(new TranslateTransform(0 - Geometry.Bounds.Left, 0 - Geometry.Bounds.Top)); + Geometry.Transform = transformGroup; + } + if (Erasable) { var aPen = new Pen(ColorViewModel.LineColor.ToBrush(), ColorViewModel.LineWidth); aPen.DashStyle = new DashStyle(StrokeDashArray.Dash[(int)ColorViewModel.LineDashStyle], 1); Geometry = Geometry.GetWidenedPathGeometry(aPen); //可擦除,需要把Geometry转成几何图像,所以不能有填充色 - + } UpdateLocation(); } + IsLoaded = true; } return true; } @@ -177,23 +198,23 @@ namespace AIStudio.Wpf.DiagramDesigner get; set; } - public void UpdateLocation() + #region 属性改变 + protected override void Item_PropertyChanged(object sender, PropertyChangedEventArgs e) { - if (Erasable) + if (IsLoaded == false) return; + + switch (e.PropertyName) { - ItemWidth = Geometry.Bounds.Width - ColorViewModel.LineWidth * 0.5; - ItemHeight = Geometry.Bounds.Height - ColorViewModel.LineWidth * 0.5; - Left = Points[0].X; - Top = Points[0].Y; - } - else - { - ItemWidth = Geometry.Bounds.Width; - ItemHeight = Geometry.Bounds.Height; - Left = Points[0].X; - Top = Points[0].Y; + case nameof(ItemWidth): + case nameof(ItemHeight): + { + + UpdateTransform(); + break; + } } } + #endregion public override void RemoveFromSelection() { @@ -213,5 +234,42 @@ namespace AIStudio.Wpf.DiagramDesigner base.AddToSelection(selected, clearother); } + protected virtual void UpdateLocation() + { + if (Erasable) + { + ItemWidth = Geometry.Bounds.Width - ColorViewModel.LineWidth * 0.5; + ItemHeight = Geometry.Bounds.Height - ColorViewModel.LineWidth * 0.5; + Left = Points[0].X; + Top = Points[0].Y; + } + else + { + ItemWidth = Geometry.Bounds.Width + ColorViewModel.LineWidth * 0.5; + ItemHeight = Geometry.Bounds.Height + ColorViewModel.LineWidth * 0.5; + Left = Points[0].X; + Top = Points[0].Y; + } + } + + protected void UpdateTransform() + { + if (Geometry.Transform is TransformGroup transformGroup) + { + } + else + { + transformGroup = new TransformGroup(); + Geometry.Transform = transformGroup; + } + + ScaleTransform scaleTransform = transformGroup.Children.OfType().FirstOrDefault(); + transformGroup.Children.Remove(scaleTransform); ; + + double radiox = ItemWidth / Geometry.Bounds.Width; + double radioy = ItemHeight / Geometry.Bounds.Height; + transformGroup.Children.Add(new ScaleTransform(radiox, radioy)); + } + } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EllipseDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EllipseDrawingDesignerItemViewModel.cs index 93fcb66..81e8f4a 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EllipseDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EllipseDrawingDesignerItemViewModel.cs @@ -20,6 +20,11 @@ namespace AIStudio.Wpf.DiagramDesigner { } + public EllipseDrawingDesignerItemViewModel(IDiagramViewModel root, List points, bool erasable) : base(root, DrawMode.ErasableRectangle, points, erasable) + { + + } + public EllipseDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -30,6 +35,16 @@ namespace AIStudio.Wpf.DiagramDesigner } + protected override void InitNewDrawing() + { + if (IsFinish) + { + Geometry = new EllipseGeometry(new Rect(Points[0], Points[1])); + } + base.InitNewDrawing(); + } + + public override bool OnMouseMove(IInputElement sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EraserDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EraserDrawingDesignerItemViewModel.cs index 08b909d..15b669b 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EraserDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EraserDrawingDesignerItemViewModel.cs @@ -22,6 +22,11 @@ namespace AIStudio.Wpf.DiagramDesigner { } + public EraserDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, bool erasable) : base(root, drawMode, null, erasable) + { + + } + public EraserDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EraserPreviewDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EraserPreviewDrawingDesignerItemViewModel.cs index 7312c34..7bd648b 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EraserPreviewDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EraserPreviewDrawingDesignerItemViewModel.cs @@ -22,6 +22,11 @@ namespace AIStudio.Wpf.DiagramDesigner { } + public EraserPreviewDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List points, bool erasable) : base(root, drawMode, points, erasable) + { + + } + public EraserPreviewDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/LineDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/LineDrawingDesignerItemViewModel.cs index 99e58d3..9ebb941 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/LineDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/LineDrawingDesignerItemViewModel.cs @@ -18,7 +18,12 @@ namespace AIStudio.Wpf.DiagramDesigner } public LineDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.ErasableLine, startPoint, erasable) - { + { + } + + public LineDrawingDesignerItemViewModel(IDiagramViewModel root, List points, bool erasable) : base(root, DrawMode.ErasableLine, points, erasable) + { + } public LineDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) @@ -31,6 +36,15 @@ namespace AIStudio.Wpf.DiagramDesigner } + protected override void InitNewDrawing() + { + if (IsFinish) + { + Geometry = new LineGeometry(Points[0], Points[1]); + } + base.InitNewDrawing(); + } + public override bool OnMouseMove(IInputElement sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) @@ -63,7 +77,7 @@ namespace AIStudio.Wpf.DiagramDesigner else { return false; - } + } } public override bool OnMouseDown(IInputElement sender, MouseButtonEventArgs e) @@ -74,6 +88,6 @@ namespace AIStudio.Wpf.DiagramDesigner public override bool OnMouseUp(IInputElement sender, MouseButtonEventArgs e) { return base.OnMouseUp(sender, e); - } + } } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/PolygonDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/PolygonDrawingDesignerItemViewModel.cs index 66e4f35..65cb276 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/PolygonDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/PolygonDrawingDesignerItemViewModel.cs @@ -17,6 +17,11 @@ namespace AIStudio.Wpf.DiagramDesigner { } + public PolygonDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List points, bool erasable) : base(root, drawMode, points, erasable) + { + + } + public PolygonDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -27,6 +32,29 @@ namespace AIStudio.Wpf.DiagramDesigner } + protected override void InitNew() + { + if (Points?.Count > 1) + { + var geometry = new PathGeometry(); + var figure = new PathFigure { StartPoint = Points[0] }; + figure.IsClosed = true; + geometry.Figures.Add(figure); + + foreach (var point in Points) + { + if (Points[0] == point) continue; + + LineSegment arc = new LineSegment(point, true) { IsSmoothJoin = true }; + geometry.Figures[0].Segments.Add(arc); + } + + Geometry = geometry; + IsFinish = true; + } + base.InitNew(); + } + public override bool OnMouseMove(IInputElement sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/PolylineDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/PolylineDrawingDesignerItemViewModel.cs index 12e6ee0..8849786 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/PolylineDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/PolylineDrawingDesignerItemViewModel.cs @@ -22,6 +22,11 @@ namespace AIStudio.Wpf.DiagramDesigner { } + public PolylineDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List points, bool erasable) : base(root, drawMode, points, erasable) + { + + } + public PolylineDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -32,6 +37,28 @@ namespace AIStudio.Wpf.DiagramDesigner } + protected override void InitNew() + { + if (Points?.Count > 1) + { + var geometry = new PathGeometry(); + var figure = new PathFigure { StartPoint = Points[0] }; + geometry.Figures.Add(figure); + + foreach (var point in Points) + { + if (Points[0] == point) continue; + + LineSegment arc = new LineSegment(point, true) { IsSmoothJoin = true }; + geometry.Figures[0].Segments.Add(arc); + } + + Geometry = geometry; + IsFinish= true; + } + base.InitNew(); + } + public override bool OnMouseMove(IInputElement sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) @@ -61,7 +88,7 @@ namespace AIStudio.Wpf.DiagramDesigner geometry.Figures.Add(figure); } - LineSegment arc = new LineSegment(point, true);// { IsSmoothJoin = true }; + LineSegment arc = new LineSegment(point, true) { IsSmoothJoin = true }; geometry.Figures[0].Segments.Add(arc); Geometry = geometry; diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/RectangleDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/RectangleDrawingDesignerItemViewModel.cs index f70035a..a9398a2 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/RectangleDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/RectangleDrawingDesignerItemViewModel.cs @@ -20,6 +20,11 @@ namespace AIStudio.Wpf.DiagramDesigner { } + public RectangleDrawingDesignerItemViewModel(IDiagramViewModel root, List points, bool erasable) : base(root, DrawMode.ErasableRectangle, points, erasable) + { + + } + public RectangleDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -30,6 +35,15 @@ namespace AIStudio.Wpf.DiagramDesigner } + protected override void InitNewDrawing() + { + if (IsFinish) + { + Geometry = new RectangleGeometry(new Rect(Points[0], Points[1])); + } + base.InitNewDrawing(); + } + public override bool OnMouseMove(IInputElement sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/SharpDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/SharpDrawingDesignerItemViewModel.cs index f0608a3..5431431 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/SharpDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/SharpDrawingDesignerItemViewModel.cs @@ -21,6 +21,11 @@ namespace AIStudio.Wpf.DiagramDesigner { } + public SharpDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List points, bool erasable) : base(root, drawMode, points, erasable) + { + + } + public SharpDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -31,6 +36,24 @@ namespace AIStudio.Wpf.DiagramDesigner } + protected override void InitNew() + { + if (Points?.Count > 1) + { + var path = GetPath(); + PathGeometry pathGeometry = PathGeometry.CreateFromGeometry(Geometry.Parse(path)); + var transformGroup = new TransformGroup(); + double radiox = Math.Abs(Points[1].X - Points[0].X) / pathGeometry.Bounds.Width; + double radioy = Math.Abs(Points[1].Y - Points[0].Y) / pathGeometry.Bounds.Height; + transformGroup.Children.Add(new TranslateTransform((Points[0].X) / radiox - pathGeometry.Bounds.Left, (Points[0].Y) / radioy - pathGeometry.Bounds.Top)); + transformGroup.Children.Add(new ScaleTransform(radiox, radioy)); + pathGeometry.Transform = transformGroup; + Geometry = pathGeometry; + IsFinish = true; + } + base.InitNew(); + } + public override bool OnMouseMove(IInputElement sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) @@ -61,25 +84,7 @@ namespace AIStudio.Wpf.DiagramDesigner Points.Add(point); } - string path = ""; - switch (DrawMode) - { - case DrawMode.ErasableTriangle: path = "M50,0 L100,100 0,100 z"; break; - case DrawMode.ErasableRhombus: path = "M50,0 L100,100 50,200 0,100 z"; break; - case DrawMode.ErasableHexagon: path = "M50,0 150,0 200,100 150,200 50,200 0,100 Z"; break; - case DrawMode.ErasablePentagram: path = "M 12.8604,10.4421L 11,6.0593L 9.13781,10.4463L 4.39462,10.8613L 7.99148,13.988L 6.92042,18.6273L 11.0056,16.1727L 15.0868,18.625L 14.0147,13.9812L 17.6082,10.8575L 12.8604,10.4421 Z"; break; - case DrawMode.ErasableStarFour: path = "M12,6.7L13.45,10.55L17.3,12L13.45,13.45L12,17.3L10.55,13.45L6.7,12L10.55,10.55L12,6.7"; break; - case DrawMode.ErasableStarThree: path = "M12,9.5L13.2,13.5L16,16.5L12,15.6L7.9,16.5L10.7,13.5L12,9.5"; break; - case DrawMode.ErasableChat: path = "M171.008 964.398545c-43.938909 0-70.306909-11.729455-76.288-33.931636-2.746182-10.216727-2.746182-30.045091 28.16-48.011636 24.855273-14.475636 47.569455-36.189091 67.677091-64.651636-117.946182-86.481455-185.134545-212.689455-185.134545-349.556364 0-249.693091 227.188364-452.864 506.414545-452.864 279.435636 0 506.740364 203.147636 506.740364 452.864 0 249.739636-227.328 452.933818-506.717091 452.933818-49.664 0-99.281455-6.702545-147.618909-19.921455C296.471273 947.688727 220.695273 964.398545 171.008 964.398545z"; break; - case DrawMode.ErasableComment: path = "M928.078587 0h-838.26453C40.296574 0 0 40.296574 0 89.814057v598.760379c0 49.517483 40.296574 89.814057 89.814057 89.814057H119.752076v245.611507L400.450941 778.388493H928.078587c49.517483 0 89.814057-40.296574 89.814057-89.814057v-598.760379c0-49.517483-40.296574-89.814057-89.814057-89.814057z"; break; - case DrawMode.ErasableCloud: path = "M224.219429 836.644571h531.858285c140.562286 0 245.138286-106.715429 245.138286-239.140571 0-136.283429-111.433143-236.141714-256.731429-236.141714-53.558857-105.874286-152.978286-174.006857-276.845714-174.006857-161.133714 0-293.997714 125.988571-308.132571 285.44-77.586286 22.272-136.722286 89.984-136.722286 180.425142 0 101.12 73.709714 183.405714 201.435429 183.405715z"; break; - case DrawMode.ErasableArrowRight: path = "M11,16H3V8H11V2L21,12L11,22V16"; break; - case DrawMode.ErasableArrowLeft: path = "M13,22L3,12L13,2V8H21V16H13V22"; break; - case DrawMode.ErasableCheck: path = "M0,50 L30,100 100,0"; break; - case DrawMode.ErasableClose: path = "M0,0 L100,100 M0,100 L100,0"; break; - case DrawMode.ErasableHeart: path = "M510.68 883.15c-15.2 0-30.37-8.49-48.1-25.47-25.35-24.3-50.81-48.48-76.27-72.64-61.6-58.49-125.28-118.96-186.38-180.25-68.39-68.6-99.26-141.23-94.39-222.07 4.09-67.79 31.08-122.65 78.06-158.66 50.62-38.79 123.3-53.23 194.46-38.6 51.71 10.63 90 41.18 127.03 70.72l1.54 1.23c0.47 0.38 0.94 0.76 1.41 1.13 8.05-5.05 15.94-10.15 23.68-15.13 30.01-19.35 58.34-37.63 90.38-50.54 84.26-33.9 189.34-8.11 244.51 60.07 58.08 71.79 68.23 157.45 28.57 241.22-20 42.22-50.67 84.68-91.16 126.22-57.91 59.41-118.94 117.32-177.96 173.33-22.3 21.16-44.59 42.32-66.77 63.59-17.98 17.22-33.31 25.85-48.61 25.85z"; break; - } - + var path = GetPath(); PathGeometry pathGeometry = PathGeometry.CreateFromGeometry(Geometry.Parse(path)); var transformGroup = new TransformGroup(); double radiox = Math.Abs(point.X - Points[0].X) / pathGeometry.Bounds.Width; @@ -108,5 +113,29 @@ namespace AIStudio.Wpf.DiagramDesigner { return base.OnMouseUp(sender, e); } + + private string GetPath() + { + string path = ""; + switch (DrawMode) + { + case DrawMode.ErasableTriangle: path = "M50,0 L100,100 0,100 z"; break; + case DrawMode.ErasableRhombus: path = "M50,0 L100,100 50,200 0,100 z"; break; + case DrawMode.ErasableHexagon: path = "M50,0 150,0 200,100 150,200 50,200 0,100 Z"; break; + case DrawMode.ErasablePentagram: path = "M 12.8604,10.4421L 11,6.0593L 9.13781,10.4463L 4.39462,10.8613L 7.99148,13.988L 6.92042,18.6273L 11.0056,16.1727L 15.0868,18.625L 14.0147,13.9812L 17.6082,10.8575L 12.8604,10.4421 Z"; break; + case DrawMode.ErasableStarFour: path = "M12,6.7L13.45,10.55L17.3,12L13.45,13.45L12,17.3L10.55,13.45L6.7,12L10.55,10.55L12,6.7"; break; + case DrawMode.ErasableStarThree: path = "M12,9.5L13.2,13.5L16,16.5L12,15.6L7.9,16.5L10.7,13.5L12,9.5"; break; + case DrawMode.ErasableChat: path = "M171.008 964.398545c-43.938909 0-70.306909-11.729455-76.288-33.931636-2.746182-10.216727-2.746182-30.045091 28.16-48.011636 24.855273-14.475636 47.569455-36.189091 67.677091-64.651636-117.946182-86.481455-185.134545-212.689455-185.134545-349.556364 0-249.693091 227.188364-452.864 506.414545-452.864 279.435636 0 506.740364 203.147636 506.740364 452.864 0 249.739636-227.328 452.933818-506.717091 452.933818-49.664 0-99.281455-6.702545-147.618909-19.921455C296.471273 947.688727 220.695273 964.398545 171.008 964.398545z"; break; + case DrawMode.ErasableComment: path = "M928.078587 0h-838.26453C40.296574 0 0 40.296574 0 89.814057v598.760379c0 49.517483 40.296574 89.814057 89.814057 89.814057H119.752076v245.611507L400.450941 778.388493H928.078587c49.517483 0 89.814057-40.296574 89.814057-89.814057v-598.760379c0-49.517483-40.296574-89.814057-89.814057-89.814057z"; break; + case DrawMode.ErasableCloud: path = "M224.219429 836.644571h531.858285c140.562286 0 245.138286-106.715429 245.138286-239.140571 0-136.283429-111.433143-236.141714-256.731429-236.141714-53.558857-105.874286-152.978286-174.006857-276.845714-174.006857-161.133714 0-293.997714 125.988571-308.132571 285.44-77.586286 22.272-136.722286 89.984-136.722286 180.425142 0 101.12 73.709714 183.405714 201.435429 183.405715z"; break; + case DrawMode.ErasableArrowRight: path = "M11,16H3V8H11V2L21,12L11,22V16"; break; + case DrawMode.ErasableArrowLeft: path = "M13,22L3,12L13,2V8H21V16H13V22"; break; + case DrawMode.ErasableCheck: path = "M0,50 L30,100 100,0"; break; + case DrawMode.ErasableClose: path = "M0,0 L100,100 M0,100 L100,0"; break; + case DrawMode.ErasableHeart: path = "M510.68 883.15c-15.2 0-30.37-8.49-48.1-25.47-25.35-24.3-50.81-48.48-76.27-72.64-61.6-58.49-125.28-118.96-186.38-180.25-68.39-68.6-99.26-141.23-94.39-222.07 4.09-67.79 31.08-122.65 78.06-158.66 50.62-38.79 123.3-53.23 194.46-38.6 51.71 10.63 90 41.18 127.03 70.72l1.54 1.23c0.47 0.38 0.94 0.76 1.41 1.13 8.05-5.05 15.94-10.15 23.68-15.13 30.01-19.35 58.34-37.63 90.38-50.54 84.26-33.9 189.34-8.11 244.51 60.07 58.08 71.79 68.23 157.45 28.57 241.22-20 42.22-50.67 84.68-91.16 126.22-57.91 59.41-118.94 117.32-177.96 173.33-22.3 21.16-44.59 42.32-66.77 63.59-17.98 17.22-33.31 25.85-48.61 25.85z"; break; + } + + return path; + } } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/TextDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/TextDrawingDesignerItemViewModel.cs index 2050194..cfb483b 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/TextDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/TextDrawingDesignerItemViewModel.cs @@ -17,6 +17,12 @@ namespace AIStudio.Wpf.DiagramDesigner AddTextBox(); } + public TextDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, string text, bool erasable) : base(root, DrawMode.Text, new List { startPoint }, erasable) + { + Text = text; + InitNewDrawing(); + } + public TextDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) { @@ -27,26 +33,49 @@ namespace AIStudio.Wpf.DiagramDesigner } + protected override void Init(IDiagramViewModel root, bool initNew) + { + base.Init(root, initNew); + + CustomText = true; + } + + protected override void InitNewDrawing() + { + if (IsFinish) + { + if (!string.IsNullOrEmpty(Text)) + { + IsLoaded = false; + var typeface = new Typeface(new FontFamily(FontViewModel.FontFamily), FontViewModel.FontStyle, FontViewModel.FontWeight, FontViewModel.FontStretch); + var formattedText = new FormattedText(Text, + System.Globalization.CultureInfo.InvariantCulture, + FlowDirection.LeftToRight, + typeface, + FontViewModel.FontSize, + new SolidColorBrush(FontViewModel.FontColor)); + + Geometry = formattedText.BuildGeometry(new Point()).GetFlattenedPathGeometry(); + UpdateLocation(); + IsLoaded = true; + } + this.SelectedDisable = Erasable; + } + } + public override bool OnMouseMove(IInputElement sender, MouseEventArgs e) { return true; } public override bool OnMouseDown(IInputElement sender, MouseButtonEventArgs e) - { + { return true; } public override bool OnMouseUp(IInputElement sender, MouseButtonEventArgs e) - { - return base.OnMouseUp(sender, e); - } - - protected override void Init(IDiagramViewModel root, bool initNew) { - base.Init(root, initNew); - - CustomText = true; + return base.OnMouseUp(sender, e); } TextDesignerItemViewModel _previewTextDesign; @@ -65,21 +94,22 @@ namespace AIStudio.Wpf.DiagramDesigner private void _previewTextDesign_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { - if (e.PropertyName== nameof(IsEditing) && _previewTextDesign.IsEditing == false) + if (e.PropertyName == nameof(IsEditing) && _previewTextDesign.IsEditing == false) { _previewTextDesign.PropertyChanged -= _previewTextDesign_PropertyChanged; Root?.Remove(_previewTextDesign); - - Text = _previewTextDesign?.Text; + + Text = _previewTextDesign?.Text; if (!string.IsNullOrEmpty(Text)) - { + { + IsLoaded = false; var typeface = new Typeface(new FontFamily(FontViewModel.FontFamily), FontViewModel.FontStyle, FontViewModel.FontWeight, FontViewModel.FontStretch); - var formattedText = new FormattedText(_previewTextDesign?.Text, + var formattedText = new FormattedText(Text, System.Globalization.CultureInfo.InvariantCulture, FlowDirection.LeftToRight, - typeface, - FontViewModel.FontSize, - new SolidColorBrush(FontViewModel.FontColor)); + typeface, + FontViewModel.FontSize, + new SolidColorBrush(FontViewModel.FontColor)); Geometry = formattedText.BuildGeometry(new Point()).GetFlattenedPathGeometry(); IsFinish = true; @@ -89,8 +119,17 @@ namespace AIStudio.Wpf.DiagramDesigner this.Left = _previewTextDesign.Left + 2 + Geometry.Bounds.Left; this.Top = _previewTextDesign.Top + 2 + Geometry.Bounds.Top; this.Root?.AddItemCommand.Execute(this); - } + IsLoaded = true; + } } } + + protected override void UpdateLocation() + { + ItemWidth = Geometry.Bounds.Width + 4; + ItemHeight = Geometry.Bounds.Height + 4; + Left = Points[0].X; + Top = Points[0].Y; + } } } diff --git a/Extensions/AIStudio.Wpf.SFC/AIStudio.Wpf.SFC_0ml2nkmq_wpftmp.csproj b/Extensions/AIStudio.Wpf.SFC/AIStudio.Wpf.SFC_0ml2nkmq_wpftmp.csproj new file mode 100644 index 0000000..1570ecf --- /dev/null +++ b/Extensions/AIStudio.Wpf.SFC/AIStudio.Wpf.SFC_0ml2nkmq_wpftmp.csproj @@ -0,0 +1,235 @@ + + + AIStudio.Wpf.SFC + obj\Debug\ + obj\ + F:\aistudio.-wpf.-diagram\Extensions\AIStudio.Wpf.SFC\obj\ + <_TargetAssemblyProjectName>AIStudio.Wpf.SFC + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/AIStudio.Wpf.SFC/AIStudio.Wpf.SFC_gujzkzga_wpftmp.csproj b/Extensions/AIStudio.Wpf.SFC/AIStudio.Wpf.SFC_gujzkzga_wpftmp.csproj new file mode 100644 index 0000000..fa98620 --- /dev/null +++ b/Extensions/AIStudio.Wpf.SFC/AIStudio.Wpf.SFC_gujzkzga_wpftmp.csproj @@ -0,0 +1,236 @@ + + + AIStudio.Wpf.SFC + obj\Debug\ + obj\ + F:\aistudio.-wpf.-diagram\Extensions\AIStudio.Wpf.SFC\obj\ + <_TargetAssemblyProjectName>AIStudio.Wpf.SFC + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file