使用物理尺寸进行设置

This commit is contained in:
艾竹
2023-02-11 23:51:48 +08:00
parent 59bfed341d
commit f99fd93b3f
13 changed files with 333 additions and 231 deletions

View File

@@ -1,130 +0,0 @@
using AIStudio.Wpf.DiagramDesigner;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
using AIStudio.Wpf.Flowchart;
using AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels;
using AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.Models;
using Newtonsoft.Json;
using AIStudio.Wpf.Flowchart.Models;
using AIStudio.Wpf.Flowchart.ViewModels;
using AIStudio.Wpf.SFC.Models;
using AIStudio.Wpf.SFC.ViewModels;
using System.Windows;
using System.Windows.Media;
using AIStudio.Wpf.DiagramDesigner.Models;
using AIStudio.Wpf.DiagramDesigner.Helpers;
namespace AIStudio.Wpf.DiagramApp.Models
{
[Serializable]
public class DiagramItem
{
public DiagramItem()
{
}
[XmlAttribute]
public string Name { get; set; }
[XmlAttribute]
public DiagramType DiagramType { get; set; }
[XmlAttribute]
public bool ShowGrid { get; set; }
[XmlIgnore]
public Size GridCellSize { get; set; }
[JsonIgnore]
[XmlAttribute("GridCellSize")]
public string XmlGridCellSize
{
get
{
return SerializeHelper.SerializeSize(GridCellSize);
}
set
{
GridCellSize = SerializeHelper.DeserializeSize(value);
}
}
[XmlAttribute]
public CellHorizontalAlignment CellHorizontalAlignment { get; set; }
[XmlAttribute]
public CellVerticalAlignment CellVerticalAlignment { get; set; }
[XmlAttribute]
public PageSizeOrientation PageSizeOrientation { get; set; }
[XmlIgnore]
public Size PageSize { get; set; }
[JsonIgnore]
[XmlAttribute("PageSize")]
public string XmlPageSize
{
get
{
return SerializeHelper.SerializeSize(PageSize);
}
set
{
PageSize = SerializeHelper.DeserializeSize(value);
}
}
[XmlAttribute]
public PageSizeType PageSizeType { get; set; }
[XmlIgnore]
public Size GridMarginSize { get; set; }
[JsonIgnore]
[XmlAttribute("GridMarginSize")]
public string XmlGridMarginSize
{
get
{
return SerializeHelper.SerializeSize(GridMarginSize);
}
set
{
GridMarginSize = SerializeHelper.DeserializeSize(value);
}
}
[XmlIgnore]
public Color GridColor { get; set; }
[JsonIgnore]
[XmlAttribute("GridColor")]
public string XmlGridColor
{
get
{
return SerializeHelper.SerializeColor(GridColor);
}
set
{
GridColor = SerializeHelper.DeserializeColor(value);
}
}
[XmlArray]
public List<SerializableItem> DesignerItems { get; set; } = new List<SerializableItem>();
[XmlArray]
public List<SerializableItem> Connections { get; set; } = new List<SerializableItem>();
}
}

View File

