/// <summary> /// Функция добавляет или замещает элемент на диаграмме, если указано - внутри указанного элемента /// </summary> /// <param name="element"></param> /// <param name="parentElement"></param> public EA.DiagramObject PutElementOnDiagram(EA.Element element) { ElementDesignerHelper.CallLevel++; EA.DiagramObject elementDA; try { Logger.Out(element.Name); Logger.Out("размещаем элемент ", new EA.Element[] { element }); var diagramObjects = CurrentDiagram.DiagramObjects; elementDA = CurrentDiagram.GetDiagramObjectByID(element.ElementID, ""); // Получаем элемент на диаграмме if (elementDA == null) // если элемента нет - создаём { Logger.Out("элемента нет на диаграмме, создаём "); elementDA = CurrentDiagram.DiagramObjects.AddNew("", ""); elementDA.ElementID = element.ElementID; // устанавливаем размер объекта Size elementSize = ElementDesignerHelper.GetDefaultDASize(elementDA); EADOHelper.ApplySizeToDA(elementDA, elementSize, false); int elementID = elementDA.ElementID; Point newDAPoint = ElementDesignerHelper.GetFirstFreePoinForDA(elementDA); EADOHelper.ApplyPointToDA(elementDA, newDAPoint, false); elementDA.Update(); CurrentDiagram.Update(); CurrentDiagram.DiagramObjects.Refresh(); Logger.Out(element.Name + ":создан элемент ", new EA.DiagramObject[] { elementDA }); } else { Logger.Out("элемент уже на диаграмме", new EA.DiagramObject[] { elementDA }); } // Подгоняем ZOrder //SetElementZorder(elementDA); /* * // Проверяем наличие на диаграмме (непосредственных) элементов дочерней иерархии * // Еесли есть такие - вписываем их в текущий элемент * List<EA.DiagramObject> childDAList = EAHelper.GetNearestChildrenDA(element); * Logger.Out("получен список присутсвующих на диагр. дочерних ", childDAList.ToArray()); * foreach (var childDA in childDAList) * { * FitElementInElement(childDA, elementDA); * } * * * // Проверяем наличие на диаграмме элемента родительской иерархии * // При наличии вписываем элемент в него * List<EA.DiagramObject> parentDAList = EAHelper.GetDeployParentHierarchyDA(element); * Logger.Out("получен список родительской иерархии на диаграмме", parentDAList.ToArray()); * if (parentDAList.Count > 0) * { * var nearestParentDA = parentDAList[0]; * FitElementInElement(elementDA, nearestParentDA); * } */ } finally { ElementDesignerHelper.CallLevel--; } return(elementDA); }
/* * /// <summary> * /// Идентификатор текущей библиотеки * /// </summary> * private int _CurrentLibraryID; * public int CurrentLibraryID * { * get * { * return _CurrentLibraryID; * } * set * { * _CurrentLibraryID = value; * } * } */ /* * public ExecResult<Boolean> SetCurrentLibrary() * { * ExecResult<Boolean> result = new ExecResult<bool>(); * try * { * var selection = EARepository.GetTreeSelectedPackage(); * if (selection == null || !EAHelper.IsLibrary(selection.Element)) * { * throw new Exception("Не выделен библиотечный пакет"); * } * CurrentLibraryID = selection.PackageID; * result.message = "установлен ID библиотеки=" + CurrentLibraryID; * * * } * catch (Exception ex) * { * result.setException(ex); * } * * return result; * * } */ /// <summary> /// Размещает на диаграмме под элементом дерево компонентов, размещённых в нём /// </summary> /// <param name="onlyParent"></param> /// <returns></returns> public ExecResult <Boolean> PutChildrenDeployHierarchy(string location) { ExecResult <Boolean> result = new ExecResult <bool>(); ElementDesignerHelper.CallLevel = 0; try { EA.Element selectedElement = null; switch (location) { case "TreeView": throw new Exception("Доступно только для диаграммы"); case "Diagram": case "MainMenu": if ((EARepository.GetCurrentDiagram() == null) || (EARepository.GetCurrentDiagram() != null && EARepository.GetCurrentDiagram().DiagramID != CurrentDiagram.DiagramID)) { throw new Exception("Текущая диаграмма должны быть открыта"); } List <EA.Element> selectedElementList = EAHelper.GetSelectedLibElement_Diagram(); if (selectedElementList.Count == 0) { throw new Exception("На текщей диаграммме нет выделенных библиотечных элементов"); } selectedElement = selectedElementList[0]; break; } // Получаем дерево дочерних элементов контейнеров DPTreeNode <EA.Element> сhildrenDHierarchy = LibraryHelper.GetDeployChildrenHierarchy(selectedElement); // Для начала размещаем на диаграмме корневой элемент EA.DiagramObject rootDA = PutElementOnDiagram(selectedElement); // Проходимся по иерархии и размещаем элементы на диаграмме List <DPTreeNode <EA.Element> > currentLevelNodes = new List <DPTreeNode <EA.Element> >(); currentLevelNodes.Add(сhildrenDHierarchy); List <DPTreeNode <EA.Element> > childLevelNodes = сhildrenDHierarchy.Children.ToList <DPTreeNode <EA.Element> >(); Point levelStartPoint = new Point(rootDA.left, rootDA.bottom - DAConst.border); Point levelEndPoint = new Point(levelStartPoint.X, levelStartPoint.Y); while (childLevelNodes.Count > 0) { foreach (DPTreeNode <EA.Element> childLevelNode in childLevelNodes) { // Размещаем элемент на диаграмме EA.DiagramObject curDA = PutElementOnDiagram(childLevelNode.Value); // Подвигаем элемент на отведённым ему уровень EADOHelper.ApplyPointToDA(curDA, new Point(levelEndPoint.X, levelStartPoint.Y)); int newLevelRight = curDA.right + DAConst.border; int newLevelBottom = curDA.bottom < levelEndPoint.Y ? curDA.bottom : levelEndPoint.Y; levelEndPoint = new Point(newLevelRight, newLevelBottom); } // коллекционируем список узлов уровнем ниже List <DPTreeNode <EA.Element> > grandchildLevelNodes = new List <DPTreeNode <EA.Element> >(); foreach (DPTreeNode <EA.Element> childlevelNode in childLevelNodes) { grandchildLevelNodes.AddRange(childlevelNode.Children); } childLevelNodes = grandchildLevelNodes; // делаем список узлов уровнем ниже - текущим // смещаем координаты размещения следующего уровня компонентов levelStartPoint = new Point(levelStartPoint.X, levelEndPoint.Y - DAConst.border); levelEndPoint = new Point(levelStartPoint.X, levelStartPoint.Y - DAConst.border); } //CurrentDiagram.DiagramLinks.Refresh(); //DPAddin.LinkDesigner.SetLinkTypeVisibility(LinkType.Deploy, false); EARepository.ReloadDiagram(CurrentDiagram.DiagramID); } catch (Exception ex) { result.setException(ex); } return(result); }