分离完成 AIStudio.Wpf.DiagramModels 用于对接三分软件的模型

This commit is contained in:
艾竹
2023-02-28 23:04:16 +08:00
parent a015f9208b
commit 84d4035e6d
10 changed files with 278 additions and 160 deletions

View File

@@ -29,7 +29,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.DiagramDesigne
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.Mind", "AIStudio.Wpf.Mind\AIStudio.Wpf.Mind.csproj", "{85C437B9-16D2-4076-ABCD-52029AC232FC}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.Mind", "AIStudio.Wpf.Mind\AIStudio.Wpf.Mind.csproj", "{85C437B9-16D2-4076-ABCD-52029AC232FC}"
EndProject 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 EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution 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}.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.ActiveCfg = Release|Any CPU
{85C437B9-16D2-4076-ABCD-52029AC232FC}.Release|Any CPU.Build.0 = 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 {439D0631-D9C2-4D36-BFCE-80DFCCABE9E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5384BE3D-A696-47C6-967E-6D56A7ABC18B}.Debug|Any CPU.Build.0 = Debug|Any CPU {439D0631-D9C2-4D36-BFCE-80DFCCABE9E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5384BE3D-A696-47C6-967E-6D56A7ABC18B}.Release|Any CPU.ActiveCfg = Release|Any CPU {439D0631-D9C2-4D36-BFCE-80DFCCABE9E7}.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}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@@ -82,7 +82,7 @@ Global
{CC68D39D-7935-4079-9CEB-FC2FD498D511} = {4959F170-02FB-4B7F-8F53-93DAF22713F9} {CC68D39D-7935-4079-9CEB-FC2FD498D511} = {4959F170-02FB-4B7F-8F53-93DAF22713F9}
{2AB69067-277E-4EE0-9949-8326A145EEE4} = {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} {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 EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D30FC641-F06C-4E35-AEA5-48A9B6E59CE0} SolutionGuid = {D30FC641-F06C-4E35-AEA5-48A9B6E59CE0}

View File

@@ -11,4 +11,8 @@
<Description>一个Wpf的流程图控件Json对象</Description> <Description>一个Wpf的流程图控件Json对象</Description>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\AIStudio.Wpf.DiagramDesigner\AIStudio.Wpf.DiagramDesigner.csproj" />
</ItemGroup>
</Project> </Project>

View File

