mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-04-08 10:16:36 +08:00
系统优化
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
@@ -57,7 +58,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
Point point = sourceDataItem.MiddlePosition;
|
||||
|
||||
_partialConnection = new ConnectionViewModel(_viewModel, sourceDataItem, new PartCreatedConnectorInfo(point.X, point.Y), LineDrawMode, RouterMode);
|
||||
_partialConnection = new ConnectionViewModel(_viewModel, sourceDataItem, new PartCreatedConnectorInfo(point.X, point.Y), DrawModeViewModel.LineDrawMode, DrawModeViewModel.LineRouterMode);
|
||||
|
||||
_viewModel.Add(_partialConnection);
|
||||
_partialConnection.ZIndex = -1;
|
||||
@@ -110,6 +111,20 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
|
||||
private IDrawModeViewModel DrawModeViewModel
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_viewModel.DrawModeViewModel != null)
|
||||
{
|
||||
return _viewModel.DrawModeViewModel;
|
||||
}
|
||||
else
|
||||
{
|
||||
return _service.DrawModeViewModel;
|
||||
}
|
||||
}
|
||||
}
|
||||
private DrawMode DrawMode
|
||||
{
|
||||
get
|
||||
@@ -125,36 +140,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
|
||||
private DrawMode LineDrawMode
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_viewModel.DrawModeViewModel != null)
|
||||
{
|
||||
return _viewModel.DrawModeViewModel.LineDrawMode;
|
||||
}
|
||||
else
|
||||
{
|
||||
return _service.DrawModeViewModel.LineDrawMode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private RouterMode RouterMode
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_viewModel.DrawModeViewModel != null)
|
||||
{
|
||||
return _viewModel.DrawModeViewModel.LineRouterMode;
|
||||
}
|
||||
else
|
||||
{
|
||||
return _service.DrawModeViewModel.LineRouterMode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region GridCellSize
|
||||
|
||||
public static readonly DependencyProperty GridCellSizeProperty =
|
||||
@@ -511,22 +496,22 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
if (e.PropertyName == nameof(CursorMode))
|
||||
{
|
||||
if (_service.DrawModeViewModel.CursorMode == CursorMode.Format)
|
||||
if (DrawModeViewModel.CursorMode == CursorMode.Format)
|
||||
{
|
||||
EnterFormat();
|
||||
}
|
||||
else if (_service.DrawModeViewModel.CursorMode == CursorMode.Move)
|
||||
else if (DrawModeViewModel.CursorMode == CursorMode.Move)
|
||||
{
|
||||
EnterMove();
|
||||
}
|
||||
else if (_service.DrawModeViewModel.CursorMode == CursorMode.Exit)
|
||||
else if (DrawModeViewModel.CursorMode == CursorMode.Exit)
|
||||
{
|
||||
ExitCursor();
|
||||
}
|
||||
}
|
||||
else if (e.PropertyName == nameof(_service.DrawModeViewModel.DrawingDrawMode))
|
||||
else if (e.PropertyName == nameof(DrawModeViewModel.DrawingDrawMode))
|
||||
{
|
||||
if (_service.DrawModeViewModel.DrawingDrawMode == DrawMode.ColorPicker)
|
||||
if (DrawModeViewModel.DrawingDrawMode == DrawMode.ColorPicker)
|
||||
{
|
||||
EnterColorPicker();
|
||||
}
|
||||
@@ -576,7 +561,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
item.IsHitTestVisible = true;
|
||||
}
|
||||
_service.DrawModeViewModel.CursorMode = CursorMode.Normal;
|
||||
DrawModeViewModel.CursorMode = CursorMode.Normal;
|
||||
}
|
||||
|
||||
private void Format(SelectableDesignerItemViewModelBase source, SelectableDesignerItemViewModelBase target)
|
||||
@@ -596,7 +581,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
|
||||
|
||||
if (_service.DrawModeViewModel.CursorMode == CursorMode.Format)
|
||||
if (DrawModeViewModel.CursorMode == CursorMode.Format)
|
||||
{
|
||||
var element = (e.OriginalSource as FrameworkElement);
|
||||
if (element.DataContext is SelectableDesignerItemViewModelBase target)
|
||||
@@ -607,7 +592,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
ExitCursor();
|
||||
}
|
||||
else if (_service.DrawModeViewModel.CursorMode == CursorMode.Move)
|
||||
else if (DrawModeViewModel.CursorMode == CursorMode.Move)
|
||||
{
|
||||
ExitCursor();
|
||||
return;
|
||||
@@ -629,8 +614,8 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
}
|
||||
|
||||
if (_service.DrawModeViewModel.SharpDrawModeSelected ||
|
||||
(_service.DrawModeViewModel.DrawingDrawModeSelected && _service.DrawModeViewModel.DrawingDrawMode != DrawMode.Select))
|
||||
if (DrawModeViewModel.SharpDrawModeSelected ||
|
||||
(DrawModeViewModel.DrawingDrawModeSelected && DrawModeViewModel.DrawingDrawMode != DrawMode.Select))
|
||||
{
|
||||
// create rubberband adorner
|
||||
AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(this);
|
||||
@@ -643,7 +628,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (_service.DrawModeViewModel.LineDrawModeSelected)//画线模式,可以不命中实体
|
||||
else if (DrawModeViewModel.LineDrawModeSelected)//画线模式,可以不命中实体
|
||||
{
|
||||
if (SourceConnector == null)
|
||||
{
|
||||
@@ -676,7 +661,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
_viewModel.CurrentColor = ColorPickerManager.GetColor(point.X, point.Y);
|
||||
|
||||
//移动
|
||||
if (_service.DrawModeViewModel.CursorMode == CursorMode.Move)
|
||||
if (DrawModeViewModel.CursorMode == CursorMode.Move)
|
||||
{
|
||||
_viewModel.SelectedItems.OfType<DesignerItemViewModelBase>().ToList().ForEach(p => {
|
||||
p.Left = currentPoint.X;
|
||||
@@ -692,7 +677,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
_partialConnection.SinkConnectorInfo = new PartCreatedConnectorInfo(currentPoint.X, currentPoint.Y);
|
||||
|
||||
SinkConnector = HitTesting(currentPoint);
|
||||
if (SinkConnector?.Info?.CanAttachTo(SourceConnector?.Info) == false)
|
||||
if (SinkConnector != SourceConnector && SinkConnector?.Info?.CanAttachTo(SourceConnector?.Info) == false)
|
||||
{
|
||||
SinkConnector.Info.DisableAttachTo = true;
|
||||
}
|
||||
@@ -759,19 +744,19 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
ConnectorInfoBase sinkDataItem = SinkConnector.Info;
|
||||
|
||||
_viewModel.Delete(_partialConnection);
|
||||
_viewModel.AddCommand.Execute(new ConnectionViewModel(_viewModel, sourceDataItem, sinkDataItem, LineDrawMode, RouterMode));
|
||||
_viewModel.AddCommand.Execute(new ConnectionViewModel(_viewModel, sourceDataItem, sinkDataItem, DrawModeViewModel.LineDrawMode, DrawModeViewModel.LineRouterMode));
|
||||
}
|
||||
else if (_partialConnection.IsFullConnection)//自动连接模式
|
||||
{
|
||||
_viewModel.ClearAttachTo();
|
||||
}
|
||||
else if (_service.DrawModeViewModel.LineDrawModeSelected)
|
||||
else if (DrawModeViewModel.LineDrawModeSelected)
|
||||
{
|
||||
Point currentPoint = e.GetPosition(this);
|
||||
ConnectorInfoBase sinkDataItem = new PartCreatedConnectorInfo(currentPoint.X, currentPoint.Y);
|
||||
|
||||
_viewModel.Delete(_partialConnection);
|
||||
_viewModel.AddCommand.Execute(new ConnectionViewModel(_viewModel, sourceDataItem, sinkDataItem, LineDrawMode, RouterMode));
|
||||
_viewModel.AddCommand.Execute(new ConnectionViewModel(_viewModel, sourceDataItem, sinkDataItem, DrawModeViewModel.LineDrawMode, DrawModeViewModel.LineRouterMode));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -791,7 +776,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
SourceItemsContainer = null;
|
||||
|
||||
_service.DrawModeViewModel.ResetDrawMode();
|
||||
DrawModeViewModel.ResetDrawMode();
|
||||
}
|
||||
|
||||
protected override void OnPreviewKeyDown(KeyEventArgs e)
|
||||
@@ -944,6 +929,10 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
itemBase.MinItemWidth = dragObject.DesiredMinSize.Value.Width;
|
||||
itemBase.MinItemHeight = dragObject.DesiredMinSize.Value.Height;
|
||||
}
|
||||
if (dragObject.ConnectorInfo != null)
|
||||
{
|
||||
InitConnectorInfo(itemBase, dragObject.ConnectorInfo);
|
||||
}
|
||||
_viewModel.AddCommand.Execute(itemBase);
|
||||
|
||||
if (itemBase is BlockDesignerItemViewModel block)
|
||||
@@ -966,6 +955,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (!string.IsNullOrEmpty(dragObject.Icon))
|
||||
itemBase.Icon = dragObject.Icon;
|
||||
itemBase.ColorViewModel = CopyHelper.Mapper(dragObject.ColorViewModel);
|
||||
itemBase.FontViewModel = CopyHelper.Mapper(dragObject.FontViewModel);
|
||||
if (dragObject.DesiredSize != null)
|
||||
{
|
||||
itemBase.ItemWidth = dragObject.DesiredSize.Value.Width;
|
||||
@@ -976,7 +966,10 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
itemBase.MinItemWidth = dragObject.DesiredMinSize.Value.Width;
|
||||
itemBase.MinItemHeight = dragObject.DesiredMinSize.Value.Height;
|
||||
}
|
||||
|
||||
if (dragObject.ConnectorInfo != null)
|
||||
{
|
||||
InitConnectorInfo(itemBase, dragObject.ConnectorInfo);
|
||||
}
|
||||
}
|
||||
itemBase.Left = Math.Max(0, position.X - itemBase.GetItemWidth() / 2);
|
||||
itemBase.Top = Math.Max(0, position.Y - itemBase.GetItemHeight() / 2);
|
||||
@@ -1013,5 +1006,14 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
this.Focus();
|
||||
}
|
||||
|
||||
private void InitConnectorInfo(DesignerItemViewModelBase itemBase, List<FullyCreatedConnectorInfo> connectorInfos)
|
||||
{
|
||||
itemBase.ClearConnectors();
|
||||
foreach (var connectorInfo in connectorInfos)
|
||||
{
|
||||
itemBase.AddConnector(new FullyCreatedConnectorInfo(itemBase, connectorInfo.Orientation, connectorInfo.IsInnerPoint, connectorInfo.IsPortless) { XRatio = connectorInfo.XRatio, YRatio = connectorInfo.YRatio });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user