@@ -245,13 +245,13 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
viewModel.Name = diagramItem.Name; viewModel.Name = diagramItem.Name;
viewModel.DiagramType = diagramItem.DiagramType; viewModel.DiagramType = diagramItem.DiagramType;
viewModel.ShowGrid = diagramItem.ShowGrid; viewModel.ShowGrid = diagramItem.ShowGrid;
viewModel.GridCellSize = diagramItem.GridCellSize; viewModel.PhysicalGridCellSize = diagramItem.PhysicalGridCellSize;
viewModel.CellHorizontalAlignment = diagramItem.CellHorizontalAlignment; viewModel.CellHorizontalAlignment = diagramItem.CellHorizontalAlignment;
viewModel.CellVerticalAlignment = diagramItem.CellVerticalAlignment; viewModel.CellVerticalAlignment = diagramItem.CellVerticalAlignment;
viewModel.PageSizeOrientation = diagramItem.PageSizeOrientation; viewModel.PageSizeOrientation = diagramItem.PageSizeOrientation;
viewModel.PageSize = diagramItem.PageSize; viewModel.PhysicalPageSize = diagramItem.PhysicalPageSize;
viewModel.PageSizeType = diagramItem.PageSizeType; viewModel.PageSizeType = diagramItem.PageSizeType;
viewModel.GridMarginSize = diagramItem.GridMarginSize; viewModel.PhysicalGridMarginSize = diagramItem.PhysicalGridMarginSize;
viewModel.GridColor = diagramItem.GridColor; viewModel.GridColor = diagramItem.GridColor;
foreach (var diagramItemData in diagramItem.DesignerItems) foreach (var diagramItemData in diagramItem.DesignerItems)
@@ -314,18 +314,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
foreach (var viewModel in DiagramViewModels) foreach (var viewModel in DiagramViewModels)
{ {
DiagramItem diagramItem = new DiagramItem(); DiagramItem diagramItem = new DiagramItem(viewModel);
diagramItem.Name = viewModel.Name;
diagramItem.DiagramType = viewModel.DiagramType;
diagramItem.ShowGrid = viewModel.ShowGrid;
diagramItem.GridCellSize = viewModel.GridCellSize;
diagramItem.CellHorizontalAlignment = viewModel.CellHorizontalAlignment;
diagramItem.CellVerticalAlignment = viewModel.CellVerticalAlignment;
diagramItem.PageSizeOrientation = viewModel.PageSizeOrientation;
diagramItem.PageSize = viewModel.PageSize;
diagramItem.PageSizeType = viewModel.PageSizeType;
diagramItem.GridMarginSize = viewModel.GridMarginSize;
diagramItem.GridColor = viewModel.GridColor;
var selectedDesignerItems = viewModel.Items.OfType<DesignerItemViewModelBase>(); var selectedDesignerItems = viewModel.Items.OfType<DesignerItemViewModelBase>();
var selectedConnections = viewModel.Items.OfType<ConnectionViewModel>(); var selectedConnections = viewModel.Items.OfType<ConnectionViewModel>();
@@ -450,18 +439,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
if (DiagramViewModel != null) if (DiagramViewModel != null)
{ {
var viewModel = DiagramViewModel; var viewModel = DiagramViewModel;
DiagramItem diagramItem = new DiagramItem(); DiagramItem diagramItem = new DiagramItem(viewModel);
diagramItem.Name = viewModel.Name;
diagramItem.DiagramType = viewModel.DiagramType;
diagramItem.ShowGrid = viewModel.ShowGrid;
diagramItem.GridCellSize = viewModel.GridCellSize;
diagramItem.CellHorizontalAlignment = viewModel.CellHorizontalAlignment;
diagramItem.CellVerticalAlignment = viewModel.CellVerticalAlignment;
diagramItem.PageSizeOrientation = viewModel.PageSizeOrientation;
diagramItem.PageSize = viewModel.PageSize;
diagramItem.PageSizeType = viewModel.PageSizeType;
diagramItem.GridMarginSize = viewModel.GridMarginSize;
diagramItem.GridColor = viewModel.GridColor;
var selectedDesignerItems = viewModel.Items.OfType<DesignerItemViewModelBase>(); var selectedDesignerItems = viewModel.Items.OfType<DesignerItemViewModelBase>();
var selectedConnections = viewModel.Items.OfType<ConnectionViewModel>(); var selectedConnections = viewModel.Items.OfType<ConnectionViewModel>();
@@ -469,18 +447,8 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
diagramItem.DesignerItems = selectedDesignerItems.Select(p => p.ToSerializableItem("json")).Where(p => p != null).ToList(); 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.Connections = selectedConnections.Select(p => p.ToSerializableItem("json")).Where(p => p != null).ToList();
viewModel = new DiagramViewModel(); viewModel = new DiagramViewModel(diagramItem);
viewModel.Name = NewNameHelper.GetNewName(DiagramViewModels.Select(p => p.Name), "页-"); viewModel.Name = NewNameHelper.GetNewName(DiagramViewModels.Select(p => p.Name), "页-");
viewModel.DiagramType = diagramItem.DiagramType;
viewModel.ShowGrid = diagramItem.ShowGrid;
viewModel.GridCellSize = diagramItem.GridCellSize;
viewModel.CellHorizontalAlignment = diagramItem.CellHorizontalAlignment;
viewModel.CellVerticalAlignment = diagramItem.CellVerticalAlignment;
viewModel.PageSizeOrientation = diagramItem.PageSizeOrientation;
viewModel.PageSize = diagramItem.PageSize;
viewModel.PageSizeType = diagramItem.PageSizeType;
viewModel.GridMarginSize = diagramItem.GridMarginSize;
viewModel.GridColor = diagramItem.GridColor;
foreach (var diagramItemData in diagramItem.DesignerItems) foreach (var diagramItemData in diagramItem.DesignerItems)
{ {

View File

@@ -1523,16 +1523,16 @@
<iconPacks:PackIconMaterial Kind="Grid" VerticalAlignment="Center" HorizontalAlignment="Center"/> <iconPacks:PackIconMaterial Kind="Grid" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Fluent:SplitButton.LargeIcon> </Fluent:SplitButton.LargeIcon>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Margin="5" Text="宽度" VerticalAlignment="Center"/> <TextBlock Margin="5" Text="宽度mm" VerticalAlignment="Center"/>
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding DiagramsViewModel.DiagramViewModel.GridCellWidth,Mode=TwoWay}" Minimum="0" Format="0" /> <Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding DiagramsViewModel.DiagramViewModel.PhysicalGridCellWidth,Mode=TwoWay}" Minimum="0" Format="0" />
<TextBlock Margin="5" Text="高度" VerticalAlignment="Center"/> <TextBlock Margin="5" Text="高度mm" VerticalAlignment="Center"/>
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding DiagramsViewModel.DiagramViewModel.GridCellHeight,Mode=TwoWay}" Minimum="0" Format="0" /> <Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding DiagramsViewModel.DiagramViewModel.PhysicalGridCellHeight,Mode=TwoWay}" Minimum="0" Format="0" />
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Margin="5" Text="左右边距" VerticalAlignment="Center"/> <TextBlock Margin="5" Text="左右边距mm" VerticalAlignment="Center"/>
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding DiagramsViewModel.DiagramViewModel.GridMarginWidth,Mode=TwoWay}" Minimum="0" Format="0" /> <Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding DiagramsViewModel.DiagramViewModel.PhysicalGridMarginWidth,Mode=TwoWay}" Minimum="0" Format="0" />
<TextBlock Margin="5" Text="上下边距" VerticalAlignment="Center"/> <TextBlock Margin="5" Text="上下边距mm" VerticalAlignment="Center"/>
<Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding DiagramsViewModel.DiagramViewModel.GridMarginHeight,Mode=TwoWay}" Minimum="0" Format="0" /> <Fluent:Spinner Margin="5" Width="60" Size="Small" Value="{Binding DiagramsViewModel.DiagramViewModel.PhysicalGridMarginHeight,Mode=TwoWay}" Minimum="0" Format="0" />
</StackPanel> </StackPanel>
<Fluent:SplitButton.ToolTip> <Fluent:SplitButton.ToolTip>
@@ -2022,7 +2022,7 @@
<Fluent:StatusBarItem Title="Mouse" HorizontalAlignment="Right" > <Fluent:StatusBarItem Title="Mouse" HorizontalAlignment="Right" >
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" Width="150"> <TextBlock VerticalAlignment="Center" Width="150">
<Run>鼠标位置:</Run> <Run>鼠标位置mm</Run>
<Run Text="{Binding DiagramsViewModel.DiagramViewModel.CurrentPoint.X,StringFormat=f1}"/> <Run Text="{Binding DiagramsViewModel.DiagramViewModel.CurrentPoint.X,StringFormat=f1}"/>
<Run>,</Run> <Run>,</Run>
<Run Text="{Binding DiagramsViewModel.DiagramViewModel.CurrentPoint.Y,StringFormat=f1}"/> <Run Text="{Binding DiagramsViewModel.DiagramViewModel.CurrentPoint.Y,StringFormat=f1}"/>

View File

@@ -379,7 +379,7 @@ namespace AIStudio.Wpf.DiagramDesigner
if (_viewModel.IsReadOnly) return; if (_viewModel.IsReadOnly) return;
Point currentPoint = e.GetPosition(this); Point currentPoint = e.GetPosition(this);
_viewModel.CurrentPoint = currentPoint; _viewModel.CurrentPoint = new Point(ScreenHelper.WidthToMm(currentPoint.X), ScreenHelper.WidthToMm(currentPoint.Y));
var point = CursorPointManager.GetCursorPosition(); var point = CursorPointManager.GetCursorPosition();
_viewModel.CurrentColor = ColorPickerManager.GetColor(point.X, point.Y); _viewModel.CurrentColor = ColorPickerManager.GetColor(point.X, point.Y);

View File

@@ -4,6 +4,7 @@ using System.IO;
using System.Text; using System.Text;
using System.Xml; using System.Xml;
using System.Xml.Serialization; using System.Xml.Serialization;
using Newtonsoft.Json;
namespace AIStudio.Wpf.DiagramDesigner namespace AIStudio.Wpf.DiagramDesigner
{ {
@@ -27,14 +28,15 @@ namespace AIStudio.Wpf.DiagramDesigner
Orientation = viewmodel.Orientation; Orientation = viewmodel.Orientation;
} }
[JsonProperty(PropertyName = "ConnectorWidth")]
[XmlAttribute] [XmlAttribute("ConnectorWidth")]
public double PhysicalConnectorWidth public double PhysicalConnectorWidth
{ {
get; set; get; set;
} }
[XmlAttribute] [JsonProperty(PropertyName = "ConnectorHeight")]
[XmlAttribute("ConnectorHeight")]
public double PhysicalConnectorHeight public double PhysicalConnectorHeight
{ {
get; set; get; set;

View File

@@ -1,4 +1,5 @@
using AIStudio.Wpf.DiagramDesigner; using AIStudio.Wpf.DiagramDesigner;
using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -33,13 +34,13 @@ namespace AIStudio.Wpf.DiagramDesigner
this.Reserve = reserve; this.Reserve = reserve;
} }
[XmlAttribute] [XmlAttribute("Left")]
public double PhysicalLeft public double PhysicalLeft
{ {
get; set; get; set;
} }
[XmlAttribute] [XmlAttribute("Top")]
public double PhysicalTop public double PhysicalTop
{ {
get; set; get; set;
@@ -69,13 +70,15 @@ namespace AIStudio.Wpf.DiagramDesigner
get; set; get; set;
} }
[XmlAttribute] [JsonProperty(PropertyName = "ItemWidth")]
[XmlAttribute("ItemWidth")]
public double PhysicalItemWidth public double PhysicalItemWidth
{ {
get; set; get; set;
} }
[XmlAttribute] [JsonProperty(PropertyName = "ItemHeight")]
[XmlAttribute("ItemHeight")]
public double PhysicalItemHeight public double PhysicalItemHeight
{ {
get; set; get; set;

View File

@@ -0,0 +1,165 @@
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Media;
using System.Xml;
using System.Xml.Serialization;
using AIStudio.Wpf.DiagramDesigner.Models;
using Newtonsoft.Json;
namespace AIStudio.Wpf.DiagramDesigner
{
[Serializable]
public class DiagramItem
{
public DiagramItem()
{
}
public DiagramItem(IDiagramViewModel diagramView)
{
Name = diagramView.Name;
DiagramType = diagramView.DiagramType;
ShowGrid = diagramView.ShowGrid;
PhysicalGridCellSize = diagramView.PhysicalGridCellSize;
CellHorizontalAlignment = diagramView.CellHorizontalAlignment;
CellVerticalAlignment = diagramView.CellVerticalAlignment;
PageSizeOrientation = diagramView.PageSizeOrientation;
PhysicalPageSize = diagramView.PhysicalPageSize;
PageSizeType = diagramView.PageSizeType;
PhysicalGridMarginSize = diagramView.PhysicalGridMarginSize;
GridColor = diagramView.GridColor;
}
[XmlAttribute]
public string Name
{
get; set;
}
[XmlAttribute]
public DiagramType DiagramType
{
get; set;
}
[XmlAttribute]
public bool ShowGrid
{
get; set;
}
[XmlIgnore]
public Size PhysicalGridCellSize
{
get; set;
}
[JsonIgnore]
[XmlAttribute("GridCellSize")]
public string XmlGridCellSize
{
get
{
return SerializeHelper.SerializeSize(PhysicalGridCellSize);
}
set
{
PhysicalGridCellSize = SerializeHelper.DeserializeSize(value);
}
}
[XmlAttribute]
public CellHorizontalAlignment CellHorizontalAlignment
{
get; set;
}
[XmlAttribute]
public CellVerticalAlignment CellVerticalAlignment
{
get; set;
}
[XmlAttribute]
public PageSizeOrientation PageSizeOrientation
{
get; set;
}
[XmlIgnore]
public Size PhysicalPageSize
{
get; set;
}
[JsonIgnore]
[XmlAttribute("PageSize")]
public string XmlPageSize
{
get
{
return SerializeHelper.SerializeSize(PhysicalPageSize);
}
set
{
PhysicalPageSize = SerializeHelper.DeserializeSize(value);
}
}
[XmlAttribute]
public PageSizeType PageSizeType
{
get; set;
}
[XmlIgnore]
public Size PhysicalGridMarginSize
{
get; set;
}
[JsonIgnore]
[XmlAttribute("GridMarginSize")]
public string XmlGridMarginSize
{
get
{
return SerializeHelper.SerializeSize(PhysicalGridMarginSize);
}
set
{
PhysicalGridMarginSize = SerializeHelper.DeserializeSize(value);
}
}
[XmlIgnore]
public Color GridColor
{
get; set;
}
[JsonIgnore]
[XmlAttribute("GridColor")]
public string XmlGridColor
{
get
{
return SerializeHelper.SerializeColor(GridColor);
}
set
{
GridColor = SerializeHelper.DeserializeColor(value);
}
}
[XmlArray]
public List<SerializableItem> DesignerItems { get; set; } = new List<SerializableItem>();
[XmlArray]
public List<SerializableItem> Connections { get; set; } = new List<SerializableItem>();
}
}

View File

@@ -122,11 +122,11 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get get
{ {
return ConnectorWidth * (Root?.ScreenScale ?? 1d); return ScreenHelper.WidthToMm(ConnectorWidth);
} }
set set
{ {
ConnectorWidth = value / (Root?.ScreenScale ?? 1d); ConnectorWidth = ScreenHelper.MmToWidth(value);
} }
} }
@@ -134,11 +134,11 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get get
{ {
return ConnectorHeight * (Root?.ScreenScale ?? 1d); return ScreenHelper.WidthToMm(ConnectorHeight);
} }
set set
{ {
ConnectorHeight = value / (Root?.ScreenScale ?? 1d); ConnectorHeight = ScreenHelper.MmToWidth(value);
} }
} }
#endregion #endregion

