mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-05-03 22:41:30 +08:00
修复保存项目再开时连线重复添加了 start、end点
This commit is contained in:
@@ -2,13 +2,10 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using AIStudio.Wpf.DiagramDesigner.Controls;
|
|
||||||
using AIStudio.Wpf.DiagramDesigner.Geometrys;
|
using AIStudio.Wpf.DiagramDesigner.Geometrys;
|
||||||
using AIStudio.Wpf.DiagramDesigner.Helpers;
|
using AIStudio.Wpf.DiagramDesigner.Helpers;
|
||||||
using SvgPathProperties;
|
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)
|
public ConnectionViewModel(IDiagramViewModel root, ConnectorInfoBase sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode = DrawMode.ConnectingLineSmooth, RouterMode routerMode = AIStudio.Wpf.DiagramDesigner.RouterMode.RouterNormal) : base(root)
|
||||||
{
|
{
|
||||||
_pathMode = drawMode.ToString();
|
_pathMode = drawMode.ToString();
|
||||||
_routerMode = routerMode.ToString();
|
_routerMode = routerMode.ToString();
|
||||||
Init(root, sourceConnectorInfo, sinkConnectorInfo);
|
Init(root, sourceConnectorInfo, sinkConnectorInfo);
|
||||||
@@ -65,16 +62,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
if (sinkConnectorInfo is FullyCreatedConnectorInfo sink && sink.DataItem.ShowArrow == false)
|
if (sinkConnectorInfo is FullyCreatedConnectorInfo sink && sink.DataItem.ShowArrow == false)
|
||||||
{
|
{
|
||||||
this.ShapeViewModel.SinkMarker = new SharpPath("", 10, 10, PathStyle.None, SizeStyle.Middle);
|
this.ShapeViewModel.SinkMarker = new SharpPath("", 10, 10, PathStyle.None, SizeStyle.Middle);
|
||||||
}
|
}
|
||||||
var routetype = TypeHelper.GetType(RouterMode);
|
var routetype = TypeHelper.GetType(RouterMode);
|
||||||
Router = routetype != null ? (System.Activator.CreateInstance(routetype) as IRouter) : new RouterNormal();
|
Router = routetype != null ? (System.Activator.CreateInstance(routetype) as IRouter) : new RouterNormal();
|
||||||
var pathGeneratortype = TypeHelper.GetType(PathMode);
|
var pathGeneratortype = TypeHelper.GetType(PathMode);
|
||||||
PathGenerator = pathGeneratortype != null ? (System.Activator.CreateInstance(pathGeneratortype) as IPathGenerator) : new ConnectingLineSmooth();
|
PathGenerator = pathGeneratortype != null ? (System.Activator.CreateInstance(pathGeneratortype) as IPathGenerator) : new ConnectingLineSmooth();
|
||||||
IsLoaded= true;
|
IsLoaded = true;
|
||||||
|
|
||||||
this.SourceConnectorInfo = sourceConnectorInfo;
|
this.SourceConnectorInfo = sourceConnectorInfo;
|
||||||
this.SinkConnectorInfo = sinkConnectorInfo;
|
this.SinkConnectorInfo = sinkConnectorInfo;
|
||||||
|
|
||||||
|
|
||||||
DeleteConnectionCommand = new SimpleCommand(Command_Enable, DeleteConnection);
|
DeleteConnectionCommand = new SimpleCommand(Command_Enable, DeleteConnection);
|
||||||
AddVertexCommand = new SimpleCommand(Command_Enable, AddVertex);
|
AddVertexCommand = new SimpleCommand(Command_Enable, AddVertex);
|
||||||
@@ -87,8 +84,18 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
|
|
||||||
if (designerbase is ConnectionItem designer)
|
if (designerbase is ConnectionItem designer)
|
||||||
{
|
{
|
||||||
Vertices = new ObservableCollection<ConnectorVertexModel>(designer.Vertices.Select(p => new ConnectorVertexModel(this.Root, this, designer)));
|
Vertices = new ObservableCollection<ConnectorVertexModel>(designer.Vertices.Select(p => {
|
||||||
Labels = new ObservableCollection<ConnectorLabelModel>(designer.Labels.Select(p => new ConnectorLabelModel(this.Root, this, designer)));
|
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)
|
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)
|
if (sender is ConnectionViewModel)
|
||||||
{
|
{
|
||||||
@@ -577,7 +584,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
{
|
{
|
||||||
UpdatePathGeneratorResult();
|
UpdatePathGeneratorResult();
|
||||||
}
|
}
|
||||||
else if(connectorVertexModel.ConnectorVertexType == ConnectorVertexType.Start)
|
else if (connectorVertexModel.ConnectorVertexType == ConnectorVertexType.Start)
|
||||||
{
|
{
|
||||||
var nearPort = Root.FindNearPortToAttachTo(this, ConnectorVertexType.Start);
|
var nearPort = Root.FindNearPortToAttachTo(this, ConnectorVertexType.Start);
|
||||||
SetSourcePort(new PartCreatedConnectorInfo(connectorVertexModel.Position.X, connectorVertexModel.Position.Y));
|
SetSourcePort(new PartCreatedConnectorInfo(connectorVertexModel.Position.X, connectorVertexModel.Position.Y));
|
||||||
@@ -683,12 +690,12 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
StartAngle = PathGeneratorResult.SourceMarkerAngle;
|
StartAngle = PathGeneratorResult.SourceMarkerAngle;
|
||||||
EndAngle = PathGeneratorResult.TargetMarkerAngle;
|
EndAngle = PathGeneratorResult.TargetMarkerAngle;
|
||||||
|
|
||||||
StartPoint = new PointBase(source.Value.X - Area.Left , source.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);
|
EndPoint = new PointBase(target.Value.X - Area.Left, target.Value.Y - Area.Top);
|
||||||
|
|
||||||
var startVertice = Vertices.FirstOrDefault(p => p.ConnectorVertexType == ConnectorVertexType.Start);
|
var startVertice = Vertices.FirstOrDefault(p => p.ConnectorVertexType == ConnectorVertexType.Start);
|
||||||
if (startVertice == null)
|
if (startVertice == null)
|
||||||
{
|
{
|
||||||
startVertice = AddEndsVertex(StartPoint, ConnectorVertexType.Start);
|
startVertice = AddEndsVertex(StartPoint, ConnectorVertexType.Start);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -697,7 +704,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
startVertice.SetPosition(StartPoint);
|
startVertice.SetPosition(StartPoint);
|
||||||
IsInternalChanged = true;
|
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;
|
startVertice.ColorViewModel.LineColor.Color = SourceConnectorInfoFully != null ? Colors.DarkRed : Colors.Blue;
|
||||||
|
|
||||||
var endVertice = Vertices.FirstOrDefault(p => p.ConnectorVertexType == ConnectorVertexType.End);
|
var endVertice = Vertices.FirstOrDefault(p => p.ConnectorVertexType == ConnectorVertexType.End);
|
||||||
@@ -957,7 +964,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
public ConnectorVertexModel AddEndsVertex(PointBase pointBase, ConnectorVertexType connectorVertexType)
|
public ConnectorVertexModel AddEndsVertex(PointBase pointBase, ConnectorVertexType connectorVertexType)
|
||||||
{
|
{
|
||||||
var vertice = new ConnectorVertexModel(this, pointBase);
|
var vertice = new ConnectorVertexModel(this, pointBase);
|
||||||
vertice.ConnectorVertexType= connectorVertexType;
|
vertice.ConnectorVertexType = connectorVertexType;
|
||||||
vertice.PropertyChanged += new WeakINPCEventHandler(Item_PropertyChanged).Handler;
|
vertice.PropertyChanged += new WeakINPCEventHandler(Item_PropertyChanged).Handler;
|
||||||
Vertices.Add(vertice);
|
Vertices.Add(vertice);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user