mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-04-05 16:56:34 +08:00
mind
This commit is contained in:
@@ -27,13 +27,21 @@ namespace AIStudio.Wpf.DiagramModels
|
||||
|
||||
public static DiagramNode ToDiagramNode(this DiagramItemViewModel nodeModel)
|
||||
{
|
||||
DiagramNode diagramNode = nodeModel.ToDiagram();
|
||||
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.Label = nodeModel.Text;
|
||||
diagramNode.Width = nodeModel.ItemWidth * ScreenHelper.ScreenScale;
|
||||
diagramNode.Height = nodeModel.ItemHeight * ScreenHelper.ScreenScale;
|
||||
@@ -42,7 +50,8 @@ namespace AIStudio.Wpf.DiagramModels
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -55,19 +64,19 @@ namespace AIStudio.Wpf.DiagramModels
|
||||
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 = baseLinkModel.Router?.Method.Name;
|
||||
//diagramLink.PathGenerator = baseLinkModel.PathGenerator?.Method.Name;
|
||||
//diagramLink.SourceMarkerPath = baseLinkModel.SourceMarker?.Path;
|
||||
//diagramLink.SourceMarkerWidth = baseLinkModel.SourceMarker?.Width;
|
||||
//diagramLink.TargetMarkerPath = baseLinkModel.TargetMarker?.Path;
|
||||
//diagramLink.TargetMarkerWidth = baseLinkModel.TargetMarker?.Width;
|
||||
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;
|
||||
|
||||
@@ -119,7 +128,7 @@ namespace AIStudio.Wpf.DiagramModels
|
||||
|
||||
private static DiagramItemViewModel ToNodelModel(this DiagramNode diagramNode, IDiagramViewModel diagram)
|
||||
{
|
||||
DiagramItemViewModel nodeModel = diagramNode.ToNodel(diagram);
|
||||
DiagramItemViewModel nodeModel = diagramNode.ToNodel(diagram);
|
||||
|
||||
nodeModel.Id = new Guid(diagramNode.Id);
|
||||
if (!string.IsNullOrEmpty(diagramNode.ParentId))
|
||||
@@ -127,13 +136,30 @@ namespace AIStudio.Wpf.DiagramModels
|
||||
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.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;
|
||||
diagramNode.PortAlignmentList?.ForEach(p => nodeModel.AddConnector(new FullyCreatedConnectorInfo(nodeModel, p.ToEnum<ConnectorOrientation>())));
|
||||
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;
|
||||
}
|
||||
@@ -142,35 +168,24 @@ namespace AIStudio.Wpf.DiagramModels
|
||||
{
|
||||
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, diagram.DrawModeViewModel?.LineDrawMode ?? DrawMode.ConnectingLineSmooth, diagram.DrawModeViewModel?.LineRouterMode ?? RouterMode.RouterNormal);
|
||||
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;
|
||||
if (!string.IsNullOrEmpty(diagramLink.Label))
|
||||
linkModel.Text = diagramLink.Label;
|
||||
linkModel.ZIndex = diagramLink.ZIndex;
|
||||
|
||||
|
||||
if (!string.IsNullOrEmpty(diagramLink.SourceMarkerPath))
|
||||
{
|
||||
linkModel.AddLabel(diagramLink.Label);
|
||||
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 };
|
||||
}
|
||||
//线条形状与箭头待处理
|
||||
//switch (diagramLink.Router)
|
||||
//{
|
||||
// case "Normal": linkModel.Router = Routers.Normal; break;
|
||||
// case "Orthogonal": linkModel.Router = Routers.Orthogonal; break;
|
||||
//}
|
||||
//switch (diagramLink.PathGenerator)
|
||||
//{
|
||||
// case "Smooth": linkModel.PathGenerator = PathGenerators.Smooth; break;
|
||||
// case "Straight": linkModel.PathGenerator = PathGenerators.Straight; break;
|
||||
|
||||
//}
|
||||
|
||||
//if (!string.IsNullOrEmpty(diagramLink.SourceMarkerPath))
|
||||
//{
|
||||
// linkModel.SourceMarker = new LinkMarker(diagramLink.SourceMarkerPath, diagramLink.SourceMarkerWidth ?? 10.0);
|
||||
//}
|
||||
//if (!string.IsNullOrEmpty(diagramLink.TargetMarkerPath))
|
||||
//{
|
||||
// linkModel.TargetMarker = new LinkMarker(diagramLink.TargetMarkerPath, diagramLink.TargetMarkerWidth ?? 10.0);
|
||||
//}
|
||||
return linkModel;
|
||||
}
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user