From 64ea56f01e985cd9c3d0e1a004f8adfb8a53b338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=89=BE=E7=AB=B9?= Date: Thu, 26 Jan 2023 22:25:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A7=E9=83=A8=E5=88=86=E5=AE=8C=E6=88=90?= =?UTF-8?q?=EF=BC=8C=E8=BF=98=E6=9C=89=E5=86=99=E8=A6=81=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AIStudio.Wpf.DiagramDesigner.Demo/A.ico | Bin 0 -> 16958 bytes .../AIStudio.Wpf.DiagramDesigner.Demo.csproj | 13 +++++ AIStudio.Wpf.DiagramDesigner.Demo/App.xaml | 4 ++ .../MainWindow.xaml | 11 ++-- .../MainWindow.xaml.cs | 3 +- .../ViewModels/Base/BaseViewModel.cs | 10 ++++ .../ViewModels/CustomNodeViewModel.cs | 1 + .../Customization/ThickLinkViewModel.cs | 47 ++++++++++++++++++ .../ViewModels/Groups/GroupingViewModel.cs | 41 +++++++++++++++ .../ViewModels/Links/LabelsViewModel.cs | 2 + .../ViewModels/Links/MarkersViewModel.cs | 2 + .../Links/PathGeneratorsViewModel.cs | 2 + .../ViewModels/Links/RoutersViewModel.cs | 2 + .../ViewModels/Links/SnappingViewModel.cs | 4 +- .../ViewModels/Links/VerticesViewModel.cs | 47 ++++++++++++++++++ .../ViewModels/LockedViewModel.cs | 1 + .../ViewModels/Nodes/SvgViewModel.cs | 42 ++++++++++++++++ .../ViewModels/PerformanceViewModel.cs | 2 + .../ReconnectLinksToClosestPortsViewModel.cs | 2 + .../ViewModels/SimpleViewModel.cs | 2 + .../ViewModels/SnapToGridViewModel.cs | 1 + .../ViewModels/ZoomViewModel.cs | 1 + .../Views/Customization/ThickLinkView.xaml | 16 ++++++ .../Views/Customization/ThickLinkView.xaml.cs | 26 ++++++++++ .../Views/Groups/GroupingView.xaml | 16 ++++++ .../Views/Groups/GroupingView.xaml.cs | 26 ++++++++++ .../Views/Links/VerticesView.xaml | 16 ++++++ .../Views/Links/VerticesView.xaml.cs | 26 ++++++++++ .../Views/Nodes/SvgView.xaml | 23 +++++++++ .../Views/Nodes/SvgView.xaml.cs | 26 ++++++++++ .../Controls/DesignerCanvas.cs | 22 ++++++-- .../DesignerItemsControlItemStyleSelector.cs | 1 - .../AdditionViewModel/DrawModeViewModel.cs | 26 ++++++++++ .../Interface/IDrawModeViewModel.cs | 9 ++++ .../BaseViewModel/ConnectionViewModel.cs | 19 +++++-- .../BaseViewModel/DiagramViewModel.cs | 42 ++++------------ .../GroupDesignerItemViewModel.cs | 13 ++++- .../ViewModels/IDiagramViewModel.cs | 8 --- 38 files changed, 499 insertions(+), 56 deletions(-) create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/A.ico create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/ThickLinkViewModel.cs create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Groups/GroupingViewModel.cs create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/VerticesViewModel.cs create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/SvgViewModel.cs create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml.cs create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml.cs create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml.cs create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml create mode 100644 AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml.cs diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/A.ico b/AIStudio.Wpf.DiagramDesigner.Demo/A.ico new file mode 100644 index 0000000000000000000000000000000000000000..b02b5887438acbad79a0a47e5cb5cf8ebb48af35 GIT binary patch literal 16958 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 literal 0 HcmV?d00001 diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/AIStudio.Wpf.DiagramDesigner.Demo.csproj b/AIStudio.Wpf.DiagramDesigner.Demo/AIStudio.Wpf.DiagramDesigner.Demo.csproj index ade4264..e51ccd7 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/AIStudio.Wpf.DiagramDesigner.Demo.csproj +++ b/AIStudio.Wpf.DiagramDesigner.Demo/AIStudio.Wpf.DiagramDesigner.Demo.csproj @@ -6,6 +6,11 @@ + + + + + @@ -14,4 +19,12 @@ + + + + + + + + diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/App.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/App.xaml index 53a6e84..b4d2d46 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/App.xaml +++ b/AIStudio.Wpf.DiagramDesigner.Demo/App.xaml @@ -60,6 +60,10 @@ + + + + diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml index 7423cc4..9ec7384 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml +++ b/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml @@ -1,11 +1,14 @@ - + Title="AIStudio.Wpf.DiagramDesigner.Demo" + Icon="A.ico" + Style="{StaticResource AIStudio.Styles.WindowBase}" + Height="450" Width="800"> @@ -20,4 +23,4 @@ Grid.Column="1" Margin="0" /> - + diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml.cs index 3bded18..e50c90f 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml.cs @@ -12,6 +12,7 @@ using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; +using AIStudio.Wpf.Controls; using AIStudio.Wpf.DiagramDesigner.Demo.ViewModels; namespace AIStudio.Wpf.DiagramDesigner.Demo @@ -19,7 +20,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo /// /// Interaction logic for MainWindow.xaml /// - public partial class MainWindow : Window + public partial class MainWindow : WindowBase { #region Identity private static IDictionary _viewDic; diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Base/BaseViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Base/BaseViewModel.cs index 4299d1c..01574ea 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Base/BaseViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Base/BaseViewModel.cs @@ -28,5 +28,15 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels { get; set; } + + public int Index + { + get; set; + } + + public int ParentIndex + { + get; set; + } } } diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/CustomNodeViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/CustomNodeViewModel.cs index 4922dc9..c136b60 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/CustomNodeViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/CustomNodeViewModel.cs @@ -36,6 +36,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels ConnectionViewModel connector2 = new ConnectionViewModel(node2.BottomConnector, node3.BottomConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); DiagramViewModel.DirectAddItemCommand.Execute(connector2); + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); } } diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/ThickLinkViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/ThickLinkViewModel.cs new file mode 100644 index 0000000..40c72fc --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/ThickLinkViewModel.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Text; +using System.Windows; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels +{ + class ThickLinkViewModel : BaseViewModel + { + public ThickLinkViewModel() + { + Title = "Custom link"; + Info = "Creating your own custom links is very easy!"; + + _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; + + DiagramViewModel = new DiagramViewModel(); + DiagramViewModel.PageSizeType = PageSizeType.Custom; + DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; + DiagramViewModel.DirectAddItemCommand.Execute(node1); + + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" }; + DiagramViewModel.DirectAddItemCommand.Execute(node2); + + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" }; + DiagramViewModel.DirectAddItemCommand.Execute(node3); + + ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + connector1.ColorViewModel.LineWidth = 6; + connector1.ColorViewModel.LineColor.BrushType = BrushType.LinearGradientBrush; + connector1.ColorViewModel.LineColor.GradientStop = new ObservableCollection(); + connector1.ColorViewModel.LineColor.GradientStop.Add(new GradientStop(System.Windows.Media.Colors.Red, 0)); + connector1.ColorViewModel.LineColor.GradientStop.Add(new GradientStop(System.Windows.Media.Colors.Gray, 1)); + DiagramViewModel.DirectAddItemCommand.Execute(connector1); + + ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + connector2.ColorViewModel.LineWidth = 6; + connector2.ColorViewModel.LineColor.Color = System.Windows.Media.Colors.Blue; + DiagramViewModel.DirectAddItemCommand.Execute(connector2); + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Groups/GroupingViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Groups/GroupingViewModel.cs new file mode 100644 index 0000000..cebd8cb --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Groups/GroupingViewModel.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels +{ + class GroupingViewModel : BaseViewModel + { + public GroupingViewModel() + { + Title = "Simple"; + Info = "A simple example of AIStudio.Wpf.DiagramDesigner."; + + _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; + + DiagramViewModel = new DiagramViewModel(); + DiagramViewModel.PageSizeType = PageSizeType.Custom; + DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; + DiagramViewModel.DirectAddItemCommand.Execute(node1); + + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" }; + DiagramViewModel.DirectAddItemCommand.Execute(node2); + + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" }; + DiagramViewModel.DirectAddItemCommand.Execute(node3); + + ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + DiagramViewModel.DirectAddItemCommand.Execute(connector1); + + ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + DiagramViewModel.DirectAddItemCommand.Execute(connector2); + + DiagramViewModel.GroupCommand.Execute(new List { node1, node2 }); + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/LabelsViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/LabelsViewModel.cs index 9dead39..546ad16 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/LabelsViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/LabelsViewModel.cs @@ -61,6 +61,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels connector1.AddLabel("(0,-20)", 50, new Point(0, -20)); connector1.AddLabel("(0,20)", -50, new Point(0, 20)); DiagramViewModel.DirectAddItemCommand.Execute(connector1); + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); } } } diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/MarkersViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/MarkersViewModel.cs index 6efab81..ab83afd 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/MarkersViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/MarkersViewModel.cs @@ -78,6 +78,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels connector1.AddLabel("Custom"); DiagramViewModel.DirectAddItemCommand.Execute(connector1); + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); + } } } diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/PathGeneratorsViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/PathGeneratorsViewModel.cs index 22a7e5e..26f281f 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/PathGeneratorsViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/PathGeneratorsViewModel.cs @@ -35,6 +35,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); connector2.AddLabel("Smooth"); DiagramViewModel.DirectAddItemCommand.Execute(connector2); + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); } } } diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/RoutersViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/RoutersViewModel.cs index 406bb2d..e3570b8 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/RoutersViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/RoutersViewModel.cs @@ -35,6 +35,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); connector2.AddLabel("Orthogonal"); DiagramViewModel.DirectAddItemCommand.Execute(connector2); + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); } } } \ No newline at end of file diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/SnappingViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/SnappingViewModel.cs index 4962f2b..5edf68a 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/SnappingViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/SnappingViewModel.cs @@ -17,7 +17,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels DiagramViewModel = new DiagramViewModel(); DiagramViewModel.PageSizeType = PageSizeType.Custom; DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); - DiagramViewModel.EnableSnapping = true; + DiagramViewModel.DrawModeViewModel = new DrawModeViewModel() { EnableSnapping = true }; DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); @@ -27,6 +27,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" }; DiagramViewModel.DirectAddItemCommand.Execute(node3); + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); } } } diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/VerticesViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/VerticesViewModel.cs new file mode 100644 index 0000000..7243acd --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/VerticesViewModel.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels +{ + class VerticesViewModel : BaseViewModel + { + public VerticesViewModel() + { + Title = "Link Vertices"; + Info = "Click on a link to create a vertex. Double click on a vertex to delete it. " + + "You can drag the vertices around."; + + _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; + + DiagramViewModel = new DiagramViewModel(); + DiagramViewModel.PageSizeType = PageSizeType.Custom; + DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 80, Text = "1" }; + DiagramViewModel.DirectAddItemCommand.Execute(node1); + + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 200, Top = 350, Text = "2" }; + DiagramViewModel.DirectAddItemCommand.Execute(node2); + + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 400, Top = 100, Text = "3" }; + DiagramViewModel.DirectAddItemCommand.Execute(node3); + + ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterNormal); + connector1.AddLabel("Content"); + connector1.AddVertex(new Point(221, 112.5)); + connector1.AddVertex(new Point(111, 291)); + DiagramViewModel.DirectAddItemCommand.Execute(connector1); + + ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + connector2.AddLabel("Content"); + connector2.AddVertex(new Point(400, 324)); + connector2.AddVertex(new Point(326, 180)); + DiagramViewModel.DirectAddItemCommand.Execute(connector2); + + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/LockedViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/LockedViewModel.cs index 39dc56f..e139c22 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/LockedViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/LockedViewModel.cs @@ -48,6 +48,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels connector2.IsReadOnly = true; DiagramViewModel.DirectAddItemCommand.Execute(connector2); + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); } } } diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/SvgViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/SvgViewModel.cs new file mode 100644 index 0000000..a8c55b8 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/SvgViewModel.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels +{ + class SvgViewModel : BaseViewModel + { + public SvgViewModel() + { + Title = "Custom node"; + Info = "Creating your own custom design is very easy!"; + + //_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; + + DiagramViewModel = new DiagramViewModel(); + DiagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center; + DiagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center; + DiagramViewModel.PageSizeType = PageSizeType.Custom; + DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); + + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" }; + DiagramViewModel.DirectAddItemCommand.Execute(node1); + + PathItemViewModel node2 = new PathItemViewModel() { Left = 300, Top = 300, Icon = "M 0 -50 L 50 -50 L 50 -10 A 1 1 0 0 0 50 10 L 50 50 L 0 50 L 0 10 A 1 1 0 0 0 0 -10 Z" }; + DiagramViewModel.DirectAddItemCommand.Execute(node2); + + PathItemViewModel node3 = new PathItemViewModel() { Left = 300, Top = 50, Icon = "M 0 -50 L 50 -50 L 50 -10 A 1 1 0 0 0 50 10 L 50 50 L 0 50 L 0 10 A 1 1 0 0 0 0 -10 Z" }; + DiagramViewModel.DirectAddItemCommand.Execute(node3); + + ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.TopConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal); + DiagramViewModel.DirectAddItemCommand.Execute(connector1); + + ConnectionViewModel connector2 = new ConnectionViewModel(node2.BottomConnector, node3.BottomConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); + DiagramViewModel.DirectAddItemCommand.Execute(connector2); + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PerformanceViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PerformanceViewModel.cs index 0a0d827..33e8914 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PerformanceViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PerformanceViewModel.cs @@ -31,6 +31,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels DiagramViewModel.DirectAddItemCommand.Execute(connector1); } } + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); } } } diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ReconnectLinksToClosestPortsViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ReconnectLinksToClosestPortsViewModel.cs index ffffc8d..c560025 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ReconnectLinksToClosestPortsViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ReconnectLinksToClosestPortsViewModel.cs @@ -35,6 +35,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels DiagramViewModel.DirectAddItemCommand.Execute(connector2); ReconnectLinksCommand = new SimpleCommand(ReconnectLinks); + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); } public SimpleCommand ReconnectLinksCommand diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs index 87d9e83..e79cc18 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs @@ -32,6 +32,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); DiagramViewModel.DirectAddItemCommand.Execute(connector2); + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); } } } diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SnapToGridViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SnapToGridViewModel.cs index 6ddbcc7..f7ab25d 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SnapToGridViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SnapToGridViewModel.cs @@ -35,6 +35,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); DiagramViewModel.DirectAddItemCommand.Execute(connector2); + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); } } } diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs index d5854bb..73f5c97 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs @@ -33,6 +33,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal); DiagramViewModel.DirectAddItemCommand.Execute(connector2); + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); } } } diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml new file mode 100644 index 0000000..1c7f390 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml.cs new file mode 100644 index 0000000..a4f3320 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.Views +{ + /// + /// ThickLinkView.xaml 的交互逻辑 + /// + public partial class ThickLinkView : UserControl + { + public ThickLinkView() + { + InitializeComponent(); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml new file mode 100644 index 0000000..8b37306 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml.cs new file mode 100644 index 0000000..8bd69e0 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.Views +{ + /// + /// GroupingView.xaml 的交互逻辑 + /// + public partial class GroupingView : UserControl + { + public GroupingView() + { + InitializeComponent(); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml new file mode 100644 index 0000000..3ff2e5b --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml.cs new file mode 100644 index 0000000..e278f87 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.Views +{ + /// + /// VerticesView.xaml 的交互逻辑 + /// + public partial class VerticesView : UserControl + { + public VerticesView() + { + InitializeComponent(); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml new file mode 100644 index 0000000..e673379 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml.cs new file mode 100644 index 0000000..e1c991c --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace AIStudio.Wpf.DiagramDesigner.Demo.Views +{ + /// + /// SvgView.xaml 的交互逻辑 + /// + public partial class SvgView : UserControl + { + public SvgView() + { + InitializeComponent(); + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs b/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs index e5c9ac0..a0efb74 100644 --- a/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs +++ b/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs @@ -41,7 +41,7 @@ namespace AIStudio.Wpf.DiagramDesigner { get { - if (_viewModel.DrawModeViewModel?.LineDrawMode != null) + if (_viewModel.DrawModeViewModel != null) { return _viewModel.DrawModeViewModel.LineDrawMode; } @@ -55,7 +55,7 @@ namespace AIStudio.Wpf.DiagramDesigner { get { - if (_viewModel.DrawModeViewModel?.LineRouterMode != null) + if (_viewModel.DrawModeViewModel != null) { return _viewModel.DrawModeViewModel.LineRouterMode; } @@ -70,7 +70,14 @@ namespace AIStudio.Wpf.DiagramDesigner { get { - return _viewModel.EnableSnapping; + if (_viewModel.DrawModeViewModel != null) + { + return _viewModel.DrawModeViewModel.EnableSnapping; + } + else + { + return _service.DrawModeViewModel.EnableSnapping; + } } } @@ -78,7 +85,14 @@ namespace AIStudio.Wpf.DiagramDesigner { get { - return _viewModel.SnappingRadius; + if (_viewModel.DrawModeViewModel != null) + { + return _viewModel.DrawModeViewModel.SnappingRadius; + } + else + { + return _service.DrawModeViewModel.SnappingRadius; + } } } diff --git a/AIStudio.Wpf.DiagramDesigner/StyleSelectors/DesignerItemsControlItemStyleSelector.cs b/AIStudio.Wpf.DiagramDesigner/StyleSelectors/DesignerItemsControlItemStyleSelector.cs index c19f7ec..e922031 100644 --- a/AIStudio.Wpf.DiagramDesigner/StyleSelectors/DesignerItemsControlItemStyleSelector.cs +++ b/AIStudio.Wpf.DiagramDesigner/StyleSelectors/DesignerItemsControlItemStyleSelector.cs @@ -49,7 +49,6 @@ namespace AIStudio.Wpf.DiagramDesigner if (item is DesignerItemViewModelBase) { - return (Style)itemsControl.FindResource("designerItemStyle"); } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/DrawModeViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/DrawModeViewModel.cs index 501dc77..48a3601 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/DrawModeViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/DrawModeViewModel.cs @@ -186,5 +186,31 @@ namespace AIStudio.Wpf.DiagramDesigner } } + private bool _enableSnapping; + public bool EnableSnapping + { + get + { + return _enableSnapping; + } + set + { + SetProperty(ref _enableSnapping, value); + } + } + + private double _snappingRadius = 50; + public double SnappingRadius + { + get + { + return _snappingRadius; + } + set + { + SetProperty(ref _snappingRadius, value); + } + } + } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/Interface/IDrawModeViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/Interface/IDrawModeViewModel.cs index abf5772..acfbf89 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/Interface/IDrawModeViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/Interface/IDrawModeViewModel.cs @@ -25,5 +25,14 @@ namespace AIStudio.Wpf.DiagramDesigner { get; set; } + + bool EnableSnapping + { + get; set; + } + double SnappingRadius + { + get; set; + } } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs index 76137f5..abcbc82 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs @@ -53,7 +53,7 @@ namespace AIStudio.Wpf.DiagramDesigner protected virtual void Init(FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo) { this.Root = sourceConnectorInfo.DataItem.Root; - + this.ColorViewModel.FillColor.Color = Colors.Red; if (sinkConnectorInfo is FullyCreatedConnectorInfo sink && sink.DataItem.ShowArrow == false) { @@ -715,10 +715,7 @@ namespace AIStudio.Wpf.DiagramDesigner MouseButtonEventArgs mosueArg = ((EventToCommandArgs)parameter).EventArgs as MouseButtonEventArgs; var position = mosueArg.GetPosition(((EventToCommandArgs)parameter).Sender as IInputElement); - var vertice = new ConnectorVertexModel(this, new PointBase(position.X, position.Y)); - vertice.PropertyChanged += new WeakINPCEventHandler(ConnectorViewModel_PropertyChanged).Handler; - Vertices.Add(vertice); - UpdatePathGeneratorResult(); + AddVertex(position, false); if (!((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)) { @@ -726,6 +723,18 @@ namespace AIStudio.Wpf.DiagramDesigner } } + public void AddVertex(PointBase pointBase, bool absolute = true) + { + if (absolute) + { + pointBase = new PointBase(pointBase.X - Area.Left, pointBase.Y - Area.Top); + } + var vertice = new ConnectorVertexModel(this, pointBase); + vertice.PropertyChanged += new WeakINPCEventHandler(ConnectorViewModel_PropertyChanged).Handler; + Vertices.Add(vertice); + UpdatePathGeneratorResult(); + } + protected override void ExecuteEditCommand(object param) { AddLabel(); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs index daf8d92..12bdf82 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs @@ -364,33 +364,7 @@ namespace AIStudio.Wpf.DiagramDesigner { SetProperty(ref _cellVerticalAlignment, value); } - } - - private bool _enableSnapping; - public bool EnableSnapping - { - get - { - return _enableSnapping; - } - set - { - SetProperty(ref _enableSnapping, value); - } - } - - private double _snappingRadius = 50; - public double SnappingRadius - { - get - { - return _snappingRadius; - } - set - { - SetProperty(ref _snappingRadius, value); - } - } + } private bool _isEditName; [Browsable(false)] @@ -786,7 +760,7 @@ namespace AIStudio.Wpf.DiagramDesigner ClearSelectedItems(); Add(ite); } - else if (parameter is List items) + else if (parameter is IEnumerable items) { if (items.Select(p => AddVerify(p)).Any() != true) return; @@ -1714,9 +1688,15 @@ namespace AIStudio.Wpf.DiagramDesigner #region 分组 private void ExecuteGroupCommand(object parameter) { - var items = from item in SelectedItems.OfType() - where item.ParentId == Guid.Empty - select item; + List items; + if (parameter is IEnumerable para) + { + items = para.ToList(); + } + else + { + items = SelectedItems.OfType().Where(p => p.ParentId == Guid.Empty).ToList(); + } RectangleBase rect = GetBoundingRectangle(items); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs index 2d2e483..a0b3fcf 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs @@ -11,10 +11,21 @@ namespace AIStudio.Wpf.DiagramDesigner { public GroupDesignerItemViewModel() : base() { - this.ClearConnectors(); + + } + + protected override void Init() + { + base.Init(); + this.IsHitTestVisible = false; } + protected override void InitConnector() + { + + } + protected override void ExecuteEditCommand(object param) { } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs index a594274..fc613a9 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs @@ -228,14 +228,6 @@ namespace AIStudio.Wpf.DiagramDesigner { get; set; } - bool EnableSnapping - { - get; set; - } - double SnappingRadius - { - get; set; - } Size GridMarginSize { get; set;