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