嗯,自动获取曲线方向

This commit is contained in:
艾竹
2023-02-16 23:02:43 +08:00
parent 968adb0635
commit 08a4fddfdc
3 changed files with 31 additions and 10 deletions

View File

@@ -54,6 +54,10 @@ namespace AIStudio.Wpf.Flowchart
DiagramViewModel.DirectAddItemCommand.Execute(level3node1_1_2); DiagramViewModel.DirectAddItemCommand.Execute(level3node1_1_2);
level2node1_1.Children.Add(level3node1_1_2); level2node1_1.Children.Add(level3node1_1_2);
MindLevel3Node level3node1_1_3 = new MindLevel3Node() { Text = "分支主题1_3" };
DiagramViewModel.DirectAddItemCommand.Execute(level3node1_1_3);
level2node1_1.Children.Add(level3node1_1_3);
MindLevel2Node level2node1_2 = new MindLevel2Node() { Text = "分支主题2" }; MindLevel2Node level2node1_2 = new MindLevel2Node() { Text = "分支主题2" };
DiagramViewModel.DirectAddItemCommand.Execute(level2node1_2); DiagramViewModel.DirectAddItemCommand.Execute(level2node1_2);
level1node.Children.Add(level2node1_2); level1node.Children.Add(level2node1_2);

View File

@@ -69,7 +69,14 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
var cX = (route[0].X + route[1].X) / 2; var cX = (route[0].X + route[1].X) / 2;
var cY = (route[0].Y + route[1].Y) / 2; var cY = (route[0].Y + route[1].Y) / 2;
var curvePointA = GetCurvePoint(route[0].X, route[0].Y, cX, cY, link.SourceConnectorInfo?.Orientation);
var sourceOrientation = link.SourceConnectorInfo?.Orientation;
if (sourceOrientation == ConnectorOrientation.None)//按照线条的四象限来处理。
{
var slope = (route[1].Y - route[0].Y) / (route[1].X - route[0].X);
}
var curvePointA = GetCurvePoint(route[0].X, route[0].Y, cX, cY, sourceOrientation);
var curvePointB = GetCurvePoint(route[1].X, route[1].Y, cX, cY, link.SinkConnectorInfo?.Orientation); var curvePointB = GetCurvePoint(route[1].X, route[1].Y, cX, cY, link.SinkConnectorInfo?.Orientation);
return new[] { route[0], curvePointA, curvePointB, route[1] }; return new[] { route[0], curvePointA, curvePointB, route[1] };
} }

View File

@@ -66,32 +66,42 @@ namespace AIStudio.Wpf.Mind.ViewModels
} }
} }
public SizeBase GetSize() public SizeBase DesiredSize
{
get;set;
}
public SizeBase MeasureOverride()
{ {
var sizewithSpacing = SizeWithSpacing; var sizewithSpacing = SizeWithSpacing;
if (Children?.Count > 0) if (Children?.Count > 0)
{ {
var childrensizes = Children.Select(p => p.GetSize()); var childrensizes = Children.Select(p => p.MeasureOverride()).ToArray();
sizewithSpacing = new SizeBase(sizewithSpacing.Width + childrensizes.Max(p => p.Width), Math.Max(sizewithSpacing.Height, childrensizes.Sum(p => p.Height))); sizewithSpacing = new SizeBase(sizewithSpacing.Width + childrensizes.Max(p => p.Width), Math.Max(sizewithSpacing.Height, childrensizes.Sum(p => p.Height)));
} }
return sizewithSpacing; DesiredSize = sizewithSpacing;
return DesiredSize;
} }
public void LayoutUpdated() public void LayoutUpdated()
{ {
var totalsize = GetSize(); var size = MeasureOverride();
ArrangeOverride(size);
}
public void ArrangeOverride(SizeBase sizeBase)
{
double left = MiddlePosition.X + ItemWidth / 2 + Spacing; double left = MiddlePosition.X + ItemWidth / 2 + Spacing;
double top = MiddlePosition.Y - totalsize.Height / 2; double top = MiddlePosition.Y - sizeBase.Height / 2;
if (Children?.Count > 0) if (Children?.Count > 0)
{ {
foreach (var child in Children) foreach (var child in Children)
{ {
child.Left = left + Spacing; child.Left = left + Spacing;
child.Top = top + Spacing; child.Top = top + child.DesiredSize.Height / 2 - child.ItemHeight;
top += child.SizeWithSpacing.Height; top += child.DesiredSize.Height;
child.LayoutUpdated(); child.ArrangeOverride(child.DesiredSize);
} }
} }
} }