减少一层逻辑关系

This commit is contained in:
艾竹
2023-01-15 20:27:39 +08:00
parent 7d77864311
commit 5bdf10445f
9 changed files with 37 additions and 29 deletions

View File

@@ -14,8 +14,8 @@ namespace AIStudio.Wpf.DiagramDesigner
if (connector.IsInnerPoint) if (connector.IsInnerPoint)
{ {
point = new PointBase(connector.DataItem.Left + connector.DataItem.ItemWidth * connector.XRatio, point = new PointBase(connector.DataItem.Left + connector.DataItem.ItemWidth * connector.XRatio - connector.ConnectorWidth / 2,
connector.DataItem.Top + connector.DataItem.ItemHeight * connector.YRatio); connector.DataItem.Top + connector.DataItem.ItemHeight * connector.YRatio - connector.ConnectorHeight / 2);
} }
else else
{ {
@@ -23,16 +23,16 @@ namespace AIStudio.Wpf.DiagramDesigner
switch (connector.Orientation) switch (connector.Orientation)
{ {
case ConnectorOrientation.Top: case ConnectorOrientation.Top:
point = new PointBase(connector.DataItem.Left + (connector.DataItem.ItemWidth / 2), connector.DataItem.Top); point = new PointBase(connector.DataItem.Left + (connector.DataItem.ItemWidth / 2) - connector.ConnectorWidth / 2, connector.DataItem.Top - connector.ConnectorHeight / 2);
break; break;
case ConnectorOrientation.Bottom: case ConnectorOrientation.Bottom:
point = new PointBase(connector.DataItem.Left + (connector.DataItem.ItemWidth / 2), (connector.DataItem.Top + connector.DataItem.ItemHeight)); point = new PointBase(connector.DataItem.Left + (connector.DataItem.ItemWidth / 2) - connector.ConnectorWidth / 2, (connector.DataItem.Top + connector.DataItem.ItemHeight) - connector.ConnectorHeight / 2);
break; break;
case ConnectorOrientation.Right: case ConnectorOrientation.Right:
point = new PointBase(connector.DataItem.Left + connector.DataItem.ItemWidth, connector.DataItem.Top + (connector.DataItem.ItemHeight / 2)); point = new PointBase(connector.DataItem.Left + connector.DataItem.ItemWidth - connector.ConnectorWidth / 2, connector.DataItem.Top + (connector.DataItem.ItemHeight / 2) - connector.ConnectorHeight / 2);
break; break;
case ConnectorOrientation.Left: case ConnectorOrientation.Left:
point = new PointBase(connector.DataItem.Left, connector.DataItem.Top + (connector.DataItem.ItemHeight / 2)); point = new PointBase(connector.DataItem.Left - connector.ConnectorWidth / 2, connector.DataItem.Top + (connector.DataItem.ItemHeight / 2) - connector.ConnectorHeight / 2);
break; break;
} }
} }

View File

