2023-01-12 23:02:53 +08:00
|
|
|
|
using AIStudio.Wpf.DiagramDesigner.Geometrys;
|
2021-07-23 09:42:22 +08:00
|
|
|
|
|
2022-10-28 22:45:39 +08:00
|
|
|
|
namespace AIStudio.Wpf.DiagramDesigner
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
public class PointHelper
|
|
|
|
|
|
{
|
2023-01-08 09:22:37 +08:00
|
|
|
|
public static PointBase GetPointForConnector(FullyCreatedConnectorInfo connector)
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
2023-01-08 09:22:37 +08:00
|
|
|
|
PointBase point = new PointBase();
|
|
|
|
|
|
if (connector == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return point;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-07-23 09:42:22 +08:00
|
|
|
|
if (connector.IsInnerPoint)
|
|
|
|
|
|
{
|
2023-01-15 20:27:39 +08:00
|
|
|
|
point = new PointBase(connector.DataItem.Left + connector.DataItem.ItemWidth * connector.XRatio - connector.ConnectorWidth / 2,
|
|
|
|
|
|
connector.DataItem.Top + connector.DataItem.ItemHeight * connector.YRatio - connector.ConnectorHeight / 2);
|
2021-07-23 09:42:22 +08:00
|
|
|
|
}
|
2023-01-27 20:10:17 +08:00
|
|
|
|
else if (connector.IsPortless)
|
|
|
|
|
|
{
|
|
|
|
|
|
point = connector.DataItem?.GetBounds().Center?? connector.MiddlePosition;
|
|
|
|
|
|
}
|
2021-07-23 09:42:22 +08:00
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (connector.Orientation)
|
|
|
|
|
|
{
|
2023-01-27 20:10:17 +08:00
|
|
|
|
case ConnectorOrientation.Left:
|
|
|
|
|
|
point = new PointBase(connector.DataItem.Left - connector.ConnectorWidth / 2, connector.DataItem.Top + (connector.DataItem.ItemHeight / 2) - connector.ConnectorHeight / 2);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ConnectorOrientation.TopLeft:
|
|
|
|
|
|
point = new PointBase(connector.DataItem.Left - connector.ConnectorWidth / 2, connector.DataItem.Top - connector.ConnectorHeight / 2);
|
|
|
|
|
|
break;
|
2021-07-23 09:42:22 +08:00
|
|
|
|
case ConnectorOrientation.Top:
|
2023-01-15 20:27:39 +08:00
|
|
|
|
point = new PointBase(connector.DataItem.Left + (connector.DataItem.ItemWidth / 2) - connector.ConnectorWidth / 2, connector.DataItem.Top - connector.ConnectorHeight / 2);
|
2021-07-23 09:42:22 +08:00
|
|
|
|
break;
|
2023-01-27 20:10:17 +08:00
|
|
|
|
case ConnectorOrientation.TopRight:
|
|
|
|
|
|
point = new PointBase(connector.DataItem.Left + connector.DataItem.ItemWidth - connector.ConnectorWidth / 2, connector.DataItem.Top - connector.ConnectorHeight / 2);
|
2021-07-23 09:42:22 +08:00
|
|
|
|
break;
|
|
|
|
|
|
case ConnectorOrientation.Right:
|
2023-01-15 20:27:39 +08:00
|
|
|
|
point = new PointBase(connector.DataItem.Left + connector.DataItem.ItemWidth - connector.ConnectorWidth / 2, connector.DataItem.Top + (connector.DataItem.ItemHeight / 2) - connector.ConnectorHeight / 2);
|
2021-07-23 09:42:22 +08:00
|
|
|
|
break;
|
2023-01-27 20:10:17 +08:00
|
|
|
|
case ConnectorOrientation.BottomRight:
|
|
|
|
|
|
point = new PointBase(connector.DataItem.Left + connector.DataItem.ItemWidth - connector.ConnectorWidth / 2, connector.DataItem.Top + connector.DataItem.ItemHeight - connector.ConnectorHeight / 2);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ConnectorOrientation.Bottom:
|
|
|
|
|
|
point = new PointBase(connector.DataItem.Left + (connector.DataItem.ItemWidth / 2) - connector.ConnectorWidth / 2, connector.DataItem.Top + connector.DataItem.ItemHeight - connector.ConnectorHeight / 2);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ConnectorOrientation.BottomLeft:
|
|
|
|
|
|
point = new PointBase(connector.DataItem.Left - connector.ConnectorWidth / 2, connector.DataItem.Top + connector.DataItem.ItemHeight - connector.ConnectorHeight / 2);
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
point = new PointBase(connector.DataItem.Left + (connector.DataItem.ItemWidth / 2) - connector.ConnectorWidth / 2, connector.DataItem.Top + (connector.DataItem.ItemHeight / 2) - connector.ConnectorHeight / 2);
|
2021-07-23 09:42:22 +08:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return point;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|