@@ -1,8 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using AIStudio.Wpf.DiagramModels.ViewModels;
namespace AIStudio.Wpf.Flowchart.Models namespace AIStudio.Wpf.DiagramModels
{ {
/// <summary> /// <summary>
/// ///
@@ -178,6 +179,12 @@ namespace AIStudio.Wpf.Flowchart.Models
{ {
get; set; get; set;
} }
public virtual DiagramItemViewModel ToNodel()
{
return new DiagramItemViewModel();
}
} }
/// <summary> /// <summary>
@@ -353,56 +360,6 @@ namespace AIStudio.Wpf.Flowchart.Models
} }
} }
/// <summary>
///
/// </summary>
/// <seealso cref="AIStudio.Util.DiagramEntity.DiagramNode" />
public class FlowchartNode : DiagramNode
{
/// <summary>
/// Gets or sets the kind.
/// </summary>
/// <value>
/// The kind.
/// </value>
public NodeKinds Kind
{
get; set;
}
/// <summary>
/// Gets or sets the user ids.
/// </summary>
/// <value>
/// The user ids.
/// </value>
public IEnumerable<string> UserIds
{
get; set;
}
/// <summary>
/// Gets or sets the role ids.
/// </summary>
/// <value>
/// The role ids.
/// </value>
public IEnumerable<string> RoleIds
{
get; set;
}
/// <summary>
/// Gets or sets the type of the act.
/// </summary>
/// <value>
/// The type of the act.
/// </value>
public string ActType
{
get; set;
}
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>

View File

@@ -1,24 +1,21 @@
using System; using System;
using System.Linq;
using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramDesigner.Helpers;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
namespace AIStudio.Wpf.Flowchart.Models namespace AIStudio.Wpf.DiagramModels
{ {
public class DiagramNodeConverter : DATACreationConverter<DiagramNode> public class DiagramNodeConverter : DATACreationConverter<DiagramNode>
{ {
protected override DiagramNode Create(Type objectType, JObject jObject) 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") var type = TypeHelper.GetType(typename);
{ return type != null ? (System.Activator.CreateInstance(type) as DiagramNode) : new DiagramNode();
return new FlowchartNode();
}
else
{
return new DiagramNode();
}
} }
else else
{ {

View File

@@ -1,13 +1,13 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text;
using AIStudio.Wpf.DiagramDesigner;
using Newtonsoft.Json;
using System.Linq; using System.Linq;
using System.Windows.Media; 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 public static class DiagramDataExtention
{ {
@@ -15,7 +15,7 @@ namespace AIStudio.Wpf.Flowchart.Models
public static string ToJson(this IDiagramViewModel diagram) public static string ToJson(this IDiagramViewModel diagram)
{ {
var json = JsonConvert.SerializeObject(new { var json = JsonConvert.SerializeObject(new {
Nodes = diagram.Items.OfType<DesignerItemViewModelBase>().Select(p => p.ToDiagramNode()).Where(p => p != null), Nodes = diagram.Items.OfType<DiagramItemViewModel>().Select(p => p.ToDiagramNode()).Where(p => p != null),
Links = diagram.Items.OfType<ConnectionViewModel>().Select(p => p.ToDiagramLink()).Where(p => p != null) Links = diagram.Items.OfType<ConnectionViewModel>().Select(p => p.ToDiagramLink()).Where(p => p != null)
}, new JsonSerializerSettings }, new JsonSerializerSettings
{ {
@@ -25,28 +25,9 @@ namespace AIStudio.Wpf.Flowchart.Models
return json; return json;
} }
public static DiagramNode ToDiagramNode(this DesignerItemViewModelBase nodeModel) public static DiagramNode ToDiagramNode(this DiagramItemViewModel nodeModel)
{ {
DiagramNode diagramNode; DiagramNode diagramNode = nodeModel.ToDiagram();
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.Id = nodeModel.Id.ToString(); diagramNode.Id = nodeModel.Id.ToString();
if (nodeModel.ParentId != Guid.Empty) if (nodeModel.ParentId != Guid.Empty)
@@ -114,7 +95,7 @@ namespace AIStudio.Wpf.Flowchart.Models
{ {
diagram.Items.Clear(); diagram.Items.Clear();
List<DesignerItemViewModelBase> nodes = new List<DesignerItemViewModelBase>(); List<DiagramItemViewModel> nodes = new List<DiagramItemViewModel>();
if (data.Nodes != null) if (data.Nodes != null)
{ {
foreach (var node in data.Nodes) 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; DiagramItemViewModel nodeModel = diagramNode.ToNodel();
if (diagramNode is FlowchartNode flowchartNode) //if (diagramNode is FlowchartNode flowchartNode)
{ //{
FlowNode flowNode = null; // FlowNode flowNode = null;
switch (flowchartNode.Kind) // switch (flowchartNode.Kind)
{ // {
case NodeKinds.Start: // case NodeKinds.Start:
{ // {
var flowchartNodelModel = new StartFlowNode(); // var flowchartNodelModel = new StartFlowNode();
flowNode = flowchartNodelModel; // flowNode = flowchartNodelModel;
break; // break;
} // }
case NodeKinds.End: // case NodeKinds.End:
{ // {
var flowchartNodelModel = new EndFlowNode(); // var flowchartNodelModel = new EndFlowNode();
flowNode = flowchartNodelModel; // flowNode = flowchartNodelModel;
break; // break;
} // }
case NodeKinds.Decide: // case NodeKinds.Decide:
{ // {
var flowchartNodelModel = new DecideFlowNode(); // var flowchartNodelModel = new DecideFlowNode();
flowNode = flowchartNodelModel; // flowNode = flowchartNodelModel;
break; // break;
} // }
case NodeKinds.COBegin: // case NodeKinds.COBegin:
{ // {
var flowchartNodelModel = new COBeginFlowNode(); // var flowchartNodelModel = new COBeginFlowNode();
flowNode = flowchartNodelModel; // flowNode = flowchartNodelModel;
break; // break;
} // }
case NodeKinds.COEnd: // case NodeKinds.COEnd:
{ // {
var flowchartNodelModel = new COEndFlowNode(); // var flowchartNodelModel = new COEndFlowNode();
flowNode = flowchartNodelModel; // flowNode = flowchartNodelModel;
break; // break;
} // }
case NodeKinds.Middle: // case NodeKinds.Middle:
{ // {
var flowchartNodelModel = new MiddleFlowNode(); // var flowchartNodelModel = new MiddleFlowNode();
flowNode = flowchartNodelModel; // flowNode = flowchartNodelModel;
flowchartNodelModel.UserIds = flowchartNode.UserIds?.ToList(); // flowchartNodelModel.UserIds = flowchartNode.UserIds?.ToList();
flowchartNodelModel.RoleIds = flowchartNode.RoleIds?.ToList(); // flowchartNodelModel.RoleIds = flowchartNode.RoleIds?.ToList();
flowchartNodelModel.ActType = flowchartNode.ActType; // flowchartNodelModel.ActType = flowchartNode.ActType;
break; // break;
} // }
default: // default:
{ // {
var flowNodelModel = new FlowNode(NodeKinds.Normal); // var flowNodelModel = new FlowNode(NodeKinds.Normal);
flowNode = flowNodelModel; // flowNode = flowNodelModel;
break; // break;
} // }
} // }
nodeModel = flowNode; // nodeModel = flowNode;
flowNode.Name = flowchartNode.Name; // flowNode.Name = flowchartNode.Name;
flowNode.Color = flowchartNode.Color; // flowNode.Color = flowchartNode.Color;
flowNode.Kind = flowchartNode.Kind; // flowNode.Kind = flowchartNode.Kind;
} //}
else //else
{ //{
nodeModel = new TextDesignerItemViewModel(); // nodeModel = new TextDesignerItemViewModel();
} //}
nodeModel.Id = new Guid(diagramNode.Id); nodeModel.Id = new Guid(diagramNode.Id);
if (!string.IsNullOrEmpty(diagramNode.ParentId)) if (!string.IsNullOrEmpty(diagramNode.ParentId))
@@ -221,7 +202,7 @@ namespace AIStudio.Wpf.Flowchart.Models
return nodeModel; 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 sourceConnectorInfo = sourceNode.Connectors.FirstOrDefault(p => p.Orientation.ToString() == diagramLink.SourcePortAlignment);
FullyCreatedConnectorInfo sinkConnectorInfo = targetNode.Connectors.FirstOrDefault(p => p.Orientation.ToString() == diagramLink.TargetPortAlignment); FullyCreatedConnectorInfo sinkConnectorInfo = targetNode.Connectors.FirstOrDefault(p => p.Orientation.ToString() == diagramLink.TargetPortAlignment);

View File

@@ -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();
}
}
}

View File

@@ -12,6 +12,12 @@
<Description>一个Wpf的流程图控件</Description> <Description>一个Wpf的流程图控件</Description>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<Compile Remove="Models\DiagramData.cs" />
<Compile Remove="Models\DiagramDataConverter.cs" />
<Compile Remove="Models\DiagramDataExtention.cs" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="A.png"> <None Include="A.png">
<Pack>True</Pack> <Pack>True</Pack>
@@ -21,6 +27,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\AIStudio.Wpf.DiagramDesigner\AIStudio.Wpf.DiagramDesigner.csproj" /> <ProjectReference Include="..\AIStudio.Wpf.DiagramDesigner\AIStudio.Wpf.DiagramDesigner.csproj" />
<ProjectReference Include="..\AIStudio.Wpf.DiagramModels\AIStudio.Wpf.DiagramModels.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -9,6 +9,7 @@ using System.Windows.Controls;
using System.Windows.Input; using System.Windows.Input;
using AIStudio.Wpf.DiagramDesigner; using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramDesigner.Geometrys; using AIStudio.Wpf.DiagramDesigner.Geometrys;
using AIStudio.Wpf.DiagramModels;
using AIStudio.Wpf.Flowchart.Models; using AIStudio.Wpf.Flowchart.Models;
namespace AIStudio.Wpf.Flowchart.Controls namespace AIStudio.Wpf.Flowchart.Controls

View File

@@ -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
{
/// <summary>
///
/// </summary>
/// <seealso cref="AIStudio.Util.DiagramEntity.DiagramNode" />
public class FlowchartNode : DiagramNode
{
/// <summary>
/// Gets or sets the kind.
/// </summary>
/// <value>
/// The kind.
/// </value>
public NodeKinds Kind
{
get; set;
}
/// <summary>
/// Gets or sets the user ids.
/// </summary>
/// <value>
/// The user ids.
/// </value>
public IEnumerable<string> UserIds
{
get; set;
}
/// <summary>
/// Gets or sets the role ids.
/// </summary>
/// <value>
/// The role ids.
/// </value>
public IEnumerable<string> RoleIds
{
get; set;
}
/// <summary>
/// Gets or sets the type of the act.
/// </summary>
/// <value>
/// The type of the act.
/// </value>
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;
}
}
}

View File

@@ -4,11 +4,13 @@ using System.ComponentModel;
using AIStudio.Wpf.DiagramDesigner; using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramDesigner.Models; using AIStudio.Wpf.DiagramDesigner.Models;
using AIStudio.Wpf.DiagramDesigner.Services; using AIStudio.Wpf.DiagramDesigner.Services;
using AIStudio.Wpf.DiagramModels;
using AIStudio.Wpf.DiagramModels.ViewModels;
using AIStudio.Wpf.Flowchart.Models; using AIStudio.Wpf.Flowchart.Models;
namespace AIStudio.Wpf.Flowchart.ViewModels namespace AIStudio.Wpf.Flowchart.ViewModels
{ {
public class FlowNode : DesignerItemViewModelBase public class FlowNode : DiagramItemViewModel
{ {
protected IUIVisualizerService visualiserService; 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"; private string _color = "#1890ff";
[Browsable(false)] [Browsable(false)]
public string Color public string Color