mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-03 00:00:57 +08:00
项目结构调整
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<Company>AIStudio.Wpf.Controls</Company>
|
||||
<Authors>akwkevin</Authors>
|
||||
<PackageProjectUrl>https://gitee.com/akwkevin</PackageProjectUrl>
|
||||
<PackageIcon>A.png</PackageIcon>
|
||||
<PackageIconUrl />
|
||||
<NeutralLanguage />
|
||||
<Version>1.0.7</Version>
|
||||
<Description>一个Wpf的流程图控件Json对象</Description>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AIStudio.Wpf.DiagramDesigner\AIStudio.Wpf.DiagramDesigner.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
454
AIStudio.Wpf.DiagramDesigner.Serializable/DiagramData.cs
Normal file
454
AIStudio.Wpf.DiagramDesigner.Serializable/DiagramData.cs
Normal file
@@ -0,0 +1,454 @@
|
||||
using System.Collections.Generic;
|
||||
using AIStudio.Wpf.DiagramDesigner.Serializable.ViewModels;
|
||||
|
||||
namespace AIStudio.Wpf.DiagramDesigner.Serializable
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class DiagramData
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the nodes.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The nodes.
|
||||
/// </value>
|
||||
public DiagramNode[] Nodes
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the links.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The links.
|
||||
/// </value>
|
||||
public DiagramLink[] Links
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the groups.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The groups.
|
||||
/// </value>
|
||||
public DiagramGroup[] Groups
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="DiagramData"/> class.
|
||||
/// </summary>
|
||||
public DiagramData()
|
||||
{
|
||||
Nodes = new DiagramNode[0];
|
||||
Links = new DiagramLink[0];
|
||||
Groups = new DiagramGroup[0];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// DiagramNode
|
||||
/// </summary>
|
||||
public class DiagramNode
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the identifier.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The identifier.
|
||||
/// </value>
|
||||
public string Id
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the parent identifier.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The parent identifier.
|
||||
/// </value>
|
||||
public string ParentId
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the name.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The name.
|
||||
/// </value>
|
||||
public string Name
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the color.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The color.
|
||||
/// </value>
|
||||
public string Color
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the color.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The color.
|
||||
/// </value>
|
||||
public string LineColor
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the color.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The color.
|
||||
/// </value>
|
||||
public string FontColor
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the color.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The color.
|
||||
/// </value>
|
||||
public double FontSize
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the color.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The color.
|
||||
/// </value>
|
||||
public string CornerRadius
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the color.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The color.
|
||||
/// </value>
|
||||
public string BorderThickness
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the label.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The label.
|
||||
/// </value>
|
||||
public string Label
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the width.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The width.
|
||||
/// </value>
|
||||
public double Width
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the height.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The height.
|
||||
/// </value>
|
||||
public double Height
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the x.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The x.
|
||||
/// </value>
|
||||
public double X
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the y.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The y.
|
||||
/// </value>
|
||||
public double Y
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the type.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The type.
|
||||
/// </value>
|
||||
public string Type
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the index of the z.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The index of the z.
|
||||
/// </value>
|
||||
public int ZIndex
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the port alignment list.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The port alignment list.
|
||||
/// </value>
|
||||
public List<string> PortAlignmentList
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public bool IsInnerConnector
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public List<string> PortRatio
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public virtual DiagramItemViewModel ToNodel(IDiagramViewModel diagramViewModel)
|
||||
{
|
||||
return new DiagramItemViewModel(diagramViewModel);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class DiagramLink
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the identifier.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The identifier.
|
||||
/// </value>
|
||||
public string Id
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the color.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The color.
|
||||
/// </value>
|
||||
public string Color
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the color of the selected.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The color of the selected.
|
||||
/// </value>
|
||||
public string SelectedColor
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the width.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The width.
|
||||
/// </value>
|
||||
public double Width
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the label.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The label.
|
||||
/// </value>
|
||||
public string Label
|
||||
{
|
||||
get; set;
|
||||
}//TODO
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the source identifier.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The source identifier.
|
||||
/// </value>
|
||||
public string SourceId
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the target identifier.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The target identifier.
|
||||
/// </value>
|
||||
public string TargetId
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the source port alignment.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The source port alignment.
|
||||
/// </value>
|
||||
public string SourcePortAlignment
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the target port alignment.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The target port alignment.
|
||||
/// </value>
|
||||
public string TargetPortAlignment
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the type.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The type.
|
||||
/// </value>
|
||||
public string Type
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the index of the z.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The index of the z.
|
||||
/// </value>
|
||||
public int ZIndex
|
||||
{
|
||||
get; set;
|
||||
} = -1;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the router.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The router.
|
||||
/// </value>
|
||||
public string Router
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the path generator.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The path generator.
|
||||
/// </value>
|
||||
public string PathGenerator
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the source marker path.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The source marker path.
|
||||
/// </value>
|
||||
public string SourceMarkerPath
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the width of the source marker.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The width of the source marker.
|
||||
/// </value>
|
||||
public double? SourceMarkerWidth
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the target marker path.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The target marker path.
|
||||
/// </value>
|
||||
public string TargetMarkerPath
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the width of the target marker.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The width of the target marker.
|
||||
/// </value>
|
||||
public double? TargetMarkerWidth
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class DiagramGroup
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the flow node ids.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The flow node ids.
|
||||
/// </value>
|
||||
public List<string> FlowNodeIds { get; set; } = new List<string>();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
using System;
|
||||
using AIStudio.Wpf.DiagramDesigner.Helpers;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace AIStudio.Wpf.DiagramDesigner.Serializable
|
||||
{
|
||||
public class DiagramNodeConverter : DATACreationConverter<DiagramNode>
|
||||
{
|
||||
protected override DiagramNode Create(Type objectType, JObject jObject)
|
||||
{
|
||||
//第一种方法:判断属性值来确认是哪个派生类
|
||||
if (FieldExists("Type", jObject, out string typename))
|
||||
{
|
||||
var type = TypeHelper.GetType(typename);
|
||||
return type != null ? (System.Activator.CreateInstance(type) as DiagramNode) : new DiagramNode();
|
||||
}
|
||||
else
|
||||
{
|
||||
return new DiagramNode();
|
||||
}
|
||||
|
||||
//第二种方法:判断字段是否存在来确认是哪个派生类
|
||||
}
|
||||
|
||||
private bool FieldExists(string fieldName, JObject jObject, out string entityName)
|
||||
{
|
||||
entityName = jObject[fieldName] == null ? "" : jObject[fieldName].ToString();
|
||||
return jObject[fieldName] != null;
|
||||
}
|
||||
}
|
||||
|
||||
public class DiagramLinkConverter : DATACreationConverter<DiagramLink>
|
||||
{
|
||||
protected override DiagramLink Create(Type objectType, JObject jObject)
|
||||
{
|
||||
//第一种方法:判断属性值来确认是哪个派生类
|
||||
if (FieldExists("Type", jObject, out string typename))
|
||||
{
|
||||
var type = TypeHelper.GetType(typename);
|
||||
return type != null ? (System.Activator.CreateInstance(type) as DiagramLink) : new DiagramLink();
|
||||
}
|
||||
else
|
||||
{
|
||||
return new DiagramLink();
|
||||
}
|
||||
|
||||
//第二种方法:判断字段是否存在来确认是哪个派生类
|
||||
}
|
||||
|
||||
private bool FieldExists(string fieldName, JObject jObject, out string entityName)
|
||||
{
|
||||
entityName = jObject[fieldName] == null ? "" : jObject[fieldName].ToString();
|
||||
return jObject[fieldName] != null;
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class DATACreationConverter<T> : JsonConverter
|
||||
{
|
||||
/// <summary>
|
||||
/// Create an instance of objectType, based properties in the JSON object
|
||||
/// </summary>
|
||||
/// <param name="objectType">type of object expected</param>
|
||||
/// <param name="jObject">
|
||||
/// contents of JSON object that will be deserialized
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
protected abstract T Create(Type objectType, JObject jObject);
|
||||
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return typeof(T).IsAssignableFrom(objectType);
|
||||
}
|
||||
|
||||
public override object ReadJson(JsonReader reader,
|
||||
Type objectType,
|
||||
object existingValue,
|
||||
JsonSerializer serializer)
|
||||
{
|
||||
// Load JObject from stream
|
||||
JObject jObject = JObject.Load(reader);
|
||||
|
||||
// Create target object based on JObject
|
||||
T target = Create(objectType, jObject);
|
||||
|
||||
// Populate the object properties
|
||||
serializer.Populate(jObject.CreateReader(), target);
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer,
|
||||
object value,
|
||||
JsonSerializer serializer)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Media;
|
||||
using AIStudio.Wpf.DiagramDesigner.Serializable.ViewModels;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
|
||||
namespace AIStudio.Wpf.DiagramDesigner.Serializable
|
||||
{
|
||||
public static class DiagramDataExtention
|
||||
{
|
||||
#region ToJson
|
||||
public static string ToJson(this IDiagramViewModel diagram)
|
||||
{
|
||||
var json = JsonConvert.SerializeObject(new {
|
||||
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)
|
||||
}, new JsonSerializerSettings
|
||||
{
|
||||
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
|
||||
});
|
||||
|
||||
return json;
|
||||
}
|
||||
|
||||
public static DiagramNode ToDiagramNode(this DiagramItemViewModel nodeModel)
|
||||
{
|
||||
DiagramNode diagramNode = nodeModel.ToDiagram();
|
||||
|
||||
diagramNode.Id = nodeModel.Id.ToString();
|
||||
if (nodeModel.ParentId != Guid.Empty)
|
||||
{
|
||||
diagramNode.ParentId = nodeModel.ParentId.ToString();
|
||||
}
|
||||
|
||||
diagramNode.Color = SerializeHelper.SerializeColor(nodeModel.ColorViewModel.FillColor.Color);
|
||||
diagramNode.LineColor = SerializeHelper.SerializeColor(nodeModel.ColorViewModel.LineColor.Color);
|
||||
diagramNode.FontColor = SerializeHelper.SerializeColor(nodeModel.FontViewModel.FontColor);
|
||||
diagramNode.FontSize = nodeModel.FontViewModel.FontSize;
|
||||
diagramNode.CornerRadius = SerializeHelper.SerializeCornerRadius(nodeModel.CornerRadius);
|
||||
diagramNode.BorderThickness = SerializeHelper.SerializeThickness(nodeModel.BorderThickness);
|
||||
|
||||
diagramNode.Name = nodeModel.Name;
|
||||
diagramNode.Label = nodeModel.Text;
|
||||
diagramNode.Width = nodeModel.ItemWidth * ScreenHelper.ScreenScale;
|
||||
diagramNode.Height = nodeModel.ItemHeight * ScreenHelper.ScreenScale;
|
||||
diagramNode.X = nodeModel.Left * ScreenHelper.ScreenScale;
|
||||
diagramNode.Y = nodeModel.Top * ScreenHelper.ScreenScale;
|
||||
diagramNode.ZIndex = nodeModel.ZIndex;
|
||||
diagramNode.Type = diagramNode.GetType().Name;
|
||||
diagramNode.PortAlignmentList = nodeModel.Connectors.Select(p => p.Orientation.ToString()).ToList();
|
||||
diagramNode.IsInnerConnector = nodeModel.IsInnerConnector;
|
||||
diagramNode.PortRatio = nodeModel.Connectors.Select(p => SerializeHelper.SerializePoint(p.Ratio)).ToList();
|
||||
return diagramNode;
|
||||
}
|
||||
|
||||
public static DiagramLink ToDiagramLink(this ConnectionViewModel linkModel)
|
||||
{
|
||||
DiagramLink diagramLink = new DiagramLink();
|
||||
|
||||
diagramLink.Id = linkModel.Id.ToString();
|
||||
diagramLink.Color = SerializeHelper.SerializeColor(linkModel.ColorViewModel.LineColor.Color);
|
||||
diagramLink.SelectedColor = SerializeHelper.SerializeColor(Colors.Black);
|
||||
diagramLink.Width = linkModel.ColorViewModel.LineWidth;
|
||||
diagramLink.Label = linkModel.Text;
|
||||
diagramLink.ZIndex = linkModel.ZIndex;
|
||||
|
||||
if (linkModel.IsFullConnection)
|
||||
{
|
||||
diagramLink.SourceId = linkModel.SourceConnectorInfo.DataItem.Id.ToString();
|
||||
diagramLink.TargetId = linkModel.SinkConnectorInfoFully.DataItem.Id.ToString();
|
||||
|
||||
diagramLink.Router = linkModel.RouterMode;
|
||||
diagramLink.PathGenerator = linkModel.PathMode;
|
||||
diagramLink.SourceMarkerPath = linkModel.ShapeViewModel.SourceMarker.Path;
|
||||
diagramLink.SourceMarkerWidth = linkModel.ShapeViewModel.SourceMarker.Width;
|
||||
diagramLink.TargetMarkerPath = linkModel.ShapeViewModel.SinkMarker.Path;
|
||||
diagramLink.TargetMarkerWidth = linkModel.ShapeViewModel.SinkMarker.Width;
|
||||
|
||||
diagramLink.Type = diagramLink.GetType().Name;
|
||||
|
||||
diagramLink.SourcePortAlignment = linkModel.SourceConnectorInfo.Orientation.ToString();
|
||||
diagramLink.TargetPortAlignment = linkModel.SinkConnectorInfoFully.Orientation.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return diagramLink;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ToObject
|
||||
public static void ToObject(this IDiagramViewModel diagram, string json)
|
||||
{
|
||||
var data = JsonConvert.DeserializeObject<DiagramData>(json, new JsonConverter[] { new DiagramNodeConverter(), new DiagramLinkConverter() });
|
||||
if (data != null)
|
||||
{
|
||||
ToObject(diagram, data);
|
||||
}
|
||||
}
|
||||
public static void ToObject(this IDiagramViewModel diagram, DiagramData data)
|
||||
{
|
||||
diagram.Items.Clear();
|
||||
|
||||
List<DiagramItemViewModel> nodes = new List<DiagramItemViewModel>();
|
||||
if (data.Nodes != null)
|
||||
{
|
||||
foreach (var node in data.Nodes)
|
||||
{
|
||||
var nodemodel = node.ToNodelModel(diagram);
|
||||
nodes.Add(nodemodel);
|
||||
diagram.Items.Add(nodemodel);
|
||||
}
|
||||
}
|
||||
if (data.Links != null)
|
||||
{
|
||||
foreach (var link in data.Links)
|
||||
{
|
||||
var source = nodes.FirstOrDefault(p => p.Id == new Guid(link.SourceId));
|
||||
var target = nodes.FirstOrDefault(p => p.Id == new Guid(link.TargetId));
|
||||
var linkmodel = link.ToLinkModel(diagram, source, target);
|
||||
diagram.Items.Add(linkmodel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static DiagramItemViewModel ToNodelModel(this DiagramNode diagramNode, IDiagramViewModel diagram)
|
||||
{
|
||||
DiagramItemViewModel nodeModel = diagramNode.ToNodel(diagram);
|
||||
|
||||
nodeModel.Id = new Guid(diagramNode.Id);
|
||||
if (!string.IsNullOrEmpty(diagramNode.ParentId))
|
||||
{
|
||||
nodeModel.ParentId = new Guid(diagramNode.ParentId);
|
||||
}
|
||||
nodeModel.Root = diagram;
|
||||
nodeModel.ColorViewModel.FillColor.Color = SerializeHelper.DeserializeColor(diagramNode.Color);
|
||||
nodeModel.ColorViewModel.LineColor.Color = SerializeHelper.DeserializeColor(diagramNode.LineColor);
|
||||
nodeModel.FontViewModel.FontColor = SerializeHelper.DeserializeColor(diagramNode.FontColor);
|
||||
nodeModel.FontViewModel.FontSize = diagramNode.FontSize;
|
||||
nodeModel.CornerRadius = SerializeHelper.DeserializeCornerRadius(diagramNode.CornerRadius);
|
||||
nodeModel.BorderThickness = SerializeHelper.DeserializeThickness(diagramNode.BorderThickness);
|
||||
|
||||
nodeModel.Text = diagramNode.Label;
|
||||
nodeModel.Name = diagramNode.Name;
|
||||
nodeModel.ItemWidth = diagramNode.Width / ScreenHelper.ScreenScale;
|
||||
nodeModel.ItemHeight = diagramNode.Height / ScreenHelper.ScreenScale;
|
||||
nodeModel.Left = diagramNode.X / ScreenHelper.ScreenScale;
|
||||
nodeModel.Top = diagramNode.Y / ScreenHelper.ScreenScale;
|
||||
nodeModel.ZIndex = diagramNode.ZIndex;
|
||||
nodeModel.IsInnerConnector = diagramNode.IsInnerConnector;
|
||||
if (diagramNode.PortAlignmentList != null)
|
||||
{
|
||||
nodeModel.ClearConnectors();
|
||||
for (int i = 0; i < diagramNode.PortAlignmentList.Count; i++)
|
||||
{
|
||||
var connecter = new FullyCreatedConnectorInfo(nodeModel, diagramNode.PortAlignmentList[i].ToEnum<ConnectorOrientation>(), nodeModel.IsInnerConnector);
|
||||
connecter.Ratio = SerializeHelper.DeserializePoint(diagramNode.PortRatio[i]);
|
||||
nodeModel.AddConnector(connecter);
|
||||
}
|
||||
}
|
||||
|
||||
return nodeModel;
|
||||
}
|
||||
|
||||
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);
|
||||
ConnectionViewModel linkModel = new ConnectionViewModel(diagram, sourceConnectorInfo, sinkConnectorInfo,
|
||||
(DrawMode)Enum.Parse(typeof(DrawMode), diagramLink.PathGenerator?? DrawMode.ConnectingLineSmooth.ToString()),
|
||||
(RouterMode)Enum.Parse(typeof(RouterMode), diagramLink.Router ?? RouterMode.RouterNormal.ToString()));
|
||||
linkModel.Id = new Guid(diagramLink.Id);
|
||||
linkModel.ColorViewModel.LineColor.Color = SerializeHelper.DeserializeColor(diagramLink.Color);
|
||||
linkModel.ColorViewModel.LineWidth = diagramLink.Width;
|
||||
linkModel.Text = diagramLink.Label;
|
||||
linkModel.ZIndex = diagramLink.ZIndex;
|
||||
|
||||
|
||||
if (!string.IsNullOrEmpty(diagramLink.SourceMarkerPath))
|
||||
{
|
||||
linkModel.ShapeViewModel.SourceMarker = new LinkMarker() { Path = diagramLink.SourceMarkerPath, Width = diagramLink.SourceMarkerWidth ?? 10, Height = diagramLink.SourceMarkerWidth ?? 10 };
|
||||
}
|
||||
if (!string.IsNullOrEmpty(diagramLink.TargetMarkerPath))
|
||||
{
|
||||
linkModel.ShapeViewModel.SinkMarker = new LinkMarker() { Path = diagramLink.TargetMarkerPath, Width = diagramLink.TargetMarkerWidth ?? 10.0, Height = diagramLink.TargetMarkerWidth ?? 10 };
|
||||
}
|
||||
return linkModel;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using AIStudio.Wpf.DiagramDesigner.Models;
|
||||
|
||||
namespace AIStudio.Wpf.DiagramDesigner.Serializable.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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user