From 0487857d7b16c6719008e433e983d47bebf987c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=89=BE=E7=AB=B9?= Date: Sun, 4 Dec 2022 23:07:20 +0800 Subject: [PATCH] Flowchart --- AIStudio.Wpf.DiagramApp/App.xaml | 6 +- .../ViewModels/FlowchartViewModel.cs | 18 +- .../ViewModels/ToolBoxViewModel.cs | 13 +- .../MainWindow.xaml | 47 +- .../ViewModels/MainWindowViewModel.cs | 86 +--- .../ViewModels/TabItem1ViewModel.cs | 91 ++++ .../ViewModels/TabItem2ViewModel.cs | 128 ++++++ .../AttachedProperties/DragAndDropProps.cs | 12 +- .../Controls/DesignerCanvas.cs | 42 +- .../Controls/DragThumb.cs | 6 +- .../Helpers/EnumExtension.cs | 11 + .../Helpers/ScreenHelper.cs | 48 +++ .../Helpers/ToolBoxData.cs | 7 +- .../Models/SelectableDesignerItemBase.cs | 258 ++++++++--- .../SelectableDesignerItemViewModelBase.cs | 6 +- .../ViewModels/DiagramViewModel.cs | 267 +++++++----- .../ViewModels/IDiagramViewModel.cs | 7 + .../Controls/MultiSelectComboBox.xaml.cs | 2 +- .../Controls/FlowchartEditor.xaml | 2 +- .../Controls/FlowchartEditor.xaml.cs | 135 +++--- AIStudio.Wpf.Flowchart/Models/DiagramData.cs | 408 ++++++++++++++++++ .../Models/DiagramDataConverter.cs | 103 +++++ .../Models/DiagramDataExtention.cs | 244 +++++++++++ .../Models/FlowchartModel.cs | 29 -- .../Models/FlowchartToolBoxData.cs | 3 +- AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs | 9 +- .../ViewModels/MiddleFlowNode.cs | 1 + .../ViewModels/ToolBoxViewModel.cs | 15 +- .../LogicalGateItemViewModel.xaml | 0 .../{ViewModels => Themes}/SFCNode.xaml | 0 30 files changed, 1621 insertions(+), 383 deletions(-) create mode 100644 AIStudio.Wpf.DiagramDesigner.Test/ViewModels/TabItem1ViewModel.cs create mode 100644 AIStudio.Wpf.DiagramDesigner.Test/ViewModels/TabItem2ViewModel.cs create mode 100644 AIStudio.Wpf.DiagramDesigner/Helpers/ScreenHelper.cs create mode 100644 AIStudio.Wpf.Flowchart/Models/DiagramData.cs create mode 100644 AIStudio.Wpf.Flowchart/Models/DiagramDataConverter.cs create mode 100644 AIStudio.Wpf.Flowchart/Models/DiagramDataExtention.cs delete mode 100644 AIStudio.Wpf.Flowchart/Models/FlowchartModel.cs rename AIStudio.Wpf.Logical/{ViewModels => Themes}/LogicalGateItemViewModel.xaml (100%) rename AIStudio.Wpf.SFC/{ViewModels => Themes}/SFCNode.xaml (100%) diff --git a/AIStudio.Wpf.DiagramApp/App.xaml b/AIStudio.Wpf.DiagramApp/App.xaml index 84b1410..2f3f94d 100644 --- a/AIStudio.Wpf.DiagramApp/App.xaml +++ b/AIStudio.Wpf.DiagramApp/App.xaml @@ -9,9 +9,9 @@ - - - + + + diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs index 94e1e3b..74c3dd7 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs @@ -43,31 +43,31 @@ namespace AIStudio.Wpf.Flowchart { base.Init(); - DesignerItemViewModelBase start = new StartFlowNode() { Left = 100, Top = 0, Color = Colors.Yellow.ToString() }; + DesignerItemViewModelBase start = new StartFlowNode() { Left = 100, Top = 0, ItemWidth = 80, ItemHeight = 40, Color = Colors.Yellow.ToString() }; DiagramViewModel.DirectAddItemCommand.Execute(start); - DesignerItemViewModelBase middle1 = new MiddleFlowNode() { Left = 100, Top = 100, Color = Colors.Yellow.ToString(), Text = "主管审批", UserIds= new List { "操作员1", "操作员2" }, ActType = "or" }; + DesignerItemViewModelBase middle1 = new MiddleFlowNode() { Left = 100, Top = 100, ItemWidth = 80, ItemHeight = 40, Color = Colors.Yellow.ToString(), Text = "主管审批", UserIds= new List { "操作员1", "操作员2" }, ActType = "or" }; DiagramViewModel.DirectAddItemCommand.Execute(middle1); - DesignerItemViewModelBase decide = new DecideFlowNode() { Left = 100, Top = 200, Color = Colors.Yellow.ToString(), Text = "5" }; + DesignerItemViewModelBase decide = new DecideFlowNode() { Left = 100, Top = 200, ItemWidth = 80, ItemHeight = 40, Color = Colors.Yellow.ToString(), Text = "5" }; DiagramViewModel.DirectAddItemCommand.Execute(decide); - DesignerItemViewModelBase middle2 = new MiddleFlowNode() { Left = 200, Top = 300, Color = Colors.Yellow.ToString(), Text = "分管领导", UserIds = new List { "操作员1", "操作员2" }, ActType = "and" }; + DesignerItemViewModelBase middle2 = new MiddleFlowNode() { Left = 200, Top = 300, ItemWidth = 80, ItemHeight = 40, Color = Colors.Yellow.ToString(), Text = "分管领导", UserIds = new List { "操作员1", "操作员2" }, ActType = "and" }; DiagramViewModel.DirectAddItemCommand.Execute(middle2); - DesignerItemViewModelBase cobegin = new COBeginFlowNode() { Left = 100, Top = 400, Color = Colors.Yellow.ToString() }; + DesignerItemViewModelBase cobegin = new COBeginFlowNode() { Left = 100, Top = 400, ItemWidth = 80, ItemHeight = 40, Color = Colors.Yellow.ToString() }; DiagramViewModel.DirectAddItemCommand.Execute(cobegin); - DesignerItemViewModelBase middle3 = new MiddleFlowNode() { Left = 100, Top = 500, Color = Colors.Yellow.ToString(), Text = "财务审批", UserIds = new List { "Admin" }, ActType = "or" }; + DesignerItemViewModelBase middle3 = new MiddleFlowNode() { Left = 100, Top = 500, ItemWidth = 80, ItemHeight = 40, Color = Colors.Yellow.ToString(), Text = "财务审批", UserIds = new List { "Admin" }, ActType = "or" }; DiagramViewModel.DirectAddItemCommand.Execute(middle3); - DesignerItemViewModelBase middle4 = new MiddleFlowNode() { Left = 200, Top = 500, Color = Colors.Yellow.ToString(), Text = "人力审批", RoleIds = new List { "操作员", "管理员" }, ActType = "or" }; + DesignerItemViewModelBase middle4 = new MiddleFlowNode() { Left = 200, Top = 500, ItemWidth = 80, ItemHeight = 40, Color = Colors.Yellow.ToString(), Text = "人力审批", RoleIds = new List { "操作员", "管理员" }, ActType = "or" }; DiagramViewModel.DirectAddItemCommand.Execute(middle4); - DesignerItemViewModelBase coend = new COEndFlowNode() { Left = 100, Top = 600, Color = Colors.Yellow.ToString() }; + DesignerItemViewModelBase coend = new COEndFlowNode() { Left = 100, Top = 600, ItemWidth = 80, ItemHeight = 40, Color = Colors.Yellow.ToString() }; DiagramViewModel.DirectAddItemCommand.Execute(coend); - DesignerItemViewModelBase end = new EndFlowNode() { Left = 100, Top = 700, Color = Colors.Yellow.ToString() }; + DesignerItemViewModelBase end = new EndFlowNode() { Left = 100, Top = 700, ItemWidth = 80, ItemHeight = 40, Color = Colors.Yellow.ToString() }; DiagramViewModel.DirectAddItemCommand.Execute(end); ConnectorViewModel connector1 = new ConnectorViewModel(start.BottomConnector, middle1.TopConnector, _service.DrawModeViewModel.VectorLineDrawMode); diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/ToolBoxViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/ToolBoxViewModel.cs index 0e1e5de..2149164 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/ToolBoxViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/ToolBoxViewModel.cs @@ -18,6 +18,7 @@ using AIStudio.Wpf.SFC.ViewModels; using System.Windows.Media; using AIStudio.Wpf.Flowchart.Models; using AIStudio.Wpf.SFC.Models; +using System.Windows; namespace AIStudio.Wpf.DiagramApp.ViewModels { @@ -168,12 +169,12 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels ToolBoxCategory.Add(new ToolBoxCategory() { Header = "逻辑图", ToolBoxItems = new ObservableCollection(logicalChartToolBoxItems) }); List flowchartToolBoxItems = new List(); - flowchartToolBoxItems.Add(new FlowchartToolBoxData(NodeKinds.Start, typeof(StartFlowNode))); - flowchartToolBoxItems.Add(new FlowchartToolBoxData(NodeKinds.End, typeof(EndFlowNode))); - flowchartToolBoxItems.Add(new FlowchartToolBoxData(NodeKinds.Middle, typeof(MiddleFlowNode))); - flowchartToolBoxItems.Add(new FlowchartToolBoxData(NodeKinds.Decide, typeof(DecideFlowNode))); - flowchartToolBoxItems.Add(new FlowchartToolBoxData(NodeKinds.COBegin, typeof(COBeginFlowNode))); - flowchartToolBoxItems.Add(new FlowchartToolBoxData(NodeKinds.COEnd, typeof(COEndFlowNode))); + flowchartToolBoxItems.Add(new FlowchartToolBoxData(NodeKinds.Start, typeof(StartFlowNode), 32, 32, new Size(80, 40))); + flowchartToolBoxItems.Add(new FlowchartToolBoxData(NodeKinds.End, typeof(EndFlowNode), 32, 32, new Size(80, 40))); + flowchartToolBoxItems.Add(new FlowchartToolBoxData(NodeKinds.Middle, typeof(MiddleFlowNode), 32, 32, new Size(80, 40))); + flowchartToolBoxItems.Add(new FlowchartToolBoxData(NodeKinds.Decide, typeof(DecideFlowNode), 32, 32, new Size(80, 40))); + flowchartToolBoxItems.Add(new FlowchartToolBoxData(NodeKinds.COBegin, typeof(COBeginFlowNode), 32, 32, new Size(80, 40))); ; + flowchartToolBoxItems.Add(new FlowchartToolBoxData(NodeKinds.COEnd, typeof(COEndFlowNode), 32, 32, new Size(80, 40))); ToolBoxCategory.Add(new ToolBoxCategory() { Header = "流程图", ToolBoxItems = new ObservableCollection(flowchartToolBoxItems) }); List mediaToolBoxItems = new List(); diff --git a/AIStudio.Wpf.DiagramDesigner.Test/MainWindow.xaml b/AIStudio.Wpf.DiagramDesigner.Test/MainWindow.xaml index 83cf1a9..a6c8af3 100644 --- a/AIStudio.Wpf.DiagramDesigner.Test/MainWindow.xaml +++ b/AIStudio.Wpf.DiagramDesigner.Test/MainWindow.xaml @@ -69,7 +69,7 @@ - + @@ -86,9 +86,9 @@ Width="3" /> - + - +