mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-20 08:26:36 +08:00
Flowchart
This commit is contained in:
@@ -14,6 +14,24 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
public class DiagramViewModel : BindableBase, IDiagramViewModel
|
||||
{
|
||||
#region 属性
|
||||
private bool _isReadOnly;
|
||||
public bool IsReadOnly
|
||||
{
|
||||
get
|
||||
{
|
||||
return _isReadOnly;
|
||||
}
|
||||
set
|
||||
{
|
||||
SetProperty(ref _isReadOnly, value);
|
||||
}
|
||||
}
|
||||
|
||||
public DrawMode? VectorLineDrawMode
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
private PageSizeType _pageSizeType = PageSizeType.A4;
|
||||
public PageSizeType PageSizeType
|
||||
{
|
||||
@@ -320,6 +338,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
SetProperty(ref _currentColor, value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 用于wpf大小与物理像素之间转换
|
||||
/// </summary>
|
||||
public double ScreenScale { get; set; } = 1;
|
||||
#endregion
|
||||
|
||||
private DoCommandManager DoCommandManager = new DoCommandManager();
|
||||
@@ -439,26 +462,83 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
|
||||
public SimpleCommand CreateNewDiagramCommand { get; private set; }
|
||||
public SimpleCommand DirectAddItemCommand { get; private set; }
|
||||
public SimpleCommand AddItemCommand { get; private set; }
|
||||
public SimpleCommand DirectRemoveItemCommand { get; private set; }
|
||||
public SimpleCommand RemoveItemCommand { get; private set; }
|
||||
public SimpleCommand ClearSelectedItemsCommand { get; private set; }
|
||||
public SimpleCommand AlignTopCommand { get; private set; }
|
||||
public SimpleCommand AlignVerticalCentersCommand { get; private set; }
|
||||
public SimpleCommand AlignBottomCommand { get; private set; }
|
||||
public SimpleCommand AlignLeftCommand { get; private set; }
|
||||
public SimpleCommand AlignHorizontalCentersCommand { get; private set; }
|
||||
public SimpleCommand AlignRightCommand { get; private set; }
|
||||
public SimpleCommand BringForwardCommand { get; private set; }
|
||||
public SimpleCommand BringToFrontCommand { get; private set; }
|
||||
public SimpleCommand SendBackwardCommand { get; private set; }
|
||||
public SimpleCommand SendToBackCommand { get; private set; }
|
||||
public SimpleCommand CreateNewDiagramCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand DirectAddItemCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand AddItemCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand DirectRemoveItemCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand RemoveItemCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand ClearSelectedItemsCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand AlignTopCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand AlignVerticalCentersCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand AlignBottomCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand AlignLeftCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand AlignHorizontalCentersCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand AlignRightCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand BringForwardCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand BringToFrontCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand SendBackwardCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand SendToBackCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
|
||||
public SimpleCommand DistributeHorizontalCommand { get; private set; }
|
||||
public SimpleCommand DistributeVerticalCommand { get; private set; }
|
||||
public SimpleCommand SelectAllCommand { get; private set; }
|
||||
public SimpleCommand DistributeHorizontalCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand DistributeVerticalCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
public SimpleCommand SelectAllCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
|
||||
private SimpleCommand _undoCommand;
|
||||
public SimpleCommand UndoCommand
|
||||
@@ -483,7 +563,10 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
public List<SelectableDesignerItemViewModelBase> SelectedItems
|
||||
{
|
||||
get { return Items.Where(x => x.IsSelected).ToList(); }
|
||||
get
|
||||
{
|
||||
return Items.Where(x => x.IsSelected).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -499,7 +582,10 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
|
||||
public Func<SelectableDesignerItemViewModelBase, bool> OutAddVerify { get; set; }
|
||||
public Func<SelectableDesignerItemViewModelBase, bool> OutAddVerify
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public bool AddVerify(SelectableDesignerItemViewModelBase item)
|
||||
{
|
||||
@@ -567,13 +653,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (AddVerify(ite) != true) return;
|
||||
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
ClearSelectedItems();
|
||||
Add(ite);
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
Items.Remove(ite);
|
||||
});
|
||||
}
|
||||
@@ -582,16 +666,14 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (items.Select(p => AddVerify(p)).Any() != true) return;
|
||||
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
ClearSelectedItems();
|
||||
foreach (var item in items)
|
||||
{
|
||||
Add(item);
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
items.ForEach(item => Items.Remove(item));
|
||||
});
|
||||
}
|
||||
@@ -626,8 +708,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (parameter is SelectableDesignerItemViewModelBase ite)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
ite.IsSelected = false;
|
||||
Items.Remove(ite);
|
||||
if (ite.OutTextItem != null)
|
||||
@@ -636,16 +717,14 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
Items.Add(ite);
|
||||
});
|
||||
}
|
||||
else if (parameter is List<SelectableDesignerItemViewModelBase> items)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (var item in items)
|
||||
{
|
||||
item.IsSelected = false;
|
||||
@@ -657,8 +736,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (var item in items)
|
||||
{
|
||||
Items.Add(item);
|
||||
@@ -693,8 +771,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (selectedItems.Count() > 1)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
double top = selectedItems.OrderBy(p => p.Top).Select(p => p.Top).FirstOrDefault();
|
||||
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
@@ -703,15 +780,13 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
item.Top = top;
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
item.Top = item.GetOldValue<double>(nameof(item.Top), guid.ToString());
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
item.ClearOldValue<double>(nameof(item.Top), guid.ToString());
|
||||
@@ -728,8 +803,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (selectedItems.Count() > 1)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
double mid = selectedItems.Select(p => p.Top + p.ItemHeight / 2).Average();
|
||||
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
@@ -738,15 +812,13 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
item.Top = mid - item.ItemHeight / 2;
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
item.Top = item.GetOldValue<double>(nameof(item.Top), guid.ToString());
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
item.ClearOldValue<double>(nameof(item.Top), guid.ToString());
|
||||
@@ -763,8 +835,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (selectedItems.Count() > 1)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
double top = selectedItems.OrderBy(p => p.Top + p.ItemHeight).Select(p => p.Top + p.ItemHeight).LastOrDefault();
|
||||
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
@@ -773,15 +844,13 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
item.Top = top - item.ItemHeight;
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
item.Top = item.GetOldValue<double>(nameof(item.Top), guid.ToString());
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
item.ClearOldValue<double>(nameof(item.Top), guid.ToString());
|
||||
@@ -798,8 +867,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (selectedItems.Count() > 1)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
double left = selectedItems.OrderBy(p => p.Left).Select(p => p.Left).FirstOrDefault();
|
||||
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
@@ -808,15 +876,13 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
item.Left = left;
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
item.Left = item.GetOldValue<double>(nameof(item.Left), guid.ToString());
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
item.ClearOldValue<double>(nameof(item.Left), guid.ToString());
|
||||
@@ -833,8 +899,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (selectedItems.Count() > 1)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
double mid = selectedItems.Select(p => p.Left + p.ItemWidth / 2).Average();
|
||||
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
@@ -843,15 +908,13 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
item.Left = mid - item.ItemWidth / 2;
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
item.Left = item.GetOldValue<double>(nameof(item.Left), guid.ToString());
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
item.ClearOldValue<double>(nameof(item.Left), guid.ToString());
|
||||
@@ -868,8 +931,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (selectedItems.Count() > 1)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
double right = selectedItems.OrderBy(p => p.Left + p.ItemWidth).Select(p => p.Left + p.ItemWidth).LastOrDefault();
|
||||
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
@@ -878,15 +940,13 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
item.Left = right - item.ItemWidth;
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
item.Left = item.GetOldValue<double>(nameof(item.Left), guid.ToString());
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
item.ClearOldValue<double>(nameof(item.Left), guid.ToString());
|
||||
@@ -904,8 +964,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
var guid = Guid.NewGuid();
|
||||
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
int count = this.Items.Count;
|
||||
for (int i = 0; i < ordered.Count; i++)
|
||||
{
|
||||
@@ -933,15 +992,13 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (var item in changeditems)
|
||||
{
|
||||
item.ZIndex = item.GetOldValue<int>(nameof(item.ZIndex), guid.ToString());
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (var item in changeditems)
|
||||
{
|
||||
item.ClearOldValue<double>(nameof(item.ZIndex), guid.ToString());
|
||||
@@ -957,8 +1014,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
var guid = Guid.NewGuid();
|
||||
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
int i = childrenSorted.Count - 1;
|
||||
int j = childrenSorted.Count - selectionSorted.Count - 1;
|
||||
|
||||
@@ -976,15 +1032,13 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
changeditems.Add(item);
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (var item in changeditems)
|
||||
{
|
||||
item.ZIndex = item.GetOldValue<int>(nameof(item.ZIndex), guid.ToString());
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (var item in changeditems)
|
||||
{
|
||||
item.ClearOldValue<double>(nameof(item.ZIndex), guid.ToString());
|
||||
@@ -1000,8 +1054,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
var guid = Guid.NewGuid();
|
||||
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
for (int i = 0; i < ordered.Count; i++)
|
||||
{
|
||||
var item = ordered[i];
|
||||
@@ -1028,15 +1081,13 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (var item in changeditems)
|
||||
{
|
||||
item.ZIndex = item.GetOldValue<int>(nameof(item.ZIndex), guid.ToString());
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (var item in changeditems)
|
||||
{
|
||||
item.ClearOldValue<double>(nameof(item.ZIndex), guid.ToString());
|
||||
@@ -1052,8 +1103,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
var guid = Guid.NewGuid();
|
||||
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
int i = childrenSorted.Count - 1;
|
||||
int j = selectionSorted.Count - 1;
|
||||
|
||||
@@ -1071,15 +1121,13 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
changeditems.Add(item);
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (var item in changeditems)
|
||||
{
|
||||
item.ZIndex = item.GetOldValue<int>(nameof(item.ZIndex), guid.ToString());
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (var item in changeditems)
|
||||
{
|
||||
item.ClearOldValue<double>(nameof(item.ZIndex), guid.ToString());
|
||||
@@ -1097,8 +1145,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (selectedItems.Count() > 1)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
double left = Double.MaxValue;
|
||||
double right = Double.MinValue;
|
||||
double sumWidth = 0;
|
||||
@@ -1124,8 +1171,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
foreach (DesignerItemViewModelBase di in SelectionService.GetGroupMembers(item))
|
||||
@@ -1134,8 +1180,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
foreach (DesignerItemViewModelBase di in SelectionService.GetGroupMembers(item))
|
||||
@@ -1158,8 +1203,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (selectedItems.Count() > 1)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
double top = Double.MaxValue;
|
||||
double bottom = Double.MinValue;
|
||||
double sumHeight = 0;
|
||||
@@ -1184,8 +1228,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
offset = offset + item.ItemHeight + distance;
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
foreach (DesignerItemViewModelBase di in SelectionService.GetGroupMembers(item))
|
||||
@@ -1194,8 +1237,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase item in selectedItems)
|
||||
{
|
||||
foreach (DesignerItemViewModelBase di in SelectionService.GetGroupMembers(item))
|
||||
@@ -1253,7 +1295,12 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
return new Rect(new Point(x1, y1), new Point(x2, y2));
|
||||
}
|
||||
|
||||
|
||||
#region 用于wpf大小与物理像素之间转换
|
||||
public void SetScreenScale()
|
||||
{
|
||||
ScreenScale = ScreenHelper.ResetScreenScale();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user