使用物理尺寸进行设置

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

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

View File

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

View File

@@ -1,4 +1,5 @@
using AIStudio.Wpf.DiagramDesigner;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -33,13 +34,13 @@ namespace AIStudio.Wpf.DiagramDesigner
this.Reserve = reserve;
}
[XmlAttribute]
[XmlAttribute("Left")]
public double PhysicalLeft
{
get; set;
}
[XmlAttribute]
[XmlAttribute("Top")]
public double PhysicalTop
{
get; set;
@@ -69,13 +70,15 @@ namespace AIStudio.Wpf.DiagramDesigner
get; set;
}
[XmlAttribute]
[JsonProperty(PropertyName = "ItemWidth")]
[XmlAttribute("ItemWidth")]
public double PhysicalItemWidth
{
get; set;
}
[XmlAttribute]
[JsonProperty(PropertyName = "ItemHeight")]
[XmlAttribute("ItemHeight")]
public double PhysicalItemHeight
{
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
{
return ConnectorWidth * (Root?.ScreenScale ?? 1d);
return ScreenHelper.WidthToMm(ConnectorWidth);
}
set
{
ConnectorWidth = value / (Root?.ScreenScale ?? 1d);
ConnectorWidth = ScreenHelper.MmToWidth(value);
}
}
@@ -134,11 +134,11 @@ namespace AIStudio.Wpf.DiagramDesigner
{
get
{
return ConnectorHeight * (Root?.ScreenScale ?? 1d);
return ScreenHelper.WidthToMm(ConnectorHeight);
}
set
{
ConnectorHeight = value / (Root?.ScreenScale ?? 1d);
ConnectorHeight = ScreenHelper.MmToWidth(value);
}
}
#endregion

View File

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

View File

@@ -106,7 +106,22 @@ namespace AIStudio.Wpf.DiagramDesigner
}
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
{
_gridCellSize.Width = value;
RaisePropertyChanged(nameof(PhysicalGridCellWidth));
RaisePropertyChanged(nameof(GridCellSize));
}
}
@@ -214,11 +230,48 @@ namespace AIStudio.Wpf.DiagramDesigner
}
set
{
_gridCellSize.Height = value;
_gridCellSize.Height = value;
RaisePropertyChanged(nameof(PhysicalGridCellHeight));
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;
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;
[Browsable(false)]
public double ZoomValue
@@ -414,11 +503,6 @@ namespace AIStudio.Wpf.DiagramDesigner
get; set;
} = new DiagramOption();
/// <summary>
/// 用于wpf大小与物理像素之间转换
/// </summary>
public double ScreenScale { get; set; } = 1;
private double OffsetX = 10;
private double OffsetY = 10;
#endregion
@@ -601,8 +685,6 @@ namespace AIStudio.Wpf.DiagramDesigner
private DoCommandManager DoCommandManager = new DoCommandManager();
public DiagramViewModel()
{
SetScreenScale();
CreateNewDiagramCommand = new SimpleCommand(ExecuteEnable, ExecuteCreateNewDiagramCommand);
AddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteAddItemCommand);
DirectAddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteDirectAddItemCommand);
@@ -645,7 +727,21 @@ namespace AIStudio.Wpf.DiagramDesigner
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;
}
@@ -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;
}
Size PhysicalPageSize
{
get; set;
}
PageSizeType PageSizeType
{
get; set;
@@ -215,6 +219,10 @@ namespace AIStudio.Wpf.DiagramDesigner
{
get; set;
}
Size PhysicalGridCellSize
{
get; set;
}
PageSizeOrientation PageSizeOrientation
{
get; set;
@@ -231,6 +239,10 @@ namespace AIStudio.Wpf.DiagramDesigner
{
get; set;
}
Size PhysicalGridMarginSize
{
get; set;
}
Color GridColor
{
get; set;
@@ -276,13 +288,6 @@ namespace AIStudio.Wpf.DiagramDesigner
get; set;
}
#endregion
//用于wpf大小与物理像素之间转换
double ScreenScale
{
get; set;
}
void SetScreenScale();
bool ExecuteShortcut(KeyEventArgs e);