From 207523eb16ec2b45a01644b9daa9c71156100139 Mon Sep 17 00:00:00 2001 From: kwai Date: Wed, 14 Jun 2023 19:41:29 +0800 Subject: [PATCH] zz --- .../Container/ItemsContainerInfo.cs | 71 ++++++++++++++----- .../BaseViewModel/DiagramViewModel.cs | 1 + .../BlockContainDesignerItemViewModel.cs | 4 +- .../BlockDesignerItemViewModel.cs | 5 ++ Directory.Build.Props | 2 +- 5 files changed, 63 insertions(+), 20 deletions(-) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Container/ItemsContainerInfo.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Container/ItemsContainerInfo.cs index 8f87660..bf7fbef 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Container/ItemsContainerInfo.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Container/ItemsContainerInfo.cs @@ -119,23 +119,6 @@ namespace AIStudio.Wpf.DiagramDesigner } } - //public PointBase Position - //{ - // get - // { - // var offset = GetOffSetFunc?.Invoke() ?? new Point(0, 0); - // return new PointBase(DataItem.Left + offset.X, DataItem.Top + offset.Y); - // } - //} - - //public PointBase MiddlePosition - //{ - // get - // { - // return new PointBase(Position.X + GetItemWidth() / 2, Position.Y + GetItemHeight() / 2); - // } - //} - public RectangleBase GetBounds() { var offset = GetOffSetFunc?.Invoke() ?? new Point(0, 0); @@ -156,6 +139,28 @@ namespace AIStudio.Wpf.DiagramDesigner get; set; } = new ObservableCollection(); + public List ChildrenContain + { + get + { + return Children?.SelectMany(p => p.Contains)?.ToList(); + } + } + + public int ContainLevel + { + get + { + if (DataItem.ParentContain == null) + { + return 0; + } + else + { + return DataItem.ParentContain.ContainLevel + 1; + } + } + } private Func _getOffSetFunc; public Func GetOffSetFunc @@ -209,5 +214,37 @@ namespace AIStudio.Wpf.DiagramDesigner { return double.IsNaN(ItemHeight) ? ActualItemHeight : ItemHeight; } + + public void AddChild(BlockDesignerItemViewModel child) + { + child.ParentContain = this; + Children.Add(child); + } + + public void RemoveChild(BlockDesignerItemViewModel child) + { + child.ParentContain = null; + Children.Remove(child); + } + + public List GetAllContain(ObservableCollection children) + { + List itemsContainers= new List (); + if (children != null) + { + foreach (var item in children) + { + if (item.Contains != null) + { + itemsContainers.AddRange(item.Contains); + foreach (var contain in item.Contains) + { + itemsContainers.AddRange(contain.GetAllContain(contain.Children)); + } + } + } + } + return itemsContainers; + } } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs index 7a2bc4f..3be1688 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs @@ -3160,6 +3160,7 @@ namespace AIStudio.Wpf.DiagramDesigner { if (port.GetBounds().IntersectsWith(blockDesignerItemViewModel.GetBounds())) //如果两个位置相交 { + port.DataItem.ShowConnectors = true; if (port.CanAttachTo(blockDesignerItemViewModel) == true) { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/BlockContainDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/BlockContainDesignerItemViewModel.cs index 49f05b5..af72b8b 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/BlockContainDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/BlockContainDesignerItemViewModel.cs @@ -41,7 +41,7 @@ namespace AIStudio.Wpf.DiagramDesigner } Root.Items.Remove(child); - FirstContain.Children.Add(child); + FirstContain.AddChild(child); base.AddChild(child); } @@ -49,7 +49,7 @@ namespace AIStudio.Wpf.DiagramDesigner public override void RemoveChild(BlockDesignerItemViewModel child) { Root.Items.Add(child); - FirstContain.Children.Remove(child); + FirstContain.RemoveChild(child); this.RemoveFromSelection(); child.AddToSelection(true, false); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/BlockDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/BlockDesignerItemViewModel.cs index d9670ae..2abccef 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/BlockDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/BlockDesignerItemViewModel.cs @@ -41,6 +41,11 @@ namespace AIStudio.Wpf.DiagramDesigner get; set; } + public ItemsContainerInfo ParentContain + { + get; set; + } + public void AddNext(BlockDesignerItemViewModel next) { if (this.Next == next) diff --git a/Directory.Build.Props b/Directory.Build.Props index 2eece1a..44deea0 100644 --- a/Directory.Build.Props +++ b/Directory.Build.Props @@ -1,7 +1,7 @@ - net461;netcoreapp3.1;net5.0-windows;net6.0-windows + net6.0-windows