diff --git a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml
index c9f8d4c..e6ff2f6 100644
--- a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml
+++ b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml
@@ -1139,14 +1139,14 @@
Format="0 pt" />
-
+
-
+
+
-
+
+ RenderTransformOrigin="0.5,0.5">
@@ -1190,6 +1191,8 @@
+
+
diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml
index aad7ab7..4c87c8a 100644
--- a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml
+++ b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml
@@ -559,20 +559,19 @@
Data="{Binding ColorViewModel.RightArrowPathStyle,Converter={StaticResource ArrowPathConverter}}"
Visibility="{Binding Path=IsFullConnection, Converter={x:Static s:BoolToVisibilityConverter.Instance}}"
Fill="{Binding ColorViewModel.LineColor,Converter={StaticResource ColorBrushConverter}}"
- HorizontalAlignment="Left"
Height="{Binding ColorViewModel.RightArrowSizeStyle, Converter={StaticResource ArrowSizeConverter}}"
Width="{Binding ColorViewModel.RightArrowSizeStyle, Converter={StaticResource ArrowSizeConverter}}"
- Canvas.Left="{Binding EndPoint.X}"
- Canvas.Top="{Binding EndPoint.Y}"
- Stretch="Fill"
- Stroke="{Binding ColorViewModel.LineColor,Converter={StaticResource ColorBrushConverter}}"
- VerticalAlignment="Top"
+ Stretch="Fill"
+ Stroke="{Binding ColorViewModel.LineColor,Converter={StaticResource ColorBrushConverter}}"
RenderTransformOrigin="0.5,0.5">
-
+
+
+
+
-
-
+
+
+
@@ -662,60 +662,12 @@
Value="Visible"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorViewModel.cs
index 53c24c7..e0b3f16 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorViewModel.cs
@@ -37,6 +37,7 @@ namespace AIStudio.Wpf.DiagramDesigner
private void Init(FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo)
{
this.Parent = sourceConnectorInfo.DataItem.Parent;
+
if (Parent != null && Parent.ColorViewModel != null)
{
this.ColorViewModel = CopyHelper.Mapper(Parent.ColorViewModel);
@@ -45,6 +46,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{
this.ColorViewModel.RightArrowPathStyle = ArrowPathStyle.None;
}
+ ColorViewModel.PropertyChanged += ColorViewModel_PropertyChanged;
var routetype = GlobalType.AllTypes.Where(p => typeof(IRouter).IsAssignableFrom(p)).FirstOrDefault(p => p.Name == RouterMode);
Router = routetype != null ? (System.Activator.CreateInstance(routetype) as IRouter) : new RouterNormal();
@@ -55,7 +57,18 @@ namespace AIStudio.Wpf.DiagramDesigner
this.SourceConnectorInfo = sourceConnectorInfo;
this.SinkConnectorInfo = sinkConnectorInfo;
DeleteConnectionCommand = new SimpleCommand(DeleteConnection);
- AddVertexCommand = new SimpleCommand(AddVertex);
+ AddVertexCommand = new SimpleCommand(AddVertex);
+ }
+
+ private void ColorViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
+ {
+ if (e.PropertyName == nameof(ColorViewModel.LeftArrowPathStyle) ||
+ e.PropertyName == nameof(ColorViewModel.LeftArrowSizeStyle) ||
+ e.PropertyName == nameof(ColorViewModel.RightArrowPathStyle) ||
+ e.PropertyName == nameof(ColorViewModel.RightArrowSizeStyle))
+ {
+ UpdatePathGeneratorResult();
+ }
}
public override SelectableDesignerItemBase ToXmlObject()
@@ -200,7 +213,7 @@ namespace AIStudio.Wpf.DiagramDesigner
RectangleBase oldarea = _area;
if (SetProperty(ref _area, value))
{
- UpdateConnectionPoints();
+ UpdatePathGeneratorResult();
OutTextItemLocation(oldarea, value);
}
}
@@ -343,7 +356,7 @@ namespace AIStudio.Wpf.DiagramDesigner
Area = new RectangleBase(SourceA, SourceB);
}
- private void UpdateConnectionPoints()
+ private void UpdatePathGeneratorResult()
{
if (SourceConnectorInfo == null || SinkConnectorInfo == null)
return;
@@ -351,17 +364,77 @@ namespace AIStudio.Wpf.DiagramDesigner
var route = Router.Get(Parent, this);
(var source, var target) = FindConnectionPoints(route);
- if (source == null || target == null)
- return;
+ if (source == null || target == null)
+ return;
PathGeneratorResult = PathGenerator.Get(Parent, this, route, source.Value, target.Value);
-
- StartPoint = new PointBase(source.Value.X - Area.Left, source.Value.Y - Area.Top);
- EndPoint = new PointBase(target.Value.X - Area.Left, target.Value.Y - Area.Top);
+
+ //修正旋转
+ switch (SourceConnectorInfo.Orientation)
+ {
+ case ConnectorOrientation.Left:
+ {
+ StartPoint = new PointBase(PathGeneratorResult.SourceMarkerPosition.X, PathGeneratorResult.SourceMarkerPosition.Y - ColorViewModel.LeftArrowSize / 2);
+ break;
+ }
+ case ConnectorOrientation.Top:
+ {
+ StartPoint = new PointBase(PathGeneratorResult.SourceMarkerPosition.X - ColorViewModel.LeftArrowSize / 2, PathGeneratorResult.SourceMarkerPosition.Y);
+ break;
+ }
+ case ConnectorOrientation.Right:
+ {
+ StartPoint = new PointBase(PathGeneratorResult.SourceMarkerPosition.X - ColorViewModel.LeftArrowSize, PathGeneratorResult.SourceMarkerPosition.Y - ColorViewModel.LeftArrowSize / 2);
+ break;
+ }
+ case ConnectorOrientation.Bottom:
+ {
+ StartPoint = new PointBase(PathGeneratorResult.SourceMarkerPosition.X - ColorViewModel.LeftArrowSize / 2, PathGeneratorResult.SourceMarkerPosition.Y - ColorViewModel.LeftArrowSize);
+ break;
+ }
+ default:
+ {
+ StartPoint = PathGeneratorResult.SourceMarkerPosition;
+ break;
+ }
+ }
+
+ //修正旋转
+ switch (SinkConnectorInfo.Orientation)
+ {
+ case ConnectorOrientation.Left:
+ {
+ EndPoint = new PointBase(PathGeneratorResult.TargetMarkerPosition.X, PathGeneratorResult.TargetMarkerPosition.Y - ColorViewModel.RightArrowSize / 2);
+ break; }
+
+ case ConnectorOrientation.Top:
+ {
+ EndPoint = new PointBase(PathGeneratorResult.TargetMarkerPosition.X - ColorViewModel.RightArrowSize / 2, PathGeneratorResult.TargetMarkerPosition.Y);
+ break;
+ }
+ case ConnectorOrientation.Right:
+ {
+ EndPoint = new PointBase(PathGeneratorResult.TargetMarkerPosition.X - ColorViewModel.RightArrowSize, PathGeneratorResult.TargetMarkerPosition.Y - ColorViewModel.RightArrowSize / 2);
+ break;
+ }
+ case ConnectorOrientation.Bottom:
+ {
+ EndPoint = new PointBase(PathGeneratorResult.TargetMarkerPosition.X - ColorViewModel.RightArrowSize / 2, PathGeneratorResult.TargetMarkerPosition.Y - ColorViewModel.RightArrowSize);
+ break;
+ }
+ default:
+ {
+ EndPoint = PathGeneratorResult.TargetMarkerPosition;
+ break;
+ }
+ }
+
StartAngle = PathGeneratorResult.SourceMarkerAngle;
EndAngle = PathGeneratorResult.TargetMarkerAngle;
}
+
+
private void ConnectorViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
@@ -415,7 +488,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{
MouseButtonEventArgs mosueArg = ((EventToCommandArgs)parameter).EventArgs as MouseButtonEventArgs;
var position = mosueArg.GetPosition(((EventToCommandArgs)parameter).Sender as IInputElement);
-
+
ConnectionPoints.Add(new ConnectorPoint(position.X, position.Y));
if (!((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control))