From 18b6bd7e71ea812dd9cba7b1b0e92b15bc091fde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=89=BE=E7=AB=B9?= Date: Thu, 9 Feb 2023 04:06:25 +0000 Subject: [PATCH 1/2] update README.md. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 艾竹 --- README.md | 3 +++ nuget.png | Bin 0 -> 36566 bytes 2 files changed, 3 insertions(+) create mode 100644 nuget.png diff --git a/README.md b/README.md index f12c23b..b3a3e91 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,9 @@ ### 3.箭头改进,箭头按照连线的实际角度显示(即0-360度),还支持自定义的箭头path。 ### 4.新增快捷键自定义扩展,用户可根据自己的习惯定义快捷键。 ### 5.封装了一个标准的工作流控件FlowchartEditor,具体使用可以参照开源权限管理框架种的用法: https://gitee.com/akwkevin/aistudio.-wpf.-aclient + +nuget地址:![输入图片说明](nuget.png) + ### 6.连接上添加动画:路径动画效果和线条流动效果。 ### 7.改变结构,使用户更容易自定义自己的样式,覆盖系统默认样式。 ### 8.从Blazor.Diagrams种引入PortlessLinks(直接连接两个node,不需要port),自动连接节点Snapping,按距离最近连接ReconnectLinksToClosestPorts diff --git a/nuget.png b/nuget.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6bef10d1a32fbe4bc0ad6922348eacfd6a64cd GIT binary patch literal 36566 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 Wo9B+EgJJ0Llrj=;#j9Q!2K^6&4Yqgy literal 0 HcmV?d00001 From cf1bfc7482bdb99806eb8eb0c8437eea0d97a5b5 Mon Sep 17 00:00:00 2001 From: kwai Date: Fri, 10 Feb 2023 18:49:02 +0800 Subject: [PATCH 2/2] =?UTF-8?q?group=20=E5=92=8C=20line=20=E4=BC=98?= =?UTF-8?q?=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(); + } /// /// 打标记使用