修复保存项目再开时连线重复添加了 start、end点

This commit is contained in:
fan.yaying
2023-08-22 15:44:09 +08:00
parent 67d995bb27
commit 38e0981bb9

View File

@@ -2,13 +2,10 @@
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using AIStudio.Wpf.DiagramDesigner.Controls;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
using AIStudio.Wpf.DiagramDesigner.Helpers;
using SvgPathProperties;
@@ -31,7 +28,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
public ConnectionViewModel(IDiagramViewModel root, ConnectorInfoBase sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode = DrawMode.ConnectingLineSmooth, RouterMode routerMode = AIStudio.Wpf.DiagramDesigner.RouterMode.RouterNormal) : base(root)
{
{
_pathMode = drawMode.ToString();
_routerMode = routerMode.ToString();
Init(root, sourceConnectorInfo, sinkConnectorInfo);
@@ -65,16 +62,16 @@ namespace AIStudio.Wpf.DiagramDesigner
if (sinkConnectorInfo is FullyCreatedConnectorInfo sink && sink.DataItem.ShowArrow == false)
{
this.ShapeViewModel.SinkMarker = new SharpPath("", 10, 10, PathStyle.None, SizeStyle.Middle);
}
}
var routetype = TypeHelper.GetType(RouterMode);
Router = routetype != null ? (System.Activator.CreateInstance(routetype) as IRouter) : new RouterNormal();
var pathGeneratortype = TypeHelper.GetType(PathMode);
PathGenerator = pathGeneratortype != null ? (System.Activator.CreateInstance(pathGeneratortype) as IPathGenerator) : new ConnectingLineSmooth();
IsLoaded= true;
IsLoaded = true;
this.SourceConnectorInfo = sourceConnectorInfo;
this.SinkConnectorInfo = sinkConnectorInfo;
DeleteConnectionCommand = new SimpleCommand(Command_Enable, DeleteConnection);
AddVertexCommand = new SimpleCommand(Command_Enable, AddVertex);
@@ -87,8 +84,18 @@ namespace AIStudio.Wpf.DiagramDesigner
if (designerbase is ConnectionItem designer)
{
Vertices = new ObservableCollection<ConnectorVertexModel>(designer.Vertices.Select(p => new ConnectorVertexModel(this.Root, this, designer)));
Labels = new ObservableCollection<ConnectorLabelModel>(designer.Labels.Select(p => new ConnectorLabelModel(this.Root, this, designer)));
Vertices = new ObservableCollection<ConnectorVertexModel>(designer.Vertices.Select(p => {
ConnectorVertexModel temp = new ConnectorVertexModel(this.Root, this, designer) { ConnectorVertexType = p.ConnectorVertexType };
return temp;
}));
Labels = new ObservableCollection<ConnectorLabelModel>(designer.Labels.Select(p => {
ConnectorLabelModel temp = new ConnectorLabelModel(this.Root, this, designer)
{
Distance = p.Distance,
Offset = p.Offset
};
return temp;
}));
}
}
@@ -475,7 +482,7 @@ namespace AIStudio.Wpf.DiagramDesigner
protected override void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (IsLoaded == false || IsInternalChanged == true ) return;
if (IsLoaded == false || IsInternalChanged == true) return;
if (sender is ConnectionViewModel)
{
@@ -577,7 +584,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{
UpdatePathGeneratorResult();
}
else if(connectorVertexModel.ConnectorVertexType == ConnectorVertexType.Start)
else if (connectorVertexModel.ConnectorVertexType == ConnectorVertexType.Start)
{
var nearPort = Root.FindNearPortToAttachTo(this, ConnectorVertexType.Start);
SetSourcePort(new PartCreatedConnectorInfo(connectorVertexModel.Position.X, connectorVertexModel.Position.Y));
@@ -683,12 +690,12 @@ namespace AIStudio.Wpf.DiagramDesigner
StartAngle = PathGeneratorResult.SourceMarkerAngle;
EndAngle = PathGeneratorResult.TargetMarkerAngle;
StartPoint = new PointBase(source.Value.X - Area.Left , source.Value.Y - Area.Top );
EndPoint = new PointBase(target.Value.X - Area.Left , target.Value.Y - Area.Top);
StartPoint = new PointBase(source.Value.X - Area.Left, source.Value.Y - Area.Top);
EndPoint = new PointBase(target.Value.X - Area.Left, target.Value.Y - Area.Top);
var startVertice = Vertices.FirstOrDefault(p => p.ConnectorVertexType == ConnectorVertexType.Start);
if (startVertice == null)
{
{
startVertice = AddEndsVertex(StartPoint, ConnectorVertexType.Start);
}
else
@@ -697,7 +704,7 @@ namespace AIStudio.Wpf.DiagramDesigner
startVertice.SetPosition(StartPoint);
IsInternalChanged = true;
}
startVertice.ColorViewModel.FillColor.Color = SourceConnectorInfoFully != null? Colors.DarkRed : Colors.Blue;
startVertice.ColorViewModel.FillColor.Color = SourceConnectorInfoFully != null ? Colors.DarkRed : Colors.Blue;
startVertice.ColorViewModel.LineColor.Color = SourceConnectorInfoFully != null ? Colors.DarkRed : Colors.Blue;
var endVertice = Vertices.FirstOrDefault(p => p.ConnectorVertexType == ConnectorVertexType.End);
@@ -957,7 +964,7 @@ namespace AIStudio.Wpf.DiagramDesigner
public ConnectorVertexModel AddEndsVertex(PointBase pointBase, ConnectorVertexType connectorVertexType)
{
var vertice = new ConnectorVertexModel(this, pointBase);
vertice.ConnectorVertexType= connectorVertexType;
vertice.ConnectorVertexType = connectorVertexType;
vertice.PropertyChanged += new WeakINPCEventHandler(Item_PropertyChanged).Handler;
Vertices.Add(vertice);