Flowchart

This commit is contained in:
艾竹
2022-12-04 23:07:20 +08:00
parent dc42f75610
commit 0487857d7b
30 changed files with 1621 additions and 383 deletions

View File

@@ -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
}