mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-05-01 05:33:23 +08:00
减少一层逻辑关系
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user