View File

@@ -222,11 +222,11 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get get
{ {
return ItemWidth * (Root?.ScreenScale ?? 1d); return ScreenHelper.WidthToMm(ItemWidth);
} }
set set
{ {
ItemWidth = value / (Root?.ScreenScale ?? 1d); ItemWidth = ScreenHelper.MmToWidth(value);
} }
} }
@@ -235,11 +235,11 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get get
{ {
return ItemHeight * (Root?.ScreenScale ?? 1d); return ScreenHelper.WidthToMm(ItemHeight);
} }
set set
{ {
ItemHeight = value / (Root?.ScreenScale ?? 1d); ItemHeight = ScreenHelper.MmToWidth(value);
} }
} }
@@ -342,11 +342,11 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get get
{ {
return Left * (Root?.ScreenScale ?? 1d); return ScreenHelper.WidthToMm(Left);
} }
set set
{ {
Left = value / (Root?.ScreenScale ?? 1d); Left = ScreenHelper.MmToWidth(value);
} }
} }
@@ -355,11 +355,11 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get get
{ {
return Top * (Root?.ScreenScale ?? 1d); return ScreenHelper.WidthToMm(Top);
} }
set set
{ {
Top = value / (Root?.ScreenScale ?? 1d); Top = ScreenHelper.MmToWidth(value);
} }
} }