@@ -33,10 +33,10 @@ namespace AIStudio.Wpf.DiagramDesigner
private static PointBase[] GetRouteWithMiddlePoints(IDiagramViewModel _, ConnectorViewModel link, PointBase[] route) private static PointBase[] GetRouteWithMiddlePoints(IDiagramViewModel _, ConnectorViewModel link, PointBase[] route)
{ {
var middle = GetMiddlePoints( var middle = GetMiddlePoints(
link.SourceConnectorInfo.Location.Position, link.SourceConnectorInfo.MiddlePosition,
link.SourceConnectorInfo.Orientation, link.SourceConnectorInfo.Orientation,
link.SinkConnectorInfo.Location.Position, link.SinkConnectorInfo.MiddlePosition,
link.IsFullConnection ? link.SinkConnectorInfoFully.Orientation : (link.SinkConnectorInfo.Location.Position.Y >= link.SourceConnectorInfo.Location.Position.Y ? ConnectorOrientation.Top : ConnectorOrientation.Bottom), link.IsFullConnection ? link.SinkConnectorInfoFully.Orientation : (link.SinkConnectorInfo.Position.Y >= link.SourceConnectorInfo.Position.Y ? ConnectorOrientation.Top : ConnectorOrientation.Bottom),
_.GridCellSize, _.GridCellSize,
_.GridMargin); _.GridMargin);

View File

@@ -38,8 +38,8 @@ namespace AIStudio.Wpf.DiagramDesigner
private static PointBase[] GetRouteWithFullConnectionLine(IDiagramViewModel _, ConnectorViewModel link, PointBase[] route) private static PointBase[] GetRouteWithFullConnectionLine(IDiagramViewModel _, ConnectorViewModel link, PointBase[] route)
{ {
var sourceInnerPoint = link.SourceConnectorInfo.IsInnerPoint; var sourceInnerPoint = link.SourceConnectorInfo.IsInnerPoint;
PointBase sourcePoint = link.SourceConnectorInfo.Location.MiddlePosition; PointBase sourcePoint = link.SourceConnectorInfo.MiddlePosition;
PointBase sinkPoint = link.SinkConnectorInfo.Location.MiddlePosition; PointBase sinkPoint = link.SinkConnectorInfo.MiddlePosition;
ConnectorOrientation sourceOrientation = link.SourceConnectorInfo.Orientation; ConnectorOrientation sourceOrientation = link.SourceConnectorInfo.Orientation;
ConnectorOrientation sinkOrientation = link.SinkConnectorInfoFully.Orientation; ConnectorOrientation sinkOrientation = link.SinkConnectorInfoFully.Orientation;
@@ -243,8 +243,8 @@ namespace AIStudio.Wpf.DiagramDesigner
private static PointBase[] GetRouteWithPartConnectionLine(IDiagramViewModel diagramViewModel, ConnectorViewModel link, PointBase[] route) private static PointBase[] GetRouteWithPartConnectionLine(IDiagramViewModel diagramViewModel, ConnectorViewModel link, PointBase[] route)
{ {
var sourceInnerPoint = link.SourceConnectorInfo.IsInnerPoint; var sourceInnerPoint = link.SourceConnectorInfo.IsInnerPoint;
PointBase sourcePoint = link.SourceConnectorInfo.Location.MiddlePosition; PointBase sourcePoint = link.SourceConnectorInfo.MiddlePosition;
PointBase sinkPoint = link.SinkConnectorInfo.Location.MiddlePosition; PointBase sinkPoint = link.SinkConnectorInfo.MiddlePosition;
ConnectorOrientation sourceOrientation = link.SourceConnectorInfo.Orientation; ConnectorOrientation sourceOrientation = link.SourceConnectorInfo.Orientation;
ConnectorOrientation preferredOrientation = link.SourceConnectorInfo.Orientation; ConnectorOrientation preferredOrientation = link.SourceConnectorInfo.Orientation;

View File

@@ -7,7 +7,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
public static PointBase GetPortPositionBasedOnAlignment(ConnectorInfoBase port) public static PointBase GetPortPositionBasedOnAlignment(ConnectorInfoBase port)
{ {
var pt = port.Location.Position; var pt = port.Position;
switch (port.Orientation) switch (port.Orientation)
{ {
case ConnectorOrientation.Top: case ConnectorOrientation.Top:

View File

@@ -10,9 +10,17 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
public abstract class ConnectorInfoBase : BindableBase public abstract class ConnectorInfoBase : BindableBase
{ {
public virtual ConnectorPoint Location public virtual PointBase Position
{ {
get; get;
}
public virtual PointBase MiddlePosition
{
get
{
return new PointBase(Position.X + ConnectorWidth / 2, Position.Y + ConnectorHeight / 2);
}
} }
public ConnectorInfoBase(ConnectorOrientation orientation) public ConnectorInfoBase(ConnectorOrientation orientation)

View File

@@ -296,7 +296,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
if (SetProperty(ref _sinkConnectorInfo, value)) if (SetProperty(ref _sinkConnectorInfo, value))
{ {
SourceB = _sinkConnectorInfo.Location; SourceB = _sinkConnectorInfo.Position;
if (_sinkConnectorInfo is FullyCreatedConnectorInfo) if (_sinkConnectorInfo is FullyCreatedConnectorInfo)
{ {
(((FullyCreatedConnectorInfo)_sinkConnectorInfo).DataItem as INotifyPropertyChanged).PropertyChanged += new WeakINPCEventHandler(ConnectorViewModel_PropertyChanged).Handler; (((FullyCreatedConnectorInfo)_sinkConnectorInfo).DataItem as INotifyPropertyChanged).PropertyChanged += new WeakINPCEventHandler(ConnectorViewModel_PropertyChanged).Handler;
@@ -325,7 +325,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get get
{ {
return SinkConnectorInfoPart?.Location?.MiddlePosition ?? PointBase.Zero; return SinkConnectorInfoPart?.MiddlePosition ?? PointBase.Zero;
} }
} }
@@ -509,9 +509,9 @@ namespace AIStudio.Wpf.DiagramDesigner
return null; return null;
if (marker == null) if (marker == null)
return port.Location.MiddlePosition; return port.MiddlePosition;
var pt = port.Location.Position; var pt = port.Position;
switch (port.Orientation) switch (port.Orientation)
{ {
case ConnectorOrientation.Top: case ConnectorOrientation.Top:

View File

@@ -425,12 +425,12 @@ namespace AIStudio.Wpf.DiagramDesigner
var rightPort = RightConnector; var rightPort = RightConnector;
var bottomPort = BottomConnector; var bottomPort = BottomConnector;
var left = leftPort == null ? Position.X: Math.Min(Position.X, leftPort.Location.Position.X); var left = leftPort == null ? Position.X: Math.Min(Position.X, leftPort.Position.X);
var top = topPort == null ? Position.Y : Math.Min(Position.Y, topPort.Location.Position.Y); var top = topPort == null ? Position.Y : Math.Min(Position.Y, topPort.Position.Y);
var right = rightPort == null ? Position.X + ItemWidth : var right = rightPort == null ? Position.X + ItemWidth :
Math.Max(rightPort.Location.Position.X + rightPort.ConnectorWidth, Position.X + ItemWidth); Math.Max(rightPort.Position.X + rightPort.ConnectorWidth, Position.X + ItemWidth);
var bottom = bottomPort == null ? Position.Y + ItemHeight : var bottom = bottomPort == null ? Position.Y + ItemHeight :
Math.Max(bottomPort.Location.Position.Y + bottomPort.ConnectorHeight, Position.Y + ItemHeight); Math.Max(bottomPort.Position.Y + bottomPort.ConnectorHeight, Position.Y + ItemHeight);
return new RectangleBase(left, top, right, bottom, true); return new RectangleBase(left, top, right, bottom, true);
} }

View File

@@ -9,7 +9,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
public class FullyCreatedConnectorInfo : ConnectorInfoBase public class FullyCreatedConnectorInfo : ConnectorInfoBase
{ {
public override ConnectorPoint Location public override PointBase Position
{ {
get get
{ {

View File

@@ -9,18 +9,18 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
public class PartCreatedConnectionInfo : ConnectorInfoBase public class PartCreatedConnectionInfo : ConnectorInfoBase
{ {
private ConnectorPoint location; private PointBase position;
public override ConnectorPoint Location public override PointBase Position
{ {
get get
{ {
return location; return position;
} }
} }
public PartCreatedConnectionInfo(double X, double Y) : base(ConnectorOrientation.None) public PartCreatedConnectionInfo(double X, double Y) : base(ConnectorOrientation.None)
{ {
this.location = new ConnectorPoint(X, Y); this.position = new PointBase(X, Y);
} }
} }
} }