// <!--------------------------------- Сохранение - Конец -----------------------------> // <!--------------------------------- Загрузка - Начало -----------------------------> public void LoadProcess(SaveProcess process, DrawArea area) { // Создаём начальный и конечный блоки StartBlockWPF startBlock = new StartBlockWPF(process.StartElement); EndBlockWPF endBlock = new EndBlockWPF(process.EndElement); // Кидаем их на поле area.Children.Add(startBlock); area.Children.Add(endBlock); // Помечаем, что они уже есть area.IsHaveStartEnd = true; // Тут лежат уже обработанные блоки Dictionary <Guid, ProcedureWPF> worksavelistproc = new Dictionary <Guid, ProcedureWPF>(); Dictionary <Guid, ResourceWPF> worksavelistres = new Dictionary <Guid, ResourceWPF>(); // Проходим по сохранённым процедурам foreach (var proc in process.ProcedureList) { area.Children.Add(LoadProcedureBlock(proc, worksavelistproc)); } // Проходим по всем ресурсам foreach (var res in process.ResourceList) { area.Children.Add(LoadResourceBlock(res, worksavelistres)); } // Проходим по всем связям с процедурами foreach (SaveProcedureConnection connectproc in process.ProcedureConnectonList) { area.Children.Add(LoadProcConnection(connectproc, worksavelistproc, startBlock, endBlock)); } // Проходим по всем связям с ресурсами foreach (SaveResourceConnection connectres in process.ResourceConnectionList) { area.Children.Add(LoadResConnection(connectres, worksavelistproc, worksavelistres)); } }
// Загрузка связи с процедурами private ProcConnectionWPF LoadProcConnection(SaveProcedureConnection connectproc, Dictionary <Guid, ProcedureWPF> worksavelistproc, StartBlockWPF startBlock, EndBlockWPF endBlock) { ProcedureWPF procStart = null; ProcedureWPF procEnd = null; if (connectproc.StartID.CompareTo(new Guid()) != 0) { procStart = worksavelistproc[connectproc.StartID]; } if (connectproc.EndID.CompareTo(new Guid()) != 0) { procEnd = worksavelistproc[connectproc.EndID]; } ProcConnectionWPF connection = null; if (procStart != null && procEnd != null) { connection = new ProcConnectionWPF(procStart, procEnd, connectproc.RelativeStartPosition, connectproc.RelativeEndPosition, connectproc.StartPort, connectproc.EndPort); procStart.AddOutPutConnection(connection); procEnd.AddInPutConnection(connection); } else { if (procStart == null) { connection = new ProcConnectionWPF(startBlock, procEnd, connectproc.RelativeStartPosition, connectproc.RelativeEndPosition, connectproc.StartPort, connectproc.EndPort); procEnd.AddInPutConnection(connection); startBlock.AddOutPutConnection(connection); } if (procEnd == null) { connection = new ProcConnectionWPF(procStart, endBlock, connectproc.RelativeStartPosition, connectproc.RelativeEndPosition, connectproc.StartPort, connectproc.EndPort); procStart.AddOutPutConnection(connection); endBlock.AddInPutConnection(connection); } } return(connection); }