// Загрузка связи с процедурами 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); }
private void AnalizeToken() { var list = _collector.GetHistory(); // Получаем список токенов list = list.OrderBy(x => x.ProcessStartTime).ToList(); // Выстраиваем по времени начала try { MinDuration = list.Min(x => x.ProcessEndTime - x.ProcessStartTime); // Находим минимальную продолжительность } catch (InvalidOperationException ex) { throw new InvalidOperationException("TokenViewer: список токенов содержит 0 токенов"); } // Проставляем блоки foreach (var l in list) { AddBlock(l); } // Проставляем связи (так как пока нет параллельности, идут друг за другом) int count = MainWindow.Children.Count; // Смотрим количество блоков из которых пойдёт связь this.Width = (count + 1) * ProcedureWPF.DEFAULT_WIDTH; for (int i = 0; i < count; i++) { if (i < count - 1) { // Берём начальный и конечный блоки ProcedureWPF Start = MainWindow.Children[i] as ProcedureWPF; ProcedureWPF End = MainWindow.Children[i + 1] as ProcedureWPF; // Создаём связь ProcConnectionWPF connectionWPF = new ProcConnectionWPF(Start, End, new Point(ProcedureWPF.DEFAULT_WIDTH, ProcedureWPF.DEFAULT_HEIGHT / 2), new Point(ProcedureWPF.DEFAULT_WIDTH, ProcedureWPF.DEFAULT_HEIGHT / 2)); // Добавляем связь к ресурсам Start.AddOutPutConnection(connectionWPF); End.AddInPutConnection(connectionWPF); // Добавляем связь на область MainWindow.Children.Add(connectionWPF); } } }