diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs
index 25012a8..b4ef8cf 100644
--- a/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs
+++ b/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs
@@ -38,12 +38,31 @@ namespace AIStudio.Wpf.Flowchart
{
base.Init();
- DesignerItemViewModelBase start = new MindLevel1Node() { Left = 100, Top = 0, ItemWidth = 80, ItemHeight = 40, Text = "思维导图" };
- DiagramViewModel.DirectAddItemCommand.Execute(start);
- DiagramViewModel?.CenterMoveCommand.Execute(start);
+ MindLevel1Node level1node = new MindLevel1Node() { Text = "思维导图" };
+ DiagramViewModel.DirectAddItemCommand.Execute(level1node);
+ DiagramViewModel.CenterMoveCommand.Execute(level1node);
+
+ MindLevel2Node level2node1_1 = new MindLevel2Node() { Text = "分支主题1" };
+ DiagramViewModel.DirectAddItemCommand.Execute(level2node1_1);
+ level1node.Children.Add(level2node1_1);
+
+ MindLevel3Node level3node1_1_1 = new MindLevel3Node() { Text = "分支主题1_1" };
+ DiagramViewModel.DirectAddItemCommand.Execute(level3node1_1_1);
+ level2node1_1.Children.Add(level3node1_1_1);
+
+ MindLevel3Node level3node1_1_2 = new MindLevel3Node() { Text = "分支主题1_2" };
+ DiagramViewModel.DirectAddItemCommand.Execute(level3node1_1_2);
+ level2node1_1.Children.Add(level3node1_1_2);
+
+ MindLevel2Node level2node1_2 = new MindLevel2Node() { Text = "分支主题2" };
+ DiagramViewModel.DirectAddItemCommand.Execute(level2node1_2);
+ level1node.Children.Add(level2node1_2);
+
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
-
+
+ level1node.LayoutUpdated();
+
}
public override void Dispose()
diff --git a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml
index 108400f..97e9126 100644
--- a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml
+++ b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml
@@ -1898,14 +1898,14 @@
+ Margin="20,0,0,20" />
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Ports/InnerPortViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Ports/InnerPortViewModel.cs
index 913c7df..24e3b4e 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Ports/InnerPortViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Ports/InnerPortViewModel.cs
@@ -29,11 +29,14 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
node2.ClearConnectors();
var port2_1 = new FullyCreatedConnectorInfo(DiagramViewModel, node2, ConnectorOrientation.Top, true) { XRatio = 0.2, YRatio = 0.8 };
var port2_2 = new FullyCreatedConnectorInfo(DiagramViewModel, node2, ConnectorOrientation.Top, true) { XRatio = 0.8, YRatio = 0.2 };
+ node2.AddConnector(port2_1);
+ node2.AddConnector(port2_2);
DiagramViewModel.DirectAddItemCommand.Execute(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
node3.ClearConnectors();
var port3 = new FullyCreatedConnectorInfo(DiagramViewModel, node3, ConnectorOrientation.Bottom, true) { XRatio = 0.5, YRatio = 0.5 };
+ node3.AddConnector(port3);
DiagramViewModel.DirectAddItemCommand.Execute(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, port1, port2_1, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml
index 4441b6d..abc6a2f 100644
--- a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml
+++ b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml
@@ -425,8 +425,7 @@
Binding="{Binding Connectors.Count}">
-
+
diff --git a/AIStudio.Wpf.Mind/Themes/MindNode.xaml b/AIStudio.Wpf.Mind/Themes/MindNode.xaml
index bde512e..e228f08 100644
--- a/AIStudio.Wpf.Mind/Themes/MindNode.xaml
+++ b/AIStudio.Wpf.Mind/Themes/MindNode.xaml
@@ -6,6 +6,19 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/AIStudio.Wpf.Mind/ViewModels/MindNode.cs b/AIStudio.Wpf.Mind/ViewModels/MindNode.cs
index 93667f8..345bcab 100644
--- a/AIStudio.Wpf.Mind/ViewModels/MindNode.cs
+++ b/AIStudio.Wpf.Mind/ViewModels/MindNode.cs
@@ -51,16 +51,50 @@ namespace AIStudio.Wpf.Mind.ViewModels
public double Spacing
{
get; set;
- }
+ } = 20;
public List Children
{
get; set;
+ } = new List();
+
+ public SizeBase SizeWithSpacing
+ {
+ get
+ {
+ return this.Size.Add(Spacing * 2);
+ }
}
-
+ public SizeBase GetSize()
+ {
+ var sizewithSpacing = SizeWithSpacing;
+ if (Children?.Count > 0)
+ {
+ var childrensizes = Children.Select(p => p.GetSize());
+ sizewithSpacing = new SizeBase(sizewithSpacing.Width + childrensizes.Max(p => p.Width), Math.Max(sizewithSpacing.Height, childrensizes.Sum(p => p.Height)));
+ }
+ return sizewithSpacing;
+ }
-
+ public void LayoutUpdated()
+ {
+ var totalsize = GetSize();
+
+ double left = MiddlePosition.X + ItemWidth / 2 + Spacing;
+ double top = MiddlePosition.Y - totalsize.Height / 2;
+ if (Children?.Count > 0)
+ {
+ foreach (var child in Children)
+ {
+ child.Left = left + Spacing;
+ child.Top = top + Spacing;
+ top += child.SizeWithSpacing.Height;
+
+ child.LayoutUpdated();
+ }
+ }
+ }
}
public class MindLevel1Node : MindNode
@@ -84,24 +118,23 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
}
-
- public void LayoutUpdated()
+ protected override void Init(IDiagramViewModel root)
{
- foreach(var child in Children)
- {
+ base.Init(root);
- }
+ ItemWidth = 80;
+ ItemHeight = 40;
+ this.ClearConnectors();
+ var port = new FullyCreatedConnectorInfo(root, this, ConnectorOrientation.None, true) { XRatio = 0.5, YRatio = 0.5 };
+ this.AddConnector(port);
+ IsInnerConnector = true;
}
public RectangleBase Rectangle
{
get; set;
}
-
- //public RectangleBase GetChildRectangle()
- //{
- // //Children.Select(p => p.Size)
- //}
+
}
public class MindLevel2Node : MindNode
@@ -126,6 +159,20 @@ namespace AIStudio.Wpf.Mind.ViewModels
}
+ protected override void Init(IDiagramViewModel root)
+ {
+ base.Init(root);
+
+ ItemWidth = 80;
+ ItemHeight = 40;
+ this.ClearConnectors();
+ var port1 = new FullyCreatedConnectorInfo(root, this, ConnectorOrientation.None, true) { XRatio = 0, YRatio = 0.5 };
+ this.AddConnector(port1);
+ var port2 = new FullyCreatedConnectorInfo(root, this, ConnectorOrientation.None, true) { XRatio = 1, YRatio = 0.5 };
+ this.AddConnector(port2);
+ IsInnerConnector = true;
+ }
+
public PointBase Offset
{
get; set;
@@ -153,7 +200,19 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
}
+ protected override void Init(IDiagramViewModel root)
+ {
+ base.Init(root);
+ ItemWidth = 80;
+ ItemHeight = 40;
+ this.ClearConnectors();
+ var port1 = new FullyCreatedConnectorInfo(root, this, ConnectorOrientation.None, true) { XRatio = 0, YRatio = 1 };
+ this.AddConnector(port1);
+ var port2 = new FullyCreatedConnectorInfo(root, this, ConnectorOrientation.None, true) { XRatio = 1, YRatio = 1 };
+ this.AddConnector(port2);
+ IsInnerConnector = true;
+ }
public PointBase Offset
{
get; set;