diff --git a/AIStudio.Wpf.DiagramDesigner/AIStudio.Wpf.DiagramDesigner_cqtxzinf_wpftmp.csproj b/AIStudio.Wpf.DiagramDesigner/AIStudio.Wpf.DiagramDesigner_cqtxzinf_wpftmp.csproj
new file mode 100644
index 0000000..89b49b2
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner/AIStudio.Wpf.DiagramDesigner_cqtxzinf_wpftmp.csproj
@@ -0,0 +1,267 @@
+
+
+ AIStudio.Wpf.DiagramDesigner
+ obj\Debug\
+ obj\
+ F:\aistudio.-wpf.-diagram\AIStudio.Wpf.DiagramDesigner\obj\
+ <_TargetAssemblyProjectName>AIStudio.Wpf.DiagramDesigner
+
+
+
+ true
+ AIStudio.Wpf.Controls
+ akwkevin
+ https://gitee.com/akwkevin
+ A.png
+
+
+ 1.0.5
+ 一个Wpf的Diagram控件基础库
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AIStudio.Wpf.DiagramDesigner/Helpers/PointHelper.cs b/AIStudio.Wpf.DiagramDesigner/Helpers/PointHelper.cs
index b05eb20..a104f9e 100644
--- a/AIStudio.Wpf.DiagramDesigner/Helpers/PointHelper.cs
+++ b/AIStudio.Wpf.DiagramDesigner/Helpers/PointHelper.cs
@@ -1,13 +1,14 @@
-using AIStudio.Wpf.DiagramDesigner.Geometrys;
+using System;
+using AIStudio.Wpf.DiagramDesigner.Geometrys;
namespace AIStudio.Wpf.DiagramDesigner
{
public class PointHelper
{
- public static PointBase GetPointForConnector(FullyCreatedConnectorInfo connector)
+ public static PointBase GetPointForConnector(FullyCreatedConnectorInfo connector, bool middle = false)
{
PointBase point = new PointBase();
- if (connector == null)
+ if (connector == null || connector.DataItem == null)
{
return point;
}
@@ -19,7 +20,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
else if (connector.IsPortless)
{
- point = connector.DataItem?.GetBounds().Center?? connector.MiddlePosition;
+ point = connector.DataItem.MiddlePosition;
}
else
{
@@ -54,7 +55,20 @@ namespace AIStudio.Wpf.DiagramDesigner
break;
}
}
- return point;
+
+ if (middle)
+ {
+ point.X = point.X + connector.ConnectorWidth / 2;
+ point.Y = point.Y + connector.ConnectorHeight / 2;
+ }
+ //旋转后的坐标
+ var newX = (point.X - connector.DataItem.MiddlePosition.X) * Math.Cos(connector.DataItem.Angle * Math.PI / 180) - (point.Y - connector.DataItem.MiddlePosition.Y) * Math.Sin(connector.DataItem.Angle * Math.PI / 180) + connector.DataItem.MiddlePosition.X;
+ var newY = (point.Y - connector.DataItem.MiddlePosition.Y) * Math.Cos(connector.DataItem.Angle * Math.PI / 180) - (point.X - connector.DataItem.MiddlePosition.X) * Math.Sin(connector.DataItem.Angle * Math.PI / 180) + connector.DataItem.MiddlePosition.Y;
+ //放大缩小后的坐标
+
+ newX = (newX - connector.DataItem.MiddlePosition.X) * connector.DataItem.ScaleX + connector.DataItem.MiddlePosition.X;
+ newY = (newY - connector.DataItem.MiddlePosition.Y) * connector.DataItem.ScaleY + connector.DataItem.MiddlePosition.Y;
+ return new PointBase(newX, newY);
}
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs
index 118109a..59f0fce 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs
@@ -548,15 +548,15 @@ namespace AIStudio.Wpf.DiagramDesigner
var startMiddle = new RectangleBase
(
- Math.Abs((PathGeneratorResult.SourceMarkerPosition.X + (source.Value.X - Area.Left)) / 2),
- Math.Abs((PathGeneratorResult.SourceMarkerPosition.Y + (source.Value.Y - Area.Top)) / 2),
+ (PathGeneratorResult.SourceMarkerPosition.X + (source.Value.X - Area.Left)) / 2,
+ (PathGeneratorResult.SourceMarkerPosition.Y + (source.Value.Y - Area.Top)) / 2,
0,
0
);
var endMiddle = new RectangleBase
(
- Math.Abs((PathGeneratorResult.TargetMarkerPosition.X + (target.Value.X - Area.Left)) / 2),
- Math.Abs((PathGeneratorResult.TargetMarkerPosition.Y + (target.Value.Y - Area.Top)) / 2),
+ (PathGeneratorResult.TargetMarkerPosition.X + (target.Value.X - Area.Left)) / 2,
+ (PathGeneratorResult.TargetMarkerPosition.Y + (target.Value.Y - Area.Top)) / 2,
0,
0
);
@@ -589,8 +589,8 @@ namespace AIStudio.Wpf.DiagramDesigner
if (SourceConnectorInfo.DataItem == null || (IsFullConnection && SinkConnectorInfoFully.DataItem == null))
return (null, null);
- var sourceCenter = SourceConnectorInfo.IsPortless ? SourceConnectorInfo.DataItem.GetBounds().Center : SourceConnectorInfo.MiddlePosition;
- var targetCenter = SinkConnectorInfoFully?.IsPortless == true ? SinkConnectorInfoFully?.DataItem?.GetBounds().Center ?? OnGoingPosition : SinkConnectorInfoFully?.MiddlePosition ?? OnGoingPosition;
+ var sourceCenter = SourceConnectorInfo.IsPortless ? SourceConnectorInfo.DataItem.MiddlePosition : SourceConnectorInfo.MiddlePosition;
+ var targetCenter = SinkConnectorInfoFully?.IsPortless == true ? SinkConnectorInfoFully?.DataItem?.MiddlePosition ?? OnGoingPosition : SinkConnectorInfoFully?.MiddlePosition ?? OnGoingPosition;
var firstPt = route.Length > 0 ? route[0] : targetCenter;
var secondPt = route.Length > 0 ? route[0] : sourceCenter;
var sourceLine = new LineBase(firstPt, sourceCenter);
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs
index 1c41c82..3ccb3ff 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs
@@ -83,6 +83,14 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
+ public override PointBase MiddlePosition
+ {
+ get
+ {
+ return PointHelper.GetPointForConnector(this, true);
+ }
+ }
+
private List menuOptions;
public IEnumerable MenuOptions
{
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs
index b40dac6..9c29184 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs
@@ -157,6 +157,14 @@ namespace AIStudio.Wpf.DiagramDesigner
get;
}
+ public virtual PointBase MiddlePosition
+ {
+ get
+ {
+ return GetBounds().Center;
+ }
+ }
+
private string _icon;
[CanDo]
public string Icon