diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs index b4ef8cf..1279cbb 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs @@ -54,10 +54,14 @@ namespace AIStudio.Wpf.Flowchart DiagramViewModel.DirectAddItemCommand.Execute(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" }; DiagramViewModel.DirectAddItemCommand.Execute(level2node1_2); level1node.Children.Add(level2node1_2); - + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); diff --git a/AIStudio.Wpf.DiagramDesigner/PathGenerators/PathGenerators.Smooth.cs b/AIStudio.Wpf.DiagramDesigner/PathGenerators/PathGenerators.Smooth.cs index 0ea196a..6211a04 100644 --- a/AIStudio.Wpf.DiagramDesigner/PathGenerators/PathGenerators.Smooth.cs +++ b/AIStudio.Wpf.DiagramDesigner/PathGenerators/PathGenerators.Smooth.cs @@ -69,7 +69,14 @@ namespace AIStudio.Wpf.DiagramDesigner { var cX = (route[0].X + route[1].X) / 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); return new[] { route[0], curvePointA, curvePointB, route[1] }; } diff --git a/AIStudio.Wpf.Mind/ViewModels/MindNode.cs b/AIStudio.Wpf.Mind/ViewModels/MindNode.cs index 345bcab..05f2d20 100644 --- a/AIStudio.Wpf.Mind/ViewModels/MindNode.cs +++ b/AIStudio.Wpf.Mind/ViewModels/MindNode.cs @@ -66,32 +66,42 @@ namespace AIStudio.Wpf.Mind.ViewModels } } - public SizeBase GetSize() + public SizeBase DesiredSize + { + get;set; + } + + public SizeBase MeasureOverride() { var sizewithSpacing = SizeWithSpacing; 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))); } - return sizewithSpacing; + DesiredSize = sizewithSpacing; + return DesiredSize; } public void LayoutUpdated() { - var totalsize = GetSize(); + var size = MeasureOverride(); + ArrangeOverride(size); + } + public void ArrangeOverride(SizeBase sizeBase) + { 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) { foreach (var child in Children) { child.Left = left + Spacing; - child.Top = top + Spacing; - top += child.SizeWithSpacing.Height; + child.Top = top + child.DesiredSize.Height / 2 - child.ItemHeight; + top += child.DesiredSize.Height; - child.LayoutUpdated(); + child.ArrangeOverride(child.DesiredSize); } } }