From cf1bfc7482bdb99806eb8eb0c8437eea0d97a5b5 Mon Sep 17 00:00:00 2001 From: kwai Date: Fri, 10 Feb 2023 18:49:02 +0800 Subject: [PATCH] =?UTF-8?q?group=20=E5=92=8C=20line=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserControls/LineControl.xaml | 5 ++- .../DiagramServicesProvider.cs | 10 +----- .../DesignerItemViewModelBase.cs | 5 +++ .../ViewModels/BaseViewModel/DiagramOption.cs | 2 +- .../BaseViewModel/DiagramViewModel.cs | 31 +++---------------- .../BaseViewModel/DiagramViewModelHelper.cs | 20 ++++++++++++ .../GroupDesignerItemViewModel.cs | 31 ++++++++++++++++++- 7 files changed, 65 insertions(+), 39 deletions(-) diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/LineControl.xaml b/AIStudio.Wpf.DiagramDesigner/UserControls/LineControl.xaml index 4ea493f..4cd77ff 100644 --- a/AIStudio.Wpf.DiagramDesigner/UserControls/LineControl.xaml +++ b/AIStudio.Wpf.DiagramDesigner/UserControls/LineControl.xaml @@ -35,7 +35,10 @@ + Style="{StaticResource LineStyle}" + StrokeLineJoin="Round" + StrokeStartLineCap="Round" + StrokeEndLineCap="Round"> diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/DiagramServicesProvider.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/DiagramServicesProvider.cs index 46c2678..14c8a12 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/DiagramServicesProvider.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/DiagramServicesProvider.cs @@ -161,11 +161,7 @@ namespace AIStudio.Wpf.DiagramDesigner return _selectedItem; } set - { - if (_selectedItem != null) - { - _selectedItem.PropertyChanged -= ViewModel_PropertyChanged; - } + { if (SetProperty(ref _selectedItem, value)) { if (_selectedItem == null) @@ -183,10 +179,6 @@ namespace AIStudio.Wpf.DiagramDesigner LockObjectViewModel = _selectedItem.LockObjectViewModel; } } - if (_selectedItem != null) - { - _selectedItem.PropertyChanged += ViewModel_PropertyChanged; - } } } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs index 3633f8b..b40dac6 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs @@ -183,6 +183,11 @@ namespace AIStudio.Wpf.DiagramDesigner set { if (value <= 0) return; + + if (this is GroupDesignerItemViewModel && value < 70) + { + + } SetProperty(ref _itemWidth, value); } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramOption.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramOption.cs index e022c71..c2a87bd 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramOption.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramOption.cs @@ -86,7 +86,7 @@ namespace AIStudio.Wpf.DiagramDesigner public Func Group { get; set; - } = e => e.KeyboardDevice.Modifiers == (ModifierKeys.Control | ModifierKeys.Shift) && e.Key == Key.G; + } = e => e.KeyboardDevice.Modifiers == ModifierKeys.Control && e.Key == Key.G; } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs index 8f94846..18265fe 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs @@ -778,7 +778,7 @@ namespace AIStudio.Wpf.DiagramDesigner private void Add(SelectableDesignerItemViewModelBase item) { item.Root = this; - item.ZIndex = Items.Count; + item.ZIndex = Items.Any() ? Items.Max(p => p.ZIndex) + 1 : 0; if (item.Id == Guid.Empty) { item.Id = Guid.NewGuid(); @@ -1690,24 +1690,20 @@ namespace AIStudio.Wpf.DiagramDesigner return; } - RectangleBase rect = GetBoundingRectangle(items); + RectangleBase rect = DiagramViewModelHelper.GetBoundingRectangle(items); if (groupItem == null) { groupItem = new GroupDesignerItemViewModel(); } - groupItem.IsGroup = true; - groupItem.ItemWidth = rect.Width; - groupItem.ItemHeight = rect.Height; - groupItem.Left = rect.Left; - groupItem.Top = rect.Top; - groupItem.ZIndex = Items.Count; DirectAddItemCommand.Execute(groupItem); foreach (DesignerItemViewModelBase item in items) item.ParentId = groupItem.Id; + groupItem.Resize(); + ClearSelectedItemsCommand.Execute(null); //groupItem.IsSelected = true; SelectionService.AddToSelection(groupItem); @@ -1826,25 +1822,6 @@ namespace AIStudio.Wpf.DiagramDesigner } - public RectangleBase GetBoundingRectangle(IEnumerable items) - { - double x1 = Double.MaxValue; - double y1 = Double.MaxValue; - double x2 = Double.MinValue; - double y2 = Double.MinValue; - - foreach (DesignerItemViewModelBase item in items) - { - x1 = Math.Min(item.Left, x1); - y1 = Math.Min(item.Top, y1); - - x2 = Math.Max(item.Left + item.ItemWidth, x2); - y2 = Math.Max(item.Top + item.ItemHeight, y2); - } - - return new RectangleBase(new PointBase(x1, y1), new PointBase(x2, y2)); - } - #region 用于wpf大小与物理像素之间转换 public void SetScreenScale() { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModelHelper.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModelHelper.cs index e6d7c7f..22a5311 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModelHelper.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModelHelper.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using AIStudio.Wpf.DiagramDesigner.Geometrys; namespace AIStudio.Wpf.DiagramDesigner { @@ -12,5 +13,24 @@ namespace AIStudio.Wpf.DiagramDesigner DesignerItemViewModelBase dataItem = items.OfType().Single(x => x.Id == conectorDataItemId); return dataItem; } + + public static RectangleBase GetBoundingRectangle(IEnumerable items) + { + double x1 = Double.MaxValue; + double y1 = Double.MaxValue; + double x2 = Double.MinValue; + double y2 = Double.MinValue; + + foreach (DesignerItemViewModelBase item in items) + { + x1 = Math.Min(item.Left, x1); + y1 = Math.Min(item.Top, y1); + + x2 = Math.Max(item.Left + item.ItemWidth, x2); + y2 = Math.Max(item.Top + item.ItemHeight, y2); + } + + return new RectangleBase(new PointBase(x1, y1), new PointBase(x2, y2)); + } } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs index 1fc55d1..5713e0c 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs @@ -3,7 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows.Controls; using AIStudio.Wpf.DiagramDesigner; +using AIStudio.Wpf.DiagramDesigner.Geometrys; using AIStudio.Wpf.DiagramDesigner.Models; namespace AIStudio.Wpf.DiagramDesigner @@ -12,7 +14,7 @@ namespace AIStudio.Wpf.DiagramDesigner { public GroupDesignerItemViewModel() : this(null) { - + } public GroupDesignerItemViewModel(IDiagramViewModel root) : base(root) @@ -34,6 +36,7 @@ namespace AIStudio.Wpf.DiagramDesigner { base.Init(root); + this.IsGroup = true; this.IsHitTestVisible = true; } @@ -46,6 +49,32 @@ namespace AIStudio.Wpf.DiagramDesigner { } + public void Resize() + { + if (this.Root == null) return; + + var items = this.Root.Items.Where(p => p.ParentId == Id).OfType(); + RectangleBase rect = DiagramViewModelHelper.GetBoundingRectangle(items); + + this.ItemWidth = rect.Width; + this.ItemHeight = rect.Height; + this.Left = rect.Left; + this.Top = rect.Top; + } + + public void AddItem(DesignerItemViewModelBase item) + { + if (this.Root == null) return; + + item.ParentId = Id; + if (item.ZIndex > this.ZIndex) + { + var zindex = item.ZIndex; + item.ZIndex = this.ZIndex; + this.ZIndex = zindex; + } + Resize(); + } /// /// 打标记使用