mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-04-17 14:46:36 +08:00
修复旋转放大后 画线的问题
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user