From 5bdf10445fc6010a26b7a477280edab2fde1ad9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=89=BE=E7=AB=B9?= Date: Sun, 15 Jan 2023 20:27:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=8F=E5=B0=91=E4=B8=80=E5=B1=82=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AIStudio.Wpf.DiagramDesigner/Helpers/PointHelper.cs | 12 ++++++------ .../PathGenerators/PathGenerators.Boundary.cs | 6 +++--- .../PathGenerators/PathGenerators.Corner.cs | 8 ++++---- .../Routers/Routers.Utils.cs | 2 +- .../ViewModels/BaseViewModel/ConnectorInfoBase.cs | 12 ++++++++++-- .../ViewModels/BaseViewModel/ConnectorViewModel.cs | 8 ++++---- .../BaseViewModel/DesignerItemViewModelBase.cs | 8 ++++---- .../BaseViewModel/FullyCreatedConnectorInfo.cs | 2 +- .../BaseViewModel/PartCreatedConnectionInfo.cs | 8 ++++---- 9 files changed, 37 insertions(+), 29 deletions(-) diff --git a/AIStudio.Wpf.DiagramDesigner/Helpers/PointHelper.cs b/AIStudio.Wpf.DiagramDesigner/Helpers/PointHelper.cs index 8982f9e..cab4e4b 100644 --- a/AIStudio.Wpf.DiagramDesigner/Helpers/PointHelper.cs +++ b/AIStudio.Wpf.DiagramDesigner/Helpers/PointHelper.cs @@ -14,8 +14,8 @@ namespace AIStudio.Wpf.DiagramDesigner if (connector.IsInnerPoint) { - point = new PointBase(connector.DataItem.Left + connector.DataItem.ItemWidth * connector.XRatio, - connector.DataItem.Top + connector.DataItem.ItemHeight * connector.YRatio); + 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); } else { @@ -23,16 +23,16 @@ namespace AIStudio.Wpf.DiagramDesigner switch (connector.Orientation) { 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; 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; 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; 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; } } diff --git a/AIStudio.Wpf.DiagramDesigner/PathGenerators/PathGenerators.Boundary.cs b/AIStudio.Wpf.DiagramDesigner/PathGenerators/PathGenerators.Boundary.cs index a501b22..cce913a 100644 --- a/AIStudio.Wpf.DiagramDesigner/PathGenerators/PathGenerators.Boundary.cs +++ b/AIStudio.Wpf.DiagramDesigner/PathGenerators/PathGenerators.Boundary.cs @@ -33,10 +33,10 @@ namespace AIStudio.Wpf.DiagramDesigner private static PointBase[] GetRouteWithMiddlePoints(IDiagramViewModel _, ConnectorViewModel link, PointBase[] route) { var middle = GetMiddlePoints( - link.SourceConnectorInfo.Location.Position, + link.SourceConnectorInfo.MiddlePosition, link.SourceConnectorInfo.Orientation, - link.SinkConnectorInfo.Location.Position, - link.IsFullConnection ? link.SinkConnectorInfoFully.Orientation : (link.SinkConnectorInfo.Location.Position.Y >= link.SourceConnectorInfo.Location.Position.Y ? ConnectorOrientation.Top : ConnectorOrientation.Bottom), + link.SinkConnectorInfo.MiddlePosition, + link.IsFullConnection ? link.SinkConnectorInfoFully.Orientation : (link.SinkConnectorInfo.Position.Y >= link.SourceConnectorInfo.Position.Y ? ConnectorOrientation.Top : ConnectorOrientation.Bottom), _.GridCellSize, _.GridMargin); diff --git a/AIStudio.Wpf.DiagramDesigner/PathGenerators/PathGenerators.Corner.cs b/AIStudio.Wpf.DiagramDesigner/PathGenerators/PathGenerators.Corner.cs index 535025f..d54d325 100644 --- a/AIStudio.Wpf.DiagramDesigner/PathGenerators/PathGenerators.Corner.cs +++ b/AIStudio.Wpf.DiagramDesigner/PathGenerators/PathGenerators.Corner.cs @@ -38,8 +38,8 @@ namespace AIStudio.Wpf.DiagramDesigner private static PointBase[] GetRouteWithFullConnectionLine(IDiagramViewModel _, ConnectorViewModel link, PointBase[] route) { var sourceInnerPoint = link.SourceConnectorInfo.IsInnerPoint; - PointBase sourcePoint = link.SourceConnectorInfo.Location.MiddlePosition; - PointBase sinkPoint = link.SinkConnectorInfo.Location.MiddlePosition; + PointBase sourcePoint = link.SourceConnectorInfo.MiddlePosition; + PointBase sinkPoint = link.SinkConnectorInfo.MiddlePosition; ConnectorOrientation sourceOrientation = link.SourceConnectorInfo.Orientation; ConnectorOrientation sinkOrientation = link.SinkConnectorInfoFully.Orientation; @@ -243,8 +243,8 @@ namespace AIStudio.Wpf.DiagramDesigner private static PointBase[] GetRouteWithPartConnectionLine(IDiagramViewModel diagramViewModel, ConnectorViewModel link, PointBase[] route) { var sourceInnerPoint = link.SourceConnectorInfo.IsInnerPoint; - PointBase sourcePoint = link.SourceConnectorInfo.Location.MiddlePosition; - PointBase sinkPoint = link.SinkConnectorInfo.Location.MiddlePosition; + PointBase sourcePoint = link.SourceConnectorInfo.MiddlePosition; + PointBase sinkPoint = link.SinkConnectorInfo.MiddlePosition; ConnectorOrientation sourceOrientation = link.SourceConnectorInfo.Orientation; ConnectorOrientation preferredOrientation = link.SourceConnectorInfo.Orientation; diff --git a/AIStudio.Wpf.DiagramDesigner/Routers/Routers.Utils.cs b/AIStudio.Wpf.DiagramDesigner/Routers/Routers.Utils.cs index 333c987..f97b80e 100644 --- a/AIStudio.Wpf.DiagramDesigner/Routers/Routers.Utils.cs +++ b/AIStudio.Wpf.DiagramDesigner/Routers/Routers.Utils.cs @@ -7,7 +7,7 @@ namespace AIStudio.Wpf.DiagramDesigner { public static PointBase GetPortPositionBasedOnAlignment(ConnectorInfoBase port) { - var pt = port.Location.Position; + var pt = port.Position; switch (port.Orientation) { case ConnectorOrientation.Top: diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorInfoBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorInfoBase.cs index ebf0036..f421ae4 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorInfoBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorInfoBase.cs @@ -10,9 +10,17 @@ namespace AIStudio.Wpf.DiagramDesigner { 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) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorViewModel.cs index 77317cc..3c93c4d 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorViewModel.cs @@ -296,7 +296,7 @@ namespace AIStudio.Wpf.DiagramDesigner { if (SetProperty(ref _sinkConnectorInfo, value)) { - SourceB = _sinkConnectorInfo.Location; + SourceB = _sinkConnectorInfo.Position; if (_sinkConnectorInfo is FullyCreatedConnectorInfo) { (((FullyCreatedConnectorInfo)_sinkConnectorInfo).DataItem as INotifyPropertyChanged).PropertyChanged += new WeakINPCEventHandler(ConnectorViewModel_PropertyChanged).Handler; @@ -325,7 +325,7 @@ namespace AIStudio.Wpf.DiagramDesigner { get { - return SinkConnectorInfoPart?.Location?.MiddlePosition ?? PointBase.Zero; + return SinkConnectorInfoPart?.MiddlePosition ?? PointBase.Zero; } } @@ -509,9 +509,9 @@ namespace AIStudio.Wpf.DiagramDesigner return null; if (marker == null) - return port.Location.MiddlePosition; + return port.MiddlePosition; - var pt = port.Location.Position; + var pt = port.Position; switch (port.Orientation) { case ConnectorOrientation.Top: diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs index e26fdb9..5790a6a 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs @@ -425,12 +425,12 @@ namespace AIStudio.Wpf.DiagramDesigner var rightPort = RightConnector; var bottomPort = BottomConnector; - var left = leftPort == null ? Position.X: Math.Min(Position.X, leftPort.Location.Position.X); - var top = topPort == null ? Position.Y : Math.Min(Position.Y, topPort.Location.Position.Y); + var left = leftPort == null ? Position.X: Math.Min(Position.X, leftPort.Position.X); + var top = topPort == null ? Position.Y : Math.Min(Position.Y, topPort.Position.Y); 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 : - 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); } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/FullyCreatedConnectorInfo.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/FullyCreatedConnectorInfo.cs index 113ff1b..0e8da68 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/FullyCreatedConnectorInfo.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/FullyCreatedConnectorInfo.cs @@ -9,7 +9,7 @@ namespace AIStudio.Wpf.DiagramDesigner { public class FullyCreatedConnectorInfo : ConnectorInfoBase { - public override ConnectorPoint Location + public override PointBase Position { get { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/PartCreatedConnectionInfo.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/PartCreatedConnectionInfo.cs index 31bca19..3af00af 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/PartCreatedConnectionInfo.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/PartCreatedConnectionInfo.cs @@ -9,18 +9,18 @@ namespace AIStudio.Wpf.DiagramDesigner { public class PartCreatedConnectionInfo : ConnectorInfoBase { - private ConnectorPoint location; - public override ConnectorPoint Location + private PointBase position; + public override PointBase Position { get { - return location; + return position; } } public PartCreatedConnectionInfo(double X, double Y) : base(ConnectorOrientation.None) { - this.location = new ConnectorPoint(X, Y); + this.position = new PointBase(X, Y); } } }