准备切换到左侧视图模式

This commit is contained in:
kwai
2023-05-11 10:57:08 +08:00
parent adf1ee0805
commit 2045c5e45c
14 changed files with 129 additions and 43 deletions

View File

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

View File

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

View File

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

View File

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

View File

@@ -167,6 +167,10 @@ namespace AIStudio.Wpf.DiagramDesigner
[XmlArray]
public List<SerializableItem> Connections { get; set; } = new List<SerializableItem>();
[XmlAttribute]
public string Thumbnail
{
get; set;
}
}
}

View File

@@ -146,7 +146,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
private DrawMode _shapeDrawMode = DrawMode.Rectangle;
private DrawMode _shapeDrawMode = DrawMode.ErasableRectangle;
public DrawMode DrawingDrawMode
{
get

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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