From 84d4035e6da147b2b4349fad130783dcbda76f52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=89=BE=E7=AB=B9?= Date: Tue, 28 Feb 2023 23:04:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E7=A6=BB=E5=AE=8C=E6=88=90=20AIStudio?= =?UTF-8?q?.Wpf.DiagramModels=20=E7=94=A8=E4=BA=8E=E5=AF=B9=E6=8E=A5?= =?UTF-8?q?=E4=B8=89=E5=88=86=E8=BD=AF=E4=BB=B6=E7=9A=84=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AIStudio.Wpf.Diagram.sln | 12 +- .../AIStudio.Wpf.DiagramModels.csproj | 4 + .../DiagramData.cs | 59 +------ .../DiagramDataConverter.cs | 17 +- .../DiagramDataExtention.cs | 165 ++++++++---------- .../ViewModels/DiagramItemViewModel.cs | 35 ++++ .../AIStudio.Wpf.Flowchart.csproj | 7 + .../Controls/FlowchartEditor.xaml.cs | 1 + .../Models/FlowchartNode.cs | 118 +++++++++++++ AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs | 20 ++- 10 files changed, 278 insertions(+), 160 deletions(-) rename AIStudio.Wpf.JsonModel/AIStudio.Wpf.JsonModel.csproj => AIStudio.Wpf.DiagramModels/AIStudio.Wpf.DiagramModels.csproj (75%) rename {AIStudio.Wpf.Flowchart/Models => AIStudio.Wpf.DiagramModels}/DiagramData.cs (87%) rename {AIStudio.Wpf.Flowchart/Models => AIStudio.Wpf.DiagramModels}/DiagramDataConverter.cs (89%) rename {AIStudio.Wpf.Flowchart/Models => AIStudio.Wpf.DiagramModels}/DiagramDataExtention.cs (64%) create mode 100644 AIStudio.Wpf.DiagramModels/ViewModels/DiagramItemViewModel.cs create mode 100644 AIStudio.Wpf.Flowchart/Models/FlowchartNode.cs diff --git a/AIStudio.Wpf.Diagram.sln b/AIStudio.Wpf.Diagram.sln index 7cade39..6b8fd22 100644 --- a/AIStudio.Wpf.Diagram.sln +++ b/AIStudio.Wpf.Diagram.sln @@ -29,7 +29,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.DiagramDesigne EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.Mind", "AIStudio.Wpf.Mind\AIStudio.Wpf.Mind.csproj", "{85C437B9-16D2-4076-ABCD-52029AC232FC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AIStudio.Wpf.JsonModel", "AIStudio.Wpf.JsonModel\AIStudio.Wpf.JsonModel.csproj", "{5384BE3D-A696-47C6-967E-6D56A7ABC18B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.DiagramModels", "AIStudio.Wpf.DiagramModels\AIStudio.Wpf.DiagramModels.csproj", "{439D0631-D9C2-4D36-BFCE-80DFCCABE9E7}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -69,10 +69,10 @@ Global {85C437B9-16D2-4076-ABCD-52029AC232FC}.Debug|Any CPU.Build.0 = Debug|Any CPU {85C437B9-16D2-4076-ABCD-52029AC232FC}.Release|Any CPU.ActiveCfg = Release|Any CPU {85C437B9-16D2-4076-ABCD-52029AC232FC}.Release|Any CPU.Build.0 = Release|Any CPU - {5384BE3D-A696-47C6-967E-6D56A7ABC18B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5384BE3D-A696-47C6-967E-6D56A7ABC18B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5384BE3D-A696-47C6-967E-6D56A7ABC18B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5384BE3D-A696-47C6-967E-6D56A7ABC18B}.Release|Any CPU.Build.0 = Release|Any CPU + {439D0631-D9C2-4D36-BFCE-80DFCCABE9E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {439D0631-D9C2-4D36-BFCE-80DFCCABE9E7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {439D0631-D9C2-4D36-BFCE-80DFCCABE9E7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {439D0631-D9C2-4D36-BFCE-80DFCCABE9E7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -82,7 +82,7 @@ Global {CC68D39D-7935-4079-9CEB-FC2FD498D511} = {4959F170-02FB-4B7F-8F53-93DAF22713F9} {2AB69067-277E-4EE0-9949-8326A145EEE4} = {4959F170-02FB-4B7F-8F53-93DAF22713F9} {85C437B9-16D2-4076-ABCD-52029AC232FC} = {4959F170-02FB-4B7F-8F53-93DAF22713F9} - {5384BE3D-A696-47C6-967E-6D56A7ABC18B} = {4959F170-02FB-4B7F-8F53-93DAF22713F9} + {439D0631-D9C2-4D36-BFCE-80DFCCABE9E7} = {4959F170-02FB-4B7F-8F53-93DAF22713F9} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D30FC641-F06C-4E35-AEA5-48A9B6E59CE0} diff --git a/AIStudio.Wpf.JsonModel/AIStudio.Wpf.JsonModel.csproj b/AIStudio.Wpf.DiagramModels/AIStudio.Wpf.DiagramModels.csproj similarity index 75% rename from AIStudio.Wpf.JsonModel/AIStudio.Wpf.JsonModel.csproj rename to AIStudio.Wpf.DiagramModels/AIStudio.Wpf.DiagramModels.csproj index 47a89a9..6d39b12 100644 --- a/AIStudio.Wpf.JsonModel/AIStudio.Wpf.JsonModel.csproj +++ b/AIStudio.Wpf.DiagramModels/AIStudio.Wpf.DiagramModels.csproj @@ -11,4 +11,8 @@ 一个Wpf的流程图控件Json对象 + + + + diff --git a/AIStudio.Wpf.Flowchart/Models/DiagramData.cs b/AIStudio.Wpf.DiagramModels/DiagramData.cs similarity index 87% rename from AIStudio.Wpf.Flowchart/Models/DiagramData.cs rename to AIStudio.Wpf.DiagramModels/DiagramData.cs index 9659d1d..c4c9b76 100644 --- a/AIStudio.Wpf.Flowchart/Models/DiagramData.cs +++ b/AIStudio.Wpf.DiagramModels/DiagramData.cs @@ -1,8 +1,9 @@ using System; using System.Collections.Generic; using System.Text; +using AIStudio.Wpf.DiagramModels.ViewModels; -namespace AIStudio.Wpf.Flowchart.Models +namespace AIStudio.Wpf.DiagramModels { /// /// @@ -178,6 +179,12 @@ namespace AIStudio.Wpf.Flowchart.Models { get; set; } + + public virtual DiagramItemViewModel ToNodel() + { + return new DiagramItemViewModel(); + } + } /// @@ -353,56 +360,6 @@ namespace AIStudio.Wpf.Flowchart.Models } } - /// - /// - /// - /// - public class FlowchartNode : DiagramNode - { - /// - /// Gets or sets the kind. - /// - /// - /// The kind. - /// - public NodeKinds Kind - { - get; set; - } - - /// - /// Gets or sets the user ids. - /// - /// - /// The user ids. - /// - public IEnumerable UserIds - { - get; set; - } - /// - /// Gets or sets the role ids. - /// - /// - /// The role ids. - /// - public IEnumerable RoleIds - { - get; set; - } - /// - /// Gets or sets the type of the act. - /// - /// - /// The type of the act. - /// - public string ActType - { - get; set; - } - - } - /// /// /// diff --git a/AIStudio.Wpf.Flowchart/Models/DiagramDataConverter.cs b/AIStudio.Wpf.DiagramModels/DiagramDataConverter.cs similarity index 89% rename from AIStudio.Wpf.Flowchart/Models/DiagramDataConverter.cs rename to AIStudio.Wpf.DiagramModels/DiagramDataConverter.cs index c0db921..e564fde 100644 --- a/AIStudio.Wpf.Flowchart/Models/DiagramDataConverter.cs +++ b/AIStudio.Wpf.DiagramModels/DiagramDataConverter.cs @@ -1,24 +1,21 @@ using System; +using System.Linq; +using AIStudio.Wpf.DiagramDesigner; +using AIStudio.Wpf.DiagramDesigner.Helpers; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace AIStudio.Wpf.Flowchart.Models +namespace AIStudio.Wpf.DiagramModels { public class DiagramNodeConverter : DATACreationConverter { protected override DiagramNode Create(Type objectType, JObject jObject) { //第一种方法:判断属性值来确认是哪个派生类 - if (FieldExists("Type", jObject, out string type)) + if (FieldExists("Type", jObject, out string typename)) { - if (type == "FlowchartNode") - { - return new FlowchartNode(); - } - else - { - return new DiagramNode(); - } + var type = TypeHelper.GetType(typename); + return type != null ? (System.Activator.CreateInstance(type) as DiagramNode) : new DiagramNode(); } else { diff --git a/AIStudio.Wpf.Flowchart/Models/DiagramDataExtention.cs b/AIStudio.Wpf.DiagramModels/DiagramDataExtention.cs similarity index 64% rename from AIStudio.Wpf.Flowchart/Models/DiagramDataExtention.cs rename to AIStudio.Wpf.DiagramModels/DiagramDataExtention.cs index 55192e4..d764d6c 100644 --- a/AIStudio.Wpf.Flowchart/Models/DiagramDataExtention.cs +++ b/AIStudio.Wpf.DiagramModels/DiagramDataExtention.cs @@ -1,21 +1,21 @@ using System; using System.Collections.Generic; -using System.Text; -using AIStudio.Wpf.DiagramDesigner; -using Newtonsoft.Json; using System.Linq; using System.Windows.Media; -using AIStudio.Wpf.Flowchart.ViewModels; +using AIStudio.Wpf.DiagramDesigner; +using AIStudio.Wpf.DiagramModels.ViewModels; +using Newtonsoft.Json; -namespace AIStudio.Wpf.Flowchart.Models + +namespace AIStudio.Wpf.DiagramModels { public static class DiagramDataExtention - { + { #region ToJson public static string ToJson(this IDiagramViewModel diagram) { var json = JsonConvert.SerializeObject(new { - Nodes = diagram.Items.OfType().Select(p => p.ToDiagramNode()).Where(p => p != null), + Nodes = diagram.Items.OfType().Select(p => p.ToDiagramNode()).Where(p => p != null), Links = diagram.Items.OfType().Select(p => p.ToDiagramLink()).Where(p => p != null) }, new JsonSerializerSettings { @@ -25,28 +25,9 @@ namespace AIStudio.Wpf.Flowchart.Models return json; } - public static DiagramNode ToDiagramNode(this DesignerItemViewModelBase nodeModel) + public static DiagramNode ToDiagramNode(this DiagramItemViewModel nodeModel) { - DiagramNode diagramNode; - if (nodeModel is FlowNode flowNode) - { - var flowchartNode = new FlowchartNode(); - diagramNode = flowchartNode; - - diagramNode.Name = flowNode.Name; - flowchartNode.Color = flowNode.Color; - flowchartNode.Kind = flowNode.Kind; - if (nodeModel is MiddleFlowNode middleflowNode) - { - flowchartNode.UserIds = middleflowNode.UserIds; - flowchartNode.RoleIds = middleflowNode.RoleIds; - flowchartNode.ActType = middleflowNode.ActType; - } - } - else - { - return null; - } + DiagramNode diagramNode = nodeModel.ToDiagram(); diagramNode.Id = nodeModel.Id.ToString(); if (nodeModel.ParentId != Guid.Empty) @@ -114,7 +95,7 @@ namespace AIStudio.Wpf.Flowchart.Models { diagram.Items.Clear(); - List nodes = new List(); + List nodes = new List(); if (data.Nodes != null) { foreach (var node in data.Nodes) @@ -136,73 +117,73 @@ namespace AIStudio.Wpf.Flowchart.Models } } - private static DesignerItemViewModelBase ToNodelModel(this DiagramNode diagramNode, IDiagramViewModel diagram) + private static DiagramItemViewModel ToNodelModel(this DiagramNode diagramNode, IDiagramViewModel diagram) { - DesignerItemViewModelBase nodeModel; - if (diagramNode is FlowchartNode flowchartNode) - { - FlowNode flowNode = null; - switch (flowchartNode.Kind) - { - case NodeKinds.Start: - { - var flowchartNodelModel = new StartFlowNode(); - flowNode = flowchartNodelModel; - break; - } + DiagramItemViewModel nodeModel = diagramNode.ToNodel(); + //if (diagramNode is FlowchartNode flowchartNode) + //{ + // FlowNode flowNode = null; + // switch (flowchartNode.Kind) + // { + // case NodeKinds.Start: + // { + // var flowchartNodelModel = new StartFlowNode(); + // flowNode = flowchartNodelModel; + // break; + // } - case NodeKinds.End: - { - var flowchartNodelModel = new EndFlowNode(); - flowNode = flowchartNodelModel; - break; - } - case NodeKinds.Decide: - { - var flowchartNodelModel = new DecideFlowNode(); - flowNode = flowchartNodelModel; - break; - } - case NodeKinds.COBegin: - { - var flowchartNodelModel = new COBeginFlowNode(); - flowNode = flowchartNodelModel; - break; - } - case NodeKinds.COEnd: - { - var flowchartNodelModel = new COEndFlowNode(); - flowNode = flowchartNodelModel; - break; - } - case NodeKinds.Middle: - { - var flowchartNodelModel = new MiddleFlowNode(); - flowNode = flowchartNodelModel; - flowchartNodelModel.UserIds = flowchartNode.UserIds?.ToList(); - flowchartNodelModel.RoleIds = flowchartNode.RoleIds?.ToList(); - flowchartNodelModel.ActType = flowchartNode.ActType; - break; - } - default: - { - var flowNodelModel = new FlowNode(NodeKinds.Normal); - flowNode = flowNodelModel; - break; - } + // case NodeKinds.End: + // { + // var flowchartNodelModel = new EndFlowNode(); + // flowNode = flowchartNodelModel; + // break; + // } + // case NodeKinds.Decide: + // { + // var flowchartNodelModel = new DecideFlowNode(); + // flowNode = flowchartNodelModel; + // break; + // } + // case NodeKinds.COBegin: + // { + // var flowchartNodelModel = new COBeginFlowNode(); + // flowNode = flowchartNodelModel; + // break; + // } + // case NodeKinds.COEnd: + // { + // var flowchartNodelModel = new COEndFlowNode(); + // flowNode = flowchartNodelModel; + // break; + // } + // case NodeKinds.Middle: + // { + // var flowchartNodelModel = new MiddleFlowNode(); + // flowNode = flowchartNodelModel; + // flowchartNodelModel.UserIds = flowchartNode.UserIds?.ToList(); + // flowchartNodelModel.RoleIds = flowchartNode.RoleIds?.ToList(); + // flowchartNodelModel.ActType = flowchartNode.ActType; + // break; + // } + // default: + // { + // var flowNodelModel = new FlowNode(NodeKinds.Normal); + // flowNode = flowNodelModel; + // break; + // } - } + // } - nodeModel = flowNode; - flowNode.Name = flowchartNode.Name; - flowNode.Color = flowchartNode.Color; - flowNode.Kind = flowchartNode.Kind; + // nodeModel = flowNode; + // flowNode.Name = flowchartNode.Name; + // flowNode.Color = flowchartNode.Color; + // flowNode.Kind = flowchartNode.Kind; - } - else - { - nodeModel = new TextDesignerItemViewModel(); - } + //} + //else + //{ + // nodeModel = new TextDesignerItemViewModel(); + //} nodeModel.Id = new Guid(diagramNode.Id); if (!string.IsNullOrEmpty(diagramNode.ParentId)) @@ -221,7 +202,7 @@ namespace AIStudio.Wpf.Flowchart.Models return nodeModel; } - public static ConnectionViewModel ToLinkModel(this DiagramLink diagramLink, IDiagramViewModel diagram, DesignerItemViewModelBase sourceNode, DesignerItemViewModelBase targetNode) + public static ConnectionViewModel ToLinkModel(this DiagramLink diagramLink, IDiagramViewModel diagram, DiagramItemViewModel sourceNode, DiagramItemViewModel targetNode) { FullyCreatedConnectorInfo sourceConnectorInfo = sourceNode.Connectors.FirstOrDefault(p => p.Orientation.ToString() == diagramLink.SourcePortAlignment); FullyCreatedConnectorInfo sinkConnectorInfo = targetNode.Connectors.FirstOrDefault(p => p.Orientation.ToString() == diagramLink.TargetPortAlignment); diff --git a/AIStudio.Wpf.DiagramModels/ViewModels/DiagramItemViewModel.cs b/AIStudio.Wpf.DiagramModels/ViewModels/DiagramItemViewModel.cs new file mode 100644 index 0000000..cd5d5dc --- /dev/null +++ b/AIStudio.Wpf.DiagramModels/ViewModels/DiagramItemViewModel.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using AIStudio.Wpf.DiagramDesigner; +using AIStudio.Wpf.DiagramDesigner.Models; + +namespace AIStudio.Wpf.DiagramModels.ViewModels +{ + public class DiagramItemViewModel : DesignerItemViewModelBase + { + public DiagramItemViewModel() : this(null) + { + } + + public DiagramItemViewModel(IDiagramViewModel root) : base(root) + { + } + + public DiagramItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) + { + } + + public DiagramItemViewModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType) + { + } + + + public virtual DiagramNode ToDiagram() + { + return new DiagramNode(); + } + } +} diff --git a/AIStudio.Wpf.Flowchart/AIStudio.Wpf.Flowchart.csproj b/AIStudio.Wpf.Flowchart/AIStudio.Wpf.Flowchart.csproj index 7009e0c..6666035 100644 --- a/AIStudio.Wpf.Flowchart/AIStudio.Wpf.Flowchart.csproj +++ b/AIStudio.Wpf.Flowchart/AIStudio.Wpf.Flowchart.csproj @@ -12,6 +12,12 @@ 一个Wpf的流程图控件 + + + + + + True @@ -21,6 +27,7 @@ + diff --git a/AIStudio.Wpf.Flowchart/Controls/FlowchartEditor.xaml.cs b/AIStudio.Wpf.Flowchart/Controls/FlowchartEditor.xaml.cs index 1ec51a7..07304b9 100644 --- a/AIStudio.Wpf.Flowchart/Controls/FlowchartEditor.xaml.cs +++ b/AIStudio.Wpf.Flowchart/Controls/FlowchartEditor.xaml.cs @@ -9,6 +9,7 @@ using System.Windows.Controls; using System.Windows.Input; using AIStudio.Wpf.DiagramDesigner; using AIStudio.Wpf.DiagramDesigner.Geometrys; +using AIStudio.Wpf.DiagramModels; using AIStudio.Wpf.Flowchart.Models; namespace AIStudio.Wpf.Flowchart.Controls diff --git a/AIStudio.Wpf.Flowchart/Models/FlowchartNode.cs b/AIStudio.Wpf.Flowchart/Models/FlowchartNode.cs new file mode 100644 index 0000000..eee0850 --- /dev/null +++ b/AIStudio.Wpf.Flowchart/Models/FlowchartNode.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using AIStudio.Wpf.DiagramModels; +using AIStudio.Wpf.DiagramModels.ViewModels; +using AIStudio.Wpf.Flowchart.ViewModels; + +namespace AIStudio.Wpf.Flowchart.Models +{ + /// + /// + /// + /// + public class FlowchartNode : DiagramNode + { + /// + /// Gets or sets the kind. + /// + /// + /// The kind. + /// + public NodeKinds Kind + { + get; set; + } + + /// + /// Gets or sets the user ids. + /// + /// + /// The user ids. + /// + public IEnumerable UserIds + { + get; set; + } + /// + /// Gets or sets the role ids. + /// + /// + /// The role ids. + /// + public IEnumerable RoleIds + { + get; set; + } + /// + /// Gets or sets the type of the act. + /// + /// + /// The type of the act. + /// + public string ActType + { + get; set; + } + + public override DiagramItemViewModel ToNodel() + { + FlowNode flowNode = null; + switch (Kind) + { + case NodeKinds.Start: + { + flowNode = new StartFlowNode(); + break; + } + + case NodeKinds.End: + { + flowNode = new EndFlowNode(); + break; + } + case NodeKinds.Decide: + { + flowNode = new DecideFlowNode(); + break; + } + case NodeKinds.COBegin: + { + flowNode = new COBeginFlowNode(); + break; + } + case NodeKinds.COEnd: + { + flowNode = new COEndFlowNode(); + break; + } + case NodeKinds.Middle: + { + var flowchartNodelModel = new MiddleFlowNode(); + flowNode = flowchartNodelModel; + flowchartNodelModel.UserIds = UserIds?.ToList(); + flowchartNodelModel.RoleIds = RoleIds?.ToList(); + flowchartNodelModel.ActType = ActType; + break; + } + default: + { + var flowNodelModel = new FlowNode(NodeKinds.Normal); + flowNode = flowNodelModel; + break; + } + + } + + flowNode.Name = Name; + flowNode.Color = Color; + flowNode.Kind = Kind; + + return flowNode; + } + + + } +} diff --git a/AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs b/AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs index 53e024b..004a9d9 100644 --- a/AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs +++ b/AIStudio.Wpf.Flowchart/ViewModels/FlowNode.cs @@ -4,11 +4,13 @@ using System.ComponentModel; using AIStudio.Wpf.DiagramDesigner; using AIStudio.Wpf.DiagramDesigner.Models; using AIStudio.Wpf.DiagramDesigner.Services; +using AIStudio.Wpf.DiagramModels; +using AIStudio.Wpf.DiagramModels.ViewModels; using AIStudio.Wpf.Flowchart.Models; namespace AIStudio.Wpf.Flowchart.ViewModels { - public class FlowNode : DesignerItemViewModelBase + public class FlowNode : DiagramItemViewModel { protected IUIVisualizerService visualiserService; @@ -68,6 +70,22 @@ namespace AIStudio.Wpf.Flowchart.ViewModels } } + public override DiagramNode ToDiagram() + { + var flowchartNode = new FlowchartNode(); + + flowchartNode.Name = Name; + flowchartNode.Color = Color; + flowchartNode.Kind = Kind; + if (this is MiddleFlowNode middleflowNode) + { + flowchartNode.UserIds = middleflowNode.UserIds; + flowchartNode.RoleIds = middleflowNode.RoleIds; + flowchartNode.ActType = middleflowNode.ActType; + } + return flowchartNode; + } + private string _color = "#1890ff"; [Browsable(false)] public string Color