/// <summary> /// Функция возвращает размер элемента, соответствующий размеру элемента на библиотечной диаграмме /// </summary> /// <returns></returns> public static ExecResult <Size> GetElementSizeOnLibDiagram(EA.Element element) { ExecResult <Size> result = new ExecResult <Size>() { code = -1 }; try { // лезем от элемента вверх по дереву пакетов, пока не достигнем верха либо не достигнем пакета без тэга DP_Library после нахождения такого тэга EA.Package curPackage = EARepository.GetPackageByID(element.PackageID); bool foundPackageAfterDPLibrary = false; bool foundDPLibraryPackage = false; while (curPackage != null & !(foundPackageAfterDPLibrary)) { // Проходимся по диаграммам пакета foreach (EA.Diagram curDiagram in curPackage.Diagrams) { // ... В в диаграмме - по объектам foreach (EA.DiagramObject diagramObject in curDiagram.DiagramObjects) { // если объект на диаграмме - наш объект, то срисовываем его размеры как дефолтные if (diagramObject.ElementID == element.ElementID) { Size curSize = ElementDesignerHelper.GetSize(diagramObject); result.value = curSize; result.code = 0; return(result); } } if (curPackage.ParentID != 0) { curPackage = EARepository.GetPackageByID(curPackage.ParentID); } else { curPackage = null; } if (LibraryHelper.IsLibrary(curPackage.Element)) { foundDPLibraryPackage = true; } if (!LibraryHelper.IsLibrary(curPackage.Element) && foundDPLibraryPackage) { foundPackageAfterDPLibrary = true; } } } } catch (Exception ex) { result.setException(ex); } return(result); }
/// <summary> /// Функция передвигает DA по указанному вектору (т.е. смещает на размеры точки) /// </summary> /// <param name="diagramObject"></param> /// <param name="newStart"></param> /// <param name="doUpdate"></param> public static void ApplyVectorToDA(EA.DiagramObject diagramObject, Point vector, bool doUpdate = true) { Size diagramObjectSize = ElementDesignerHelper.GetSize(diagramObject); diagramObject.left += vector.X; diagramObject.right += vector.X; diagramObject.top += vector.Y; diagramObject.bottom += vector.Y; if (doUpdate) { diagramObject.Update(); } }
/// <summary> /// Функция передвигает DA в указанную точку /// </summary> /// <param name="diagramObject"></param> /// <param name="newStart"></param> /// <param name="doUpdate"></param> public static void ApplyPointToDA(EA.DiagramObject diagramObject, Point newStart, bool doUpdate = true) { Size diagramObjectSize = ElementDesignerHelper.GetSize(diagramObject); diagramObject.left = newStart.X; diagramObject.right = diagramObject.left + diagramObjectSize.Width; diagramObject.top = newStart.Y; diagramObject.bottom = diagramObject.top - diagramObjectSize.Height; if (doUpdate) { diagramObject.Update(); } }