View File

@@ -106,7 +106,22 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
set set
{ {
SetProperty(ref _pageSize, value); if (SetProperty(ref _pageSize, value))
{
RaisePropertyChanged(nameof(PhysicalPageSize));
}
}
}
public Size PhysicalPageSize
{
get
{
return new Size(ScreenHelper.WidthToMm(PageSize.Width), ScreenHelper.WidthToMm(PageSize.Height));
}
set
{
PageSize = new Size(ScreenHelper.MmToWidth(value.Width), ScreenHelper.MmToWidth(value.Height));
} }
} }
@@ -202,6 +217,7 @@ namespace AIStudio.Wpf.DiagramDesigner
set set
{ {
_gridCellSize.Width = value; _gridCellSize.Width = value;
RaisePropertyChanged(nameof(PhysicalGridCellWidth));
RaisePropertyChanged(nameof(GridCellSize)); RaisePropertyChanged(nameof(GridCellSize));
} }
} }
@@ -214,11 +230,48 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
set set
{ {
_gridCellSize.Height = value; _gridCellSize.Height = value;
RaisePropertyChanged(nameof(PhysicalGridCellHeight));
RaisePropertyChanged(nameof(GridCellSize)); RaisePropertyChanged(nameof(GridCellSize));
} }
} }
public Size PhysicalGridCellSize
{
get
{
return new Size(ScreenHelper.WidthToMm(GridCellSize.Width), ScreenHelper.WidthToMm(GridCellSize.Height));
}
set
{
GridCellSize = new Size(ScreenHelper.MmToWidth(value.Width), ScreenHelper.MmToWidth(value.Height));
}
}
public double PhysicalGridCellWidth
{
get
{
return ScreenHelper.WidthToMm(GridCellWidth);
}
set
{
GridCellWidth = ScreenHelper.MmToWidth(value);
}
}
public double PhysicalGridCellHeight
{
get
{
return ScreenHelper.WidthToMm(GridCellHeight);
}
set
{
GridCellHeight = ScreenHelper.MmToWidth(value);
}
}
private Color _pageBackground = Colors.White; private Color _pageBackground = Colors.White;
public Color PageBackground public Color PageBackground
{ {
@@ -297,6 +350,42 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
public Size PhysicalGridMarginSize
{
get
{
return new Size(ScreenHelper.WidthToMm(GridMarginSize.Width), ScreenHelper.WidthToMm(GridMarginSize.Height));
}
set
{
GridMarginSize = new Size(ScreenHelper.MmToWidth(value.Width), ScreenHelper.MmToWidth(value.Height));
}
}
public double PhysicalGridMarginWidth
{
get
{
return ScreenHelper.WidthToMm(GridMarginWidth);
}
set
{
GridMarginWidth = ScreenHelper.MmToWidth(value);
}
}
public double PhysicalGridMarginHeight
{
get
{
return ScreenHelper.WidthToMm(GridMarginHeight);
}
set
{
GridMarginHeight = ScreenHelper.MmToWidth(value);
}
}
private double _zoomValue = 1; private double _zoomValue = 1;
[Browsable(false)] [Browsable(false)]
public double ZoomValue public double ZoomValue
@@ -414,11 +503,6 @@ namespace AIStudio.Wpf.DiagramDesigner
get; set; get; set;
} = new DiagramOption(); } = new DiagramOption();
/// <summary>
/// 用于wpf大小与物理像素之间转换
/// </summary>
public double ScreenScale { get; set; } = 1;
private double OffsetX = 10; private double OffsetX = 10;
private double OffsetY = 10; private double OffsetY = 10;
#endregion #endregion
@@ -601,8 +685,6 @@ namespace AIStudio.Wpf.DiagramDesigner
private DoCommandManager DoCommandManager = new DoCommandManager(); private DoCommandManager DoCommandManager = new DoCommandManager();
public DiagramViewModel() public DiagramViewModel()
{ {
SetScreenScale();
CreateNewDiagramCommand = new SimpleCommand(ExecuteEnable, ExecuteCreateNewDiagramCommand); CreateNewDiagramCommand = new SimpleCommand(ExecuteEnable, ExecuteCreateNewDiagramCommand);
AddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteAddItemCommand); AddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteAddItemCommand);
DirectAddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteDirectAddItemCommand); DirectAddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteDirectAddItemCommand);
@@ -645,7 +727,21 @@ namespace AIStudio.Wpf.DiagramDesigner
Items.CollectionChanged += Items_CollectionChanged; Items.CollectionChanged += Items_CollectionChanged;
} }
public bool ExecuteEnable(object para) public DiagramViewModel(DiagramItem diagramItem) :this()
{
DiagramType = diagramItem.DiagramType;
ShowGrid = diagramItem.ShowGrid;
PhysicalGridCellSize = diagramItem.PhysicalGridCellSize;
CellHorizontalAlignment = diagramItem.CellHorizontalAlignment;
CellVerticalAlignment = diagramItem.CellVerticalAlignment;
PageSizeOrientation = diagramItem.PageSizeOrientation;
PhysicalPageSize = diagramItem.PhysicalPageSize;
PageSizeType = diagramItem.PageSizeType;
PhysicalGridMarginSize = diagramItem.PhysicalGridMarginSize;
GridColor = diagramItem.GridColor;
}
public bool ExecuteEnable(object para)
{ {
return IsReadOnly == false; return IsReadOnly == false;
} }
@@ -1825,13 +1921,6 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
} }
#region wpf大小与物理像素之间转换
public void SetScreenScale()
{
ScreenScale = ScreenHelper.ResetScreenScale();
}
#endregion
} }

