From f99fd93b3fed6411e6f6c03b350ea1414d42b387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=89=BE=E7=AB=B9?= Date: Sat, 11 Feb 2023 23:51:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=89=A9=E7=90=86=E5=B0=BA?= =?UTF-8?q?=E5=AF=B8=E8=BF=9B=E8=A1=8C=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AIStudio.Wpf.DiagramApp/Models/DiagramItem.cs | 130 -------------- .../ViewModels/DiagramsViewModel.cs | 44 +---- AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml | 18 +- .../Controls/DesignerCanvas.cs | 2 +- .../Connector/ConnectorInfoItemBase.cs | 8 +- .../Models/Serializables/DesignerItemBase.cs | 11 +- .../Models/Serializables/DiagramItem.cs | 165 ++++++++++++++++++ .../Connector/ConnectorInfoBase.cs | 8 +- .../DesignerItemViewModelBase.cs | 16 +- .../BaseViewModel/DiagramViewModel.cs | 123 +++++++++++-- .../ViewModels/IDiagramViewModel.cs | 19 +- .../Controls/FlowchartEditor.xaml.cs | 4 +- .../Models/DiagramDataExtention.cs | 16 +- 13 files changed, 333 insertions(+), 231 deletions(-) delete mode 100644 AIStudio.Wpf.DiagramApp/Models/DiagramItem.cs create mode 100644 AIStudio.Wpf.DiagramDesigner/Models/Serializables/DiagramItem.cs diff --git a/AIStudio.Wpf.DiagramApp/Models/DiagramItem.cs b/AIStudio.Wpf.DiagramApp/Models/DiagramItem.cs deleted file mode 100644 index 06e14f6..0000000 --- a/AIStudio.Wpf.DiagramApp/Models/DiagramItem.cs +++ /dev/null @@ -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 DesignerItems { get; set; } = new List(); - - [XmlArray] - public List Connections { get; set; } = new List(); - - - } -} diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/DiagramsViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/DiagramsViewModel.cs index 940b280..c803081 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/DiagramsViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/DiagramsViewModel.cs @@ -245,13 +245,13 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels viewModel.Name = diagramItem.Name; viewModel.DiagramType = diagramItem.DiagramType; viewModel.ShowGrid = diagramItem.ShowGrid; - viewModel.GridCellSize = diagramItem.GridCellSize; + viewModel.PhysicalGridCellSize = diagramItem.PhysicalGridCellSize; viewModel.CellHorizontalAlignment = diagramItem.CellHorizontalAlignment; viewModel.CellVerticalAlignment = diagramItem.CellVerticalAlignment; viewModel.PageSizeOrientation = diagramItem.PageSizeOrientation; - viewModel.PageSize = diagramItem.PageSize; + viewModel.PhysicalPageSize = diagramItem.PhysicalPageSize; viewModel.PageSizeType = diagramItem.PageSizeType; - viewModel.GridMarginSize = diagramItem.GridMarginSize; + viewModel.PhysicalGridMarginSize = diagramItem.PhysicalGridMarginSize; viewModel.GridColor = diagramItem.GridColor; foreach (var diagramItemData in diagramItem.DesignerItems) @@ -314,18 +314,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels foreach (var viewModel in DiagramViewModels) { - DiagramItem diagramItem = new DiagramItem(); - 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; + DiagramItem diagramItem = new DiagramItem(viewModel); var selectedDesignerItems = viewModel.Items.OfType(); var selectedConnections = viewModel.Items.OfType(); @@ -450,18 +439,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels if (DiagramViewModel != null) { var viewModel = DiagramViewModel; - DiagramItem diagramItem = new DiagramItem(); - 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; + DiagramItem diagramItem = new DiagramItem(viewModel); var selectedDesignerItems = viewModel.Items.OfType(); var selectedConnections = viewModel.Items.OfType(); @@ -469,18 +447,8 @@ 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(); - viewModel = new DiagramViewModel(); + viewModel = new DiagramViewModel(diagramItem); 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) { diff --git a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml index 2b8d7a6..9dc5435 100644 --- a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml +++ b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml @@ -1523,16 +1523,16 @@ - - - - + + + + - - - - + + + + @@ -2022,7 +2022,7 @@ - 鼠标位置: + 鼠标位置mm: , diff --git a/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs b/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs index fd7efef..677cd24 100644 --- a/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs +++ b/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs @@ -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); diff --git a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/Connector/ConnectorInfoItemBase.cs b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/Connector/ConnectorInfoItemBase.cs index bfc5b05..f8fe900 100644 --- a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/Connector/ConnectorInfoItemBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/Connector/ConnectorInfoItemBase.cs @@ -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; diff --git a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DesignerItemBase.cs b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DesignerItemBase.cs index 10879bc..b7b46ec 100644 --- a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DesignerItemBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DesignerItemBase.cs @@ -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; diff --git a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DiagramItem.cs b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DiagramItem.cs new file mode 100644 index 0000000..5aecf31 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/DiagramItem.cs @@ -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 DesignerItems { get; set; } = new List(); + + [XmlArray] + public List Connections { get; set; } = new List(); + + + } +} diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorInfoBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorInfoBase.cs index 88ebef0..07be8cd 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorInfoBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorInfoBase.cs @@ -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 diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs index 9989d3c..efb5d5a 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs @@ -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); } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs index 0075887..d9f8a1c 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs @@ -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(); - /// - /// 用于wpf大小与物理像素之间转换 - /// - 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 } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs index dae9ff6..fa64ccc 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs @@ -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); diff --git a/AIStudio.Wpf.Flowchart/Controls/FlowchartEditor.xaml.cs b/AIStudio.Wpf.Flowchart/Controls/FlowchartEditor.xaml.cs index 0dc5286..304ca53 100644 --- a/AIStudio.Wpf.Flowchart/Controls/FlowchartEditor.xaml.cs +++ b/AIStudio.Wpf.Flowchart/Controls/FlowchartEditor.xaml.cs @@ -33,14 +33,14 @@ namespace AIStudio.Wpf.Flowchart.Controls { _diagramViewModel = new DiagramViewModel(); _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.CellHorizontalAlignment = CellHorizontalAlignment.Center; _diagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center; _diagramViewModel.PageSizeType = PageSizeType.Custom; _diagramViewModel.PageSize = new SizeBase(double.NaN, double.NaN); _diagramViewModel.ColorViewModel = new ColorViewModel() { LineWidth = 2 }; - //_diagramViewModel.DrawModeViewModel = new DrawModeViewModel() { LineDrawMode = DrawMode.BoundaryConnectingLine }; + _diagramViewModel.DrawModeViewModel = new DrawModeViewModel() { LineDrawMode = DrawMode.ConnectingLineSmooth }; _diagramViewModel.PropertyChanged += DiagramViewModel_PropertyChanged; } diff --git a/AIStudio.Wpf.Flowchart/Models/DiagramDataExtention.cs b/AIStudio.Wpf.Flowchart/Models/DiagramDataExtention.cs index cf08a6c..55192e4 100644 --- a/AIStudio.Wpf.Flowchart/Models/DiagramDataExtention.cs +++ b/AIStudio.Wpf.Flowchart/Models/DiagramDataExtention.cs @@ -54,10 +54,10 @@ namespace AIStudio.Wpf.Flowchart.Models diagramNode.ParentId = nodeModel.ParentId.ToString(); } diagramNode.Label = nodeModel.Text; - diagramNode.Width = nodeModel.ItemWidth * nodeModel.Root.ScreenScale; - diagramNode.Height = nodeModel.ItemHeight * nodeModel.Root.ScreenScale; - diagramNode.X = nodeModel.Left * nodeModel.Root.ScreenScale; - diagramNode.Y = nodeModel.Top * nodeModel.Root.ScreenScale; + diagramNode.Width = nodeModel.ItemWidth * ScreenHelper.ScreenScale; + diagramNode.Height = nodeModel.ItemHeight * ScreenHelper.ScreenScale; + diagramNode.X = nodeModel.Left * ScreenHelper.ScreenScale; + diagramNode.Y = nodeModel.Top * ScreenHelper.ScreenScale; diagramNode.ZIndex = nodeModel.ZIndex; diagramNode.Type = diagramNode.GetType().Name; diagramNode.PortAlignmentList = nodeModel.Connectors.Select(p => p.Orientation.ToString()).ToList(); @@ -211,10 +211,10 @@ namespace AIStudio.Wpf.Flowchart.Models } nodeModel.Root = diagram; nodeModel.Text = diagramNode.Label; - nodeModel.ItemWidth = diagramNode.Width / diagram.ScreenScale; - nodeModel.ItemHeight = diagramNode.Height / diagram.ScreenScale; - nodeModel.Left = diagramNode.X / diagram.ScreenScale; - nodeModel.Top = diagramNode.Y / diagram.ScreenScale; + nodeModel.ItemWidth = diagramNode.Width / ScreenHelper.ScreenScale; + nodeModel.ItemHeight = diagramNode.Height / ScreenHelper.ScreenScale; + nodeModel.Left = diagramNode.X / ScreenHelper.ScreenScale; + nodeModel.Top = diagramNode.Y / ScreenHelper.ScreenScale; nodeModel.ZIndex = diagramNode.ZIndex; diagramNode.PortAlignmentList?.ForEach(p => nodeModel.AddConnector(new FullyCreatedConnectorInfo(nodeModel, p.ToEnum())));