diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs index 69493e1..e8bc873 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs @@ -12,6 +12,7 @@ using AIStudio.Wpf.DiagramDesigner.Geometrys; using AIStudio.Wpf.DiagramDesigner.Helpers; using AIStudio.Wpf.DiagramDesigner.Models; using Newtonsoft.Json; +using static System.Net.Mime.MediaTypeNames; namespace AIStudio.Wpf.DiagramDesigner { @@ -813,6 +814,38 @@ namespace AIStudio.Wpf.DiagramDesigner BuildMenuOptions(); } + public DiagramViewModel(DiagramItem diagramItem, string ext) : this() + { + Init(diagramItem); + + foreach (var diagramItemData in diagramItem.DesignerItems) + { + Type type = TypeHelper.GetType(diagramItemData.ModelTypeName); + DesignerItemViewModelBase itemBase = Activator.CreateInstance(type, this, diagramItemData, ext) as DesignerItemViewModelBase; + Items.Add(itemBase); + } + + foreach (var connection in diagramItem.Connections) + { + Type type = TypeHelper.GetType(connection.SerializableTypeName); + var connectionItem = SerializeHelper.DeserializeObject(type, connection.SerializableString, ext) as ConnectionItem; + + connectionItem.SourceType = System.Type.GetType(connectionItem.SourceTypeName); + connectionItem.SinkType = System.Type.GetType(connectionItem.SinkTypeName); + DesignerItemViewModelBase sourceItem = DiagramViewModelHelper.GetConnectorDataItem(Items, connectionItem.SourceId, connectionItem.SourceType); + ConnectorOrientation sourceConnectorOrientation = connectionItem.SourceOrientation; + FullyCreatedConnectorInfo sourceConnectorInfo = sourceItem.GetFullConnectorInfo(connectionItem.Id, sourceConnectorOrientation, connectionItem.SourceXRatio, connectionItem.SourceYRatio, connectionItem.SourceInnerPoint, connectionItem.SourceInnerPoint); + + DesignerItemViewModelBase sinkItem = DiagramViewModelHelper.GetConnectorDataItem(Items, connectionItem.SinkId, connectionItem.SinkType); + ConnectorOrientation sinkConnectorOrientation = connectionItem.SinkOrientation; + FullyCreatedConnectorInfo sinkConnectorInfo = sinkItem.GetFullConnectorInfo(connectionItem.Id, sinkConnectorOrientation, connectionItem.SinkXRatio, connectionItem.SinkYRatio, connectionItem.SinkInnerPoint, connectionItem.SinkInnerPoint); + + ConnectionViewModel connectionVM = new ConnectionViewModel(this, sourceConnectorInfo, sinkConnectorInfo, connectionItem); + connectionVM.Id = Guid.NewGuid(); + Items.Add(connectionVM); + } + } + public void Init(DiagramItem diagramItem) { DiagramType = diagramItem.DiagramType;