View File

@@ -203,6 +203,10 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get; set; get; set;
} }
Size PhysicalPageSize
{
get; set;
}
PageSizeType PageSizeType PageSizeType PageSizeType
{ {
get; set; get; set;
@@ -215,6 +219,10 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get; set; get; set;
} }
Size PhysicalGridCellSize
{
get; set;
}
PageSizeOrientation PageSizeOrientation PageSizeOrientation PageSizeOrientation
{ {
get; set; get; set;
@@ -231,6 +239,10 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get; set; get; set;
} }
Size PhysicalGridMarginSize
{
get; set;
}
Color GridColor Color GridColor
{ {
get; set; get; set;
@@ -276,13 +288,6 @@ namespace AIStudio.Wpf.DiagramDesigner
get; set; get; set;
} }
#endregion #endregion
//用于wpf大小与物理像素之间转换
double ScreenScale
{
get; set;
}
void SetScreenScale();
bool ExecuteShortcut(KeyEventArgs e); bool ExecuteShortcut(KeyEventArgs e);

View File

@@ -33,14 +33,14 @@ namespace AIStudio.Wpf.Flowchart.Controls
{ {
_diagramViewModel = new DiagramViewModel(); _diagramViewModel = new DiagramViewModel();
_diagramViewModel.ShowGrid = true; _diagramViewModel.ShowGrid = true;
_diagramViewModel.GridCellSize = new SizeBase(125 / _diagramViewModel.ScreenScale, 125 / _diagramViewModel.ScreenScale); _diagramViewModel.GridCellSize = new SizeBase(125 / ScreenHelper.ScreenScale, 125 / ScreenHelper.ScreenScale);
_diagramViewModel.GridMarginSize = new Size(0, 0); _diagramViewModel.GridMarginSize = new Size(0, 0);
_diagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center; _diagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center;
_diagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center; _diagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center;
_diagramViewModel.PageSizeType = PageSizeType.Custom; _diagramViewModel.PageSizeType = PageSizeType.Custom;
_diagramViewModel.PageSize = new SizeBase(double.NaN, double.NaN); _diagramViewModel.PageSize = new SizeBase(double.NaN, double.NaN);
_diagramViewModel.ColorViewModel = new ColorViewModel() { LineWidth = 2 }; _diagramViewModel.ColorViewModel = new ColorViewModel() { LineWidth = 2 };
//_diagramViewModel.DrawModeViewModel = new DrawModeViewModel() { LineDrawMode = DrawMode.BoundaryConnectingLine }; _diagramViewModel.DrawModeViewModel = new DrawModeViewModel() { LineDrawMode = DrawMode.ConnectingLineSmooth };
_diagramViewModel.PropertyChanged += DiagramViewModel_PropertyChanged; _diagramViewModel.PropertyChanged += DiagramViewModel_PropertyChanged;
} }

View File

@@ -54,10 +54,10 @@ namespace AIStudio.Wpf.Flowchart.Models
diagramNode.ParentId = nodeModel.ParentId.ToString(); diagramNode.ParentId = nodeModel.ParentId.ToString();
} }
diagramNode.Label = nodeModel.Text; diagramNode.Label = nodeModel.Text;
diagramNode.Width = nodeModel.ItemWidth * nodeModel.Root.ScreenScale; diagramNode.Width = nodeModel.ItemWidth * ScreenHelper.ScreenScale;
diagramNode.Height = nodeModel.ItemHeight * nodeModel.Root.ScreenScale; diagramNode.Height = nodeModel.ItemHeight * ScreenHelper.ScreenScale;
diagramNode.X = nodeModel.Left * nodeModel.Root.ScreenScale; diagramNode.X = nodeModel.Left * ScreenHelper.ScreenScale;
diagramNode.Y = nodeModel.Top * nodeModel.Root.ScreenScale; diagramNode.Y = nodeModel.Top * ScreenHelper.ScreenScale;
diagramNode.ZIndex = nodeModel.ZIndex; diagramNode.ZIndex = nodeModel.ZIndex;
diagramNode.Type = diagramNode.GetType().Name; diagramNode.Type = diagramNode.GetType().Name;
diagramNode.PortAlignmentList = nodeModel.Connectors.Select(p => p.Orientation.ToString()).ToList(); diagramNode.PortAlignmentList = nodeModel.Connectors.Select(p => p.Orientation.ToString()).ToList();
@@ -211,10 +211,10 @@ namespace AIStudio.Wpf.Flowchart.Models
} }
nodeModel.Root = diagram; nodeModel.Root = diagram;
nodeModel.Text = diagramNode.Label; nodeModel.Text = diagramNode.Label;
nodeModel.ItemWidth = diagramNode.Width / diagram.ScreenScale; nodeModel.ItemWidth = diagramNode.Width / ScreenHelper.ScreenScale;
nodeModel.ItemHeight = diagramNode.Height / diagram.ScreenScale; nodeModel.ItemHeight = diagramNode.Height / ScreenHelper.ScreenScale;
nodeModel.Left = diagramNode.X / diagram.ScreenScale; nodeModel.Left = diagramNode.X / ScreenHelper.ScreenScale;
nodeModel.Top = diagramNode.Y / diagram.ScreenScale; nodeModel.Top = diagramNode.Y / ScreenHelper.ScreenScale;
nodeModel.ZIndex = diagramNode.ZIndex; nodeModel.ZIndex = diagramNode.ZIndex;
diagramNode.PortAlignmentList?.ForEach(p => nodeModel.AddConnector(new FullyCreatedConnectorInfo(nodeModel, p.ToEnum<ConnectorOrientation>()))); diagramNode.PortAlignmentList?.ForEach(p => nodeModel.AddConnector(new FullyCreatedConnectorInfo(nodeModel, p.ToEnum<ConnectorOrientation>())));