mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-04-07 17:56:35 +08:00
准备切换到左侧视图模式
This commit is contained in:
@@ -409,6 +409,8 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
viewModel.Items.Add(connectionVM);
|
||||
}
|
||||
|
||||
viewModel.Thumbnail = diagramItem.Thumbnail;
|
||||
|
||||
viewModels.Add(viewModel);
|
||||
}
|
||||
DiagramViewModels = new ObservableCollection<IDiagramViewModel>(viewModels);
|
||||
@@ -450,6 +452,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
|
||||
diagramItem.DesignerItems = selectedDesignerItems.Select(p => p.ToSerializableItem(ext)).Where(p => p != null).ToList();
|
||||
diagramItem.Connections = selectedConnections.Select(p => p.ToSerializableItem(ext)).Where(p => p != null).ToList();
|
||||
diagramItem.Thumbnail = viewModel.Thumbnail;
|
||||
|
||||
diagramDocument.DiagramItems.Add(diagramItem);
|
||||
}
|
||||
@@ -502,6 +505,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
|
||||
diagramItem.DesignerItems = selectedDesignerItems.Select(p => p.ToSerializableItem("json")).Where(p => p != null).ToList();
|
||||
diagramItem.Connections = selectedConnections.Select(p => p.ToSerializableItem("json")).Where(p => p != null).ToList();
|
||||
diagramItem.Thumbnail = viewModel.Thumbnail;
|
||||
|
||||
viewModel = new DiagramViewModel(diagramItem);
|
||||
viewModel.Name = NewNameHelper.GetNewName(DiagramViewModels.Select(p => p.Name), "页-");
|
||||
@@ -531,6 +535,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
connectionVM.Id = Guid.NewGuid();
|
||||
viewModel.Items.Add(connectionVM);
|
||||
}
|
||||
viewModel.Thumbnail = diagramItem.Thumbnail;
|
||||
|
||||
DiagramViewModels.Add(viewModel);
|
||||
DiagramViewModel = viewModel;
|
||||
|
||||
@@ -915,8 +915,7 @@
|
||||
</Fluent:SplitButton.ToolTip>
|
||||
</Fluent:SplitButton>-->
|
||||
|
||||
<Fluent:SplitButton Header="形状" GroupName="DrawMode" IsCheckable="True" IsChecked="{Binding DrawingDrawModeSelected}" Width="50" VerticalAlignment="Top">
|
||||
<Fluent:MenuItem Header="橡皮檫" Size="Middle" IsCheckable="True" IsChecked="{Binding DrawingDrawMode,Converter={dd:ConverterValueMapToBool Parameter='Eraser'}, ConverterParameter='Eraser'}" Icon="{iconPacks:Material Kind=Eraser}" />
|
||||
<Fluent:SplitButton Header="形状" GroupName="DrawMode" IsCheckable="True" IsChecked="{Binding DrawingDrawModeSelected}" Width="50" VerticalAlignment="Top">
|
||||
<Fluent:MenuItem Header="矩形工具" Size="Middle" IsCheckable="True" IsChecked="{Binding DrawingDrawMode,Converter={dd:ConverterValueMapToBool Parameter='Rectangle'}, ConverterParameter='Rectangle'}" Icon="{iconPacks:Material Kind=RectangleOutline}" />
|
||||
<Fluent:MenuItem Header="椭圆工具" Size="Middle" IsCheckable="True" IsChecked="{Binding DrawingDrawMode,Converter={dd:ConverterValueMapToBool Parameter='Ellipse'}, ConverterParameter='Ellipse'}" Icon="{iconPacks:Material Kind=EllipseOutline}" />
|
||||
<Fluent:MenuItem Header="线条工具" Size="Middle" IsCheckable="True" IsChecked="{Binding DrawingDrawMode,Converter={dd:ConverterValueMapToBool Parameter='Line'}, ConverterParameter='Line'}" Icon="{iconPacks:Material Kind=Minus}" />
|
||||
@@ -1526,6 +1525,63 @@
|
||||
</Fluent:SplitButton>
|
||||
</Fluent:RibbonGroupBox>
|
||||
</Fluent:RibbonTabItem>
|
||||
<Fluent:RibbonTabItem Header="绘图">
|
||||
<Fluent:RibbonGroupBox Header="查找"
|
||||
IsLauncherVisible="True" >
|
||||
|
||||
<Fluent:SplitButton Header="选择" GroupName="DrawMode" IsCheckable="True" IsChecked="{Binding LineDrawModeSelected}" Icon="{iconPacks:Material Kind=VectorPolyline}" Width="50" VerticalAlignment="Top">
|
||||
<Fluent:MenuItem Header="曲线连接线" Size="Middle" IsCheckable="True" IsChecked="{Binding LineDrawMode,Converter={dd:ConverterValueMapToBool Parameter='ConnectingLineSmooth'}, ConverterParameter='ConnectingLineSmooth'}" Icon="{iconPacks:Material Kind=VectorRadius}"/>
|
||||
<Fluent:MenuItem Header="直线连接线" Size="Middle" IsCheckable="True" IsChecked="{Binding LineDrawMode,Converter={dd:ConverterValueMapToBool Parameter='ConnectingLineStraight'}, ConverterParameter='ConnectingLineStraight'}" Icon="{iconPacks:Material Kind=VectorLine}"/>
|
||||
<Fluent:MenuItem Header="折线连接线" Size="Middle" IsCheckable="True" IsChecked="{Binding LineDrawMode,Converter={dd:ConverterValueMapToBool Parameter='ConnectingLineCorner'}, ConverterParameter='ConnectingLineCorner'}" Icon="{iconPacks:Material Kind=VectorPolyline}"/>
|
||||
<Fluent:MenuItem Header="边界连接线" Size="Middle" IsCheckable="True" IsChecked="{Binding LineDrawMode,Converter={dd:ConverterValueMapToBool Parameter='ConnectingLineBoundary'}, ConverterParameter='ConnectingLineBoundary'}" Icon="{iconPacks:Material Kind=VectorPolylineEdit}"/>
|
||||
<Fluent:MenuItem Header="自动连接" Size="Middle" IsCheckable="True" IsChecked="{Binding EnableSnapping}" Icon="{iconPacks:Material Kind=TransitConnectionHorizontal}"/>
|
||||
<Fluent:SplitButton.Style>
|
||||
<Style TargetType="{x:Type Fluent:SplitButton}" BasedOn="{StaticResource RibbonSplitButtonStyle}">
|
||||
<Setter Property="LargeIcon">
|
||||
<Setter.Value>
|
||||
<iconPacks:PackIconMaterial Kind="VectorPolyline" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding LineDrawMode}" Value="ConnectingLineSmooth">
|
||||
<Setter Property="LargeIcon">
|
||||
<Setter.Value>
|
||||
<iconPacks:PackIconMaterial Kind="VectorRadius" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding LineDrawMode}" Value="ConnectingLineStraight">
|
||||
<Setter Property="LargeIcon">
|
||||
<Setter.Value>
|
||||
<iconPacks:PackIconMaterial Kind="VectorLine" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding LineDrawMode}" Value="ConnectingLineCorner">
|
||||
<Setter Property="LargeIcon">
|
||||
<Setter.Value>
|
||||
<iconPacks:PackIconMaterial Kind="VectorPolyline" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding LineDrawMode}" Value="ConnectingLineBoundary">
|
||||
<Setter Property="LargeIcon">
|
||||
<Setter.Value>
|
||||
<iconPacks:PackIconMaterial Kind="VectorPolylineEdit" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Fluent:SplitButton.Style>
|
||||
<Fluent:SplitButton.ToolTip>
|
||||
<Fluent:ScreenTip Title="Line"
|
||||
Text="添加连接线"
|
||||
Width="190" />
|
||||
</Fluent:SplitButton.ToolTip>
|
||||
</Fluent:SplitButton>
|
||||
</Fluent:RibbonGroupBox>
|
||||
</Fluent:RibbonTabItem>
|
||||
<Fluent:RibbonTabItem Header="页面布局">
|
||||
<Fluent:RibbonGroupBox Header="页面"
|
||||
IsLauncherVisible="True">
|
||||
|
||||
@@ -65,29 +65,36 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
_rubberbandBrush = null;
|
||||
_rubberbandPen = new Pen(new SolidColorBrush(Colors.Red) { Opacity = 0.5 }, _drawingDesignerItem.ColorViewModel.LineWidth);
|
||||
}
|
||||
else if (DrawMode >= DrawMode.Line && DrawMode <= DrawMode.DirectLine)
|
||||
else if (DrawMode == DrawMode.EraserPreview)
|
||||
{
|
||||
if (DrawMode == DrawMode.Line)
|
||||
_drawingDesignerItem = new EraserPreviewDrawingDesignerItemViewModel(_viewModel, dragStartPoint);
|
||||
|
||||
_rubberbandBrush = null;
|
||||
_rubberbandPen = new Pen(new SolidColorBrush(Colors.Red) { Opacity = 0.5 }, _drawingDesignerItem.ColorViewModel.LineWidth);
|
||||
}
|
||||
else if (DrawMode >= DrawMode.ErasableLine && DrawMode <= DrawMode.ErasableDirectLine)
|
||||
{
|
||||
if (DrawMode == DrawMode.ErasableLine)
|
||||
{
|
||||
_drawingDesignerItem = new LineDrawingDesignerItemViewModel(_viewModel, dragStartPoint, true);
|
||||
}
|
||||
else if (DrawMode == DrawMode.Rectangle)
|
||||
else if (DrawMode == DrawMode.ErasableRectangle)
|
||||
{
|
||||
_drawingDesignerItem = new RectangleDrawingDesignerItemViewModel(_viewModel, dragStartPoint, true);
|
||||
}
|
||||
else if (DrawMode == DrawMode.Ellipse)
|
||||
else if (DrawMode == DrawMode.ErasableEllipse)
|
||||
{
|
||||
_drawingDesignerItem = new EllipseDrawingDesignerItemViewModel(_viewModel, dragStartPoint, true);
|
||||
}
|
||||
else if (DrawMode == DrawMode.Polyline)
|
||||
else if (DrawMode == DrawMode.ErasablePolyline)
|
||||
{
|
||||
_drawingDesignerItem = new PolylineDrawingDesignerItemViewModel(_viewModel, dragStartPoint, true);
|
||||
}
|
||||
else if (DrawMode == DrawMode.Polygon)
|
||||
else if (DrawMode == DrawMode.ErasablePolygon)
|
||||
{
|
||||
_drawingDesignerItem = new PolygonDrawingDesignerItemViewModel(_viewModel, dragStartPoint, true);
|
||||
}
|
||||
else if (DrawMode == DrawMode.DirectLine)
|
||||
else if (DrawMode == DrawMode.ErasableDirectLine)
|
||||
{
|
||||
_drawingDesignerItem = new DirectLineDrawingDesignerItemViewModel(_viewModel, dragStartPoint, true);
|
||||
}
|
||||
@@ -96,29 +103,29 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
_rubberbandPen = new Pen(ColorObject.ToBrush(_drawingDesignerItem.ColorViewModel.LineColor), _drawingDesignerItem.ColorViewModel.LineWidth);
|
||||
_rubberbandPen.DashStyle = new DashStyle(StrokeDashArray.Dash[(int)_drawingDesignerItem.ColorViewModel.LineDashStyle], 1);
|
||||
}
|
||||
else if (DrawMode >= DrawMode.FillableLine && DrawMode <= DrawMode.FillableDirectLine)
|
||||
else if (DrawMode >= DrawMode.Line && DrawMode <= DrawMode.DirectLine)
|
||||
{
|
||||
if (DrawMode == DrawMode.FillableLine)
|
||||
if (DrawMode == DrawMode.Line)
|
||||
{
|
||||
_drawingDesignerItem = new LineDrawingDesignerItemViewModel(_viewModel, dragStartPoint, false);
|
||||
}
|
||||
else if (DrawMode == DrawMode.FillableRectangle)
|
||||
else if (DrawMode == DrawMode.Rectangle)
|
||||
{
|
||||
_drawingDesignerItem = new RectangleDrawingDesignerItemViewModel(_viewModel, dragStartPoint, false);
|
||||
}
|
||||
else if (DrawMode == DrawMode.FillableEllipse)
|
||||
else if (DrawMode == DrawMode.Ellipse)
|
||||
{
|
||||
_drawingDesignerItem = new EllipseDrawingDesignerItemViewModel(_viewModel, dragStartPoint, false);
|
||||
}
|
||||
else if (DrawMode == DrawMode.FillablePolyline)
|
||||
else if (DrawMode == DrawMode.Polyline)
|
||||
{
|
||||
_drawingDesignerItem = new PolylineDrawingDesignerItemViewModel(_viewModel, dragStartPoint, false);
|
||||
}
|
||||
else if (DrawMode == DrawMode.FillablePolygon)
|
||||
else if (DrawMode == DrawMode.Polygon)
|
||||
{
|
||||
_drawingDesignerItem = new PolygonDrawingDesignerItemViewModel(_viewModel, dragStartPoint, false);
|
||||
}
|
||||
else if (DrawMode == DrawMode.FillableDirectLine)
|
||||
else if (DrawMode == DrawMode.DirectLine)
|
||||
{
|
||||
_drawingDesignerItem = new DirectLineDrawingDesignerItemViewModel(_viewModel, dragStartPoint, false);
|
||||
}
|
||||
|
||||
@@ -13,19 +13,23 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
ConnectingLineBoundary = 13,
|
||||
//101-110为可部分擦除的形状
|
||||
Eraser = 100,
|
||||
Line = 101,
|
||||
Rectangle = 102,
|
||||
Ellipse = 103,
|
||||
Polyline = 104,
|
||||
Polygon = 105,
|
||||
DirectLine = 106,
|
||||
//不可部分擦除
|
||||
FillableLine = 111,
|
||||
FillableRectangle = 112,
|
||||
FillableEllipse = 113,
|
||||
FillablePolyline = 114,
|
||||
FillablePolygon = 115,
|
||||
FillableDirectLine = 116,
|
||||
EraserPreview = 101,
|
||||
ErasableLine = 110,
|
||||
ErasableRectangle = 111,
|
||||
ErasableEllipse = 112,
|
||||
ErasablePolyline = 113,
|
||||
ErasablePolygon = 114,
|
||||
ErasableDirectLine = 115,
|
||||
|
||||
Text = 200,
|
||||
Line = 210,
|
||||
Rectangle = 211,
|
||||
Ellipse = 212,
|
||||
Polyline = 213,
|
||||
Polygon = 214,
|
||||
DirectLine = 215,
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,6 +167,10 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
[XmlArray]
|
||||
public List<SerializableItem> Connections { get; set; } = new List<SerializableItem>();
|
||||
|
||||
|
||||
[XmlAttribute]
|
||||
public string Thumbnail
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,7 +146,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
|
||||
private DrawMode _shapeDrawMode = DrawMode.Rectangle;
|
||||
private DrawMode _shapeDrawMode = DrawMode.ErasableRectangle;
|
||||
public DrawMode DrawingDrawMode
|
||||
{
|
||||
get
|
||||
|
||||
@@ -9,6 +9,7 @@ using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Xml.Serialization;
|
||||
using AIStudio.Wpf.DiagramDesigner.Geometrys;
|
||||
using AIStudio.Wpf.DiagramDesigner.Helpers;
|
||||
using AIStudio.Wpf.DiagramDesigner.Models;
|
||||
@@ -669,6 +670,10 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
return menuOptions;
|
||||
}
|
||||
}
|
||||
public string Thumbnail
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public bool ShowMenuOptions
|
||||
{
|
||||
|
||||
@@ -20,11 +20,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public DirectLineDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.DirectLine, startPoint, erasable)
|
||||
public DirectLineDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.ErasableDirectLine, startPoint, erasable)
|
||||
{
|
||||
}
|
||||
|
||||
public DirectLineDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.DirectLine, points, erasable)
|
||||
public DirectLineDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.ErasableDirectLine, points, erasable)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -19,11 +19,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public EllipseDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.Rectangle, startPoint, erasable)
|
||||
public EllipseDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.ErasableRectangle, startPoint, erasable)
|
||||
{
|
||||
}
|
||||
|
||||
public EllipseDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.Rectangle, points, erasable)
|
||||
public EllipseDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.ErasableRectangle, points, erasable)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -20,11 +20,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public LineDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.Line, startPoint, erasable)
|
||||
public LineDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.ErasableLine, startPoint, erasable)
|
||||
{
|
||||
}
|
||||
|
||||
public LineDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.Line, points, erasable)
|
||||
public LineDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.ErasableLine, points, erasable)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -16,11 +16,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public PolygonDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.Line, startPoint, erasable)
|
||||
public PolygonDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.ErasableLine, startPoint, erasable)
|
||||
{
|
||||
}
|
||||
|
||||
public PolygonDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.Line, points, erasable)
|
||||
public PolygonDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.ErasableLine, points, erasable)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -21,11 +21,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public PolylineDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.Line, startPoint, erasable)
|
||||
public PolylineDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.ErasableLine, startPoint, erasable)
|
||||
{
|
||||
}
|
||||
|
||||
public PolylineDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.Line, points, erasable)
|
||||
public PolylineDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.ErasableLine, points, erasable)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -19,11 +19,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public RectangleDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.Rectangle, startPoint, erasable)
|
||||
public RectangleDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.ErasableRectangle, startPoint, erasable)
|
||||
{
|
||||
}
|
||||
|
||||
public RectangleDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.Rectangle, points, erasable)
|
||||
public RectangleDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.ErasableRectangle, points, erasable)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.ComponentModel;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
@@ -347,6 +348,10 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
string Thumbnail
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
#region 如果这个赋值了,优先用这个的
|
||||
IDrawModeViewModel DrawModeViewModel
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user