mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-04-28 20:23:25 +08:00
嗯,自动获取曲线方向
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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] };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user