/// <summary> /// Размещает на диаграмме укзаанный элемент и иерархию его контейнеров /// </summary> /// <param name="onlyParent"></param> /// <returns></returns> public ExecResult <Boolean> PutChildrenDHierarchyOnDiagram() { ExecResult <Boolean> result = new ExecResult <bool>(); ElementDesignerHelper.CallLevel = 0; try { ExecResult <List <ComponentLevel> > displayLevelsResult = FSelectComponentLevels.Execute(); if (displayLevelsResult.code != 0) { return(result); } // Получаем текущий (библиотечный) элемент дерева EA.Element curElement = null; if (EARepository.GetTreeSelectedElements().Count > 0) { curElement = EARepository.GetTreeSelectedElements().GetAt(0); } Logger.Out("элемент:", new EA.Element[] { curElement }); if (curElement == null || !LibraryHelper.IsLibrary(curElement)) { throw new Exception("Не выделен библиотечный элемент"); } // Получаем список дочерних элементов контейнеров List <EA.Element> сhildrenDHierarchy = LibraryHelper.GetChildHierarchy(curElement); // Размещаем на диаграмме элемент PutElementOnDiagram(curElement); // Проходимся по иерархии и размещаем элементы на диаграмме for (int i = 0; i < сhildrenDHierarchy.Count; i++) { // размещает только элементы выбранных уровней ComponentLevel componentLevel = CLHelper.GetComponentLevel(сhildrenDHierarchy[i]); if (!displayLevelsResult.value.Contains(componentLevel)) { continue; } // Размещаем элемент EA.DiagramObject diagramObject = PutElementOnDiagram(сhildrenDHierarchy[i]); diagramObject.Update(); } CurrentDiagram.DiagramLinks.Refresh(); Context.LinkDesigner.SetLinkTypeVisibility(LinkType.Deploy, false); EARepository.ReloadDiagram(CurrentDiagram.DiagramID); } catch (Exception ex) { result.setException(ex); } return(result); }
/// <summary> /// Размещает на диаграмме укзаанный элемент и иерархию его контейнеров /// </summary> /// <param name="onlyParent"></param> /// <returns></returns> public ExecResult <Boolean> PutParentHierarchyOnDiagram(bool onlyParent = false) { ExecResult <Boolean> result = new ExecResult <bool>(); ElementDesignerHelper.CallLevel = 0; try { ExecResult <List <ComponentLevel> > displayLevelsResult = FSelectComponentLevels.Execute(); if (displayLevelsResult.code != 0) { return(result); } // Получаем текущий (библиотечный) элемент дерева EA.Element curElement = EARepository.GetTreeSelectedObject(); Logger.Out("элемент:", new EA.Element[] { curElement }); if (curElement == null || !LibraryHelper.IsLibrary(curElement)) { throw new Exception("Не выделен библиотечный элемент"); } // Получаем цепочку родительских контейнеров List <EA.Element> deployments = LibraryHelper.GetParentHierarchy(curElement); Logger.Out("цепочка deploy-родителей:", deployments.ToArray()); // Размещаем на диаграмме элемент PutElementOnDiagram(curElement); // Проходимся по иерархии и размещаем элементы на диаграмме EA.Element prevElement = null; for (int i = 0; i < deployments.Count; i++) { // размещает только элементы выбранных уровней ComponentLevel componentLevel = CLHelper.GetComponentLevel(deployments[i]); if (!displayLevelsResult.value.Contains(componentLevel)) { continue; } EA.DiagramObject diagramObject = PutElementOnDiagram(deployments[i]); //diagramObject.Sequence = 1000 - (deployments.Count + i); // Это надо нормально сделать diagramObject.Update(); prevElement = deployments[i]; } CurrentDiagram.DiagramLinks.Refresh(); Context.LinkDesigner.SetLinkTypeVisibility(LinkType.Deploy, false); EARepository.ReloadDiagram(CurrentDiagram.DiagramID); } catch (Exception ex) { result.setException(ex); } return(result); }
/// <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); }
public static ExecResult <bool> Export(string location) { var result = new ExecResult <bool>(); try { EA.Diagram curDiagram = null; if (location == "Diagram" || location == "MainMenu") { curDiagram = Context.EARepository.GetCurrentDiagram(); } else if (location == "TreeView") { curDiagram = Context.EARepository.GetTreeSelectedObject(); } // Экспортируем PNG string pngSavePath = ExportPNG(curDiagram); // Экспортируем Текст string txtSavePath = ExportText(curDiagram); // Создаём .properties файл для публикации String propSavePath = Path.Combine(DPConfig.AppSettings["exchangePath"].Value, "export.properties"); using (System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(propSavePath)) { String guidStr = curDiagram.DiagramGUID.Replace("{", "").Replace("}", ""); streamWriter.WriteLine("OBJID=" + curDiagram.DiagramGUID.Replace("{", "").Replace("}", "")); streamWriter.WriteLine("PARENTPAGE=" + DPConfig.AppSettings["parentPage"].Value); streamWriter.WriteLine("PAGEGENAME=" + guidStr + " " + curDiagram.Name); streamWriter.WriteLine("IMAGE=" + Path.GetFileName(pngSavePath)); streamWriter.WriteLine("TEXT=" + Path.GetFileName(txtSavePath)); } // Запусаем java - публикатор Process process = new Process(); process.StartInfo.FileName = Path.Combine(DPConfig.AppSettings["javaRuntime"].Value, "javaw.exe"); process.StartInfo.Arguments = DPConfig.AppSettings["javaArguments"].Value + " " + propSavePath + ""; //process.StartInfo.RedirectStandardOutput = true; //process.StartInfo.UseShellExecute = false; process.Start(); process.WaitForExit(); } catch (Exception ex) { result.setException(ex); } return(result); }
/// <summary> /// Функция ищет оптимальное место для размещения внутри родительского контейнера /// </summary> /// <param name="parentDA"></param> /// <param name="childDA"></param> /// <param name="childDAList">список других элементов внутри родительского, чтобы не наступить на один из них</param> /// <returns></returns> public static ExecResult <Point> GetPointForChild(EA.DiagramObject parentDA, EA.DiagramObject childDA, List <EA.DiagramObject> childDAList) { ExecResult <Point> result = new ExecResult <Point>() { code = -1 }; // Сначала просто пытаемся поместить childDA возле левого верхнего угла Rectangle requiredRectangle = new Rectangle(parentDA.left + DAConst.border, parentDA.top - 2 * DAConst.border, childDA.right - childDA.left, childDA.top - childDA.bottom); bool intersectsWithOther = false; if (Contain(parentDA, requiredRectangle)) { foreach (var otherChildDA in childDAList) { if (otherChildDA.ElementID == childDA.ElementID) { continue; } if (Intersects(otherChildDA, requiredRectangle)) { intersectsWithOther = true; break; } } if (!intersectsWithOther) { result.value = new Point(requiredRectangle.X, requiredRectangle.Y); result.code = 0; return(result); } } // если мы здесь, значит тупо вписаться не удалось, начинаем шарить вокруг вписанных в родительский элементов, пытаясь найти место foreach (var otherChildDA in childDAList) { if (otherChildDA.ElementID == childDA.ElementID) { continue; } Point point = FindSpaceAround(childDA, otherChildDA, parentDA, childDAList); if (!point.IsEmpty) { result.value = point; result.code = 0; break; } } return(result); }
private ExecResult <Boolean> Test2() { ExecResult <Boolean> result = new ExecResult <bool>(); try { Context.CurrentLibrary = Context.EARepository.GetPackageByGuid("{5C806428-D2F2-4bfc-A043-3B84D3E4CACD}");; // SELECT * FROM t_package WHERE ea_guid = "{5C806428-D2F2-4bfc-A043-3B84D3E4CACD}" ConnectorHelper.LoadConnectorData2(); } catch (Exception ex) { result.setException(ex); } return(result); }
/// <summary> /// Помещения на текущкю диаграмму выбранных узлов и устройств /// </summary> /// <returns></returns> public ExecResult <Boolean> PutContourContourOnDiagram(string location) { ExecResult <Boolean> result = new ExecResult <bool>(); try { if (location == "TreeView" || EARepository.GetCurrentDiagram() == null) { throw new Exception("Операция разрешена только для диаграммы"); } if (!Context.CheckCurrentDiagram()) { throw new Exception("Не установлена или не открыта текущая диаграмма"); } // получаем список библиотечных элементов нужного типа List <NodeData> nodeDataList = LibraryHelper.GetNodeData(new List <ComponentLevel>() { ComponentLevel.ContourContour, ComponentLevel.SystemContour }); // показываем список на форме для отмечания ExecResult <List <NodeData> > ndSelectresult = new FSelectContourContour().Execute(nodeDataList); if (ndSelectresult.code != 0) { return(result); } // что на форме наотмечали, помещаем на диаграмму foreach (NodeData nodeData in ndSelectresult.value) { PutElementOnDiagram(nodeData.Element); } EARepository.ReloadDiagram(CurrentDiagram.DiagramID); } catch (Exception ex) { result.setException(ex); } return(result); }
private ExecResult <Boolean> Test1() { ExecResult <Boolean> result = new ExecResult <bool>(); try { // Открываем и чистим тестовую диаграмму EA.Diagram testDiagram = Context.EARepository.GetDiagramByGuid("{0093407F-0187-42a8-93DC-B97E8FA79EED}"); if (test1Flag == 0) { while (testDiagram.DiagramObjects.Count > 0) { testDiagram.DiagramObjects.DeleteAt(0, true); } testDiagram.Update(); testDiagram.DiagramObjects.Refresh(); Context.EARepository.ReloadDiagram(testDiagram.DiagramID); } Context.EARepository.OpenDiagram(testDiagram.DiagramID); Context.EARepository.ActivateDiagram(testDiagram.DiagramID); Context.CurrentDiagram = testDiagram; // Выделяем элемент EA.Element element = Context.EARepository.GetElementByGuid("{83142BDB-7EE4-48e7-B788-0011E0E2E343}"); Context.EARepository.ShowInProjectView(element); // Запускаем формирование иерархии элементов диаграммы var putDeploymentHierarchyResult = Context.Designer.PutParentHierarchyOnDiagram(); OutExecResult(putDeploymentHierarchyResult); test1Flag = 1; } catch (Exception ex) { result.setException(ex); } return(result); }
/// <summary> /// Функция запуска формы управления коннекторами /// </summary> /// <returns></returns> public ExecResult <Boolean> ManageLinks() { ExecResult <Boolean> result = new ExecResult <bool>(); Logger.Out(""); try { if (Context.CurrentLibrary == null) { EA.Package libPackage = LibraryHelper.GetLibraryRoot(); Context.CurrentLibrary = libPackage; } result = FManageLinks.Execute(); } catch (Exception ex) { result.setException(ex); } return(result); }
/// <summary> /// Функция устанавливает размер элемента по умолчанию, соответствующий размеру элемента на библиотечной диаграмме /// </summary> /// <returns></returns> public static ExecResult <Boolean> SetElementDefaultSize() { ExecResult <Boolean> result = new ExecResult <bool>(); try { var obj = EARepository.GetContextObject(); if (obj == null) { throw new Exception("Нет текущего объекта"); } if (!(obj is EA.Element) || !LibraryHelper.IsLibrary((EA.Element)obj)) { throw new Exception("Выделен не библиотечный элемент"); } EA.Element curElement = (EA.Element)obj; // Ищем размер на библиотечных диаграммах ExecResult <Size> GetElementSizeOnLibDiagramResult = GetElementSizeOnLibDiagram(curElement); if (GetElementSizeOnLibDiagramResult.code != 0) { throw new Exception(GetElementSizeOnLibDiagramResult.message); } EATVHelper.TaggedValueSet(curElement, DAConst.defaultWidthTag, GetElementSizeOnLibDiagramResult.value.Width.ToString()); EATVHelper.TaggedValueSet(curElement, DAConst.defaultHeightTag, GetElementSizeOnLibDiagramResult.value.Height.ToString()); Logger.Out("Найден элемент диаграммы для установки размеров " + GetElementSizeOnLibDiagramResult.value.Width.ToString() + "x" + GetElementSizeOnLibDiagramResult.value.Height.ToString()); } catch (Exception ex) { result.setException(ex); } return(result); }
/// <summary> /// Устанавливает текущую библиотеку /// </summary> /// <returns></returns> public static ExecResult <Boolean> SetCurrentLibrary(string location) { ExecResult <Boolean> result = new ExecResult <bool>(); try { EA.Package libRoot = null; switch (location) { case "Diagram": libRoot = GetLibraryRootFromPackage(EARepository.GetPackageByID(EARepository.GetCurrentDiagram().PackageID)); break; case "TreeView": case "MainMenu": libRoot = GetLibraryRootFromTreeSelection(); break; } if (libRoot == null) { throw new Exception("Не обнаружена библиотека "); } Context.CurrentLibrary = libRoot; result.code = 0; result.value = true; } catch (Exception ex) { result.setException(ex); } return(result); }
public static ExecResult <bool> DiagramElementsReport(string location) { ExecResult <Boolean> result = new ExecResult <bool>(); try { // Получаем диаграмму EA.Diagram reportDiagram = null; switch (location) { case "Diagram": reportDiagram = EARepository.GetCurrentDiagram(); break; case "MainMenu": case "TreeView": if (EARepository.GetTreeSelectedItemType() != EA.ObjectType.otDiagram) { throw new Exception("Не выбрана диаграмма в ProjectExplorer"); } reportDiagram = EARepository.GetTreeSelectedObject(); break; } // Проверяем, что это диаграмма - библиотечная EA.Package diagramPackage = EARepository.GetPackageByID(reportDiagram.PackageID); EA.Package libPackage = LibraryHelper.GetLibraryRootFromPackage(diagramPackage); if (libPackage == null) { throw new Exception("Диаграмма не в библиотеке"); } // Устанавливаем текущую библиотеку if (Context.CurrentLibrary.PackageID != libPackage.PackageID) { Context.CurrentLibrary = libPackage; } // Устанавливаем текущую диаграмму Context.CurrentDiagram = reportDiagram; // запрашиваем параметры показа ExecResult <List <ComponentLevel> > displayLevelsResult = FSelectComponentLevels.Execute(new List <ComponentLevel>() { ComponentLevel.Node, ComponentLevel.Device, ComponentLevel.ExecutionEnv, ComponentLevel.Component }); if (displayLevelsResult.code != 0) { return(result); } // Подготавливаем имя RDLC - файла отчёта string fullReportName = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "Reports", "LibDiagram.rdlc"); if (!File.Exists(fullReportName)) { throw new Exception("файл отчёта " + fullReportName + "не найден"); } // Подготавливаем источники данных для отчёта List <ReportDataSource> reportDataSources = new List <ReportDataSource>(); List <ElementData> elementDataList = EAHelper.GetCurDiagramElementData().Values.ToList <ElementData>(); foreach (var elementData in elementDataList) // Дообогащаем информацию об элементах данными узла размещения { int?rootDeployNodeID = LibraryHelper.GetDeployComponentNode(elementData._ElementID); if (rootDeployNodeID != null) { elementData.RootDeployNodeID = rootDeployNodeID; } } ReportDataSource reportDataSource = new ReportDataSource("DS_ElementData", elementDataList); reportDataSources.Add(reportDataSource); List <ConnectorData> connectorDataList = EAHelper.GetCurDiagramConnectors(); ReportDataSource reportDataSource1 = new ReportDataSource("DS_ConnectorData", connectorDataList); reportDataSources.Add(reportDataSource1); // Подготавливаем параметры отчёта List <ReportParameter> reportParameters = new List <ReportParameter>(); // Картинка диаграммы string SavedDiagramImagePath = DiagramExporter.ExportPNG(reportDiagram); //string base64Image = Convert.ToBase64String(File.ReadAllBytes(SavedDiagramImagePath)); reportParameters.Add(new ReportParameter("paramDiagramImage", "file:///" + SavedDiagramImagePath)); reportParameters.Add(new ReportParameter("paramComponentLevels", string.Join(",", displayLevelsResult.value.Select(cl => ((int)cl).ToString())))); // запускаем форму ExecResult <bool> fReportResult = FReport.Execute(fullReportName, reportDataSources, reportParameters); if (fReportResult.code != 0) { throw new Exception(fReportResult.message); } } catch (Exception ex) { result.setException(ex); } return(result); }
/// <summary> /// Установка Tags для выделенных элементов /// </summary> /// <returns></returns> public ExecResult <Boolean> SetElementTags(string location) { ExecResult <Boolean> result = new ExecResult <bool>(); try { // Сначала получаем список выделеннеых библиотечных элементов List <EA.Element> selectedLibElements = new List <EA.Element>(); switch (location) { case "TreeView": selectedLibElements = EAHelper.GetSelectedLibElement_Tree(); break; case "Diagram": if (!Context.CheckCurrentDiagram()) { throw new Exception("Не установлена или не открыта текущая диаграмма"); } selectedLibElements = EAHelper.GetSelectedLibElement_Diagram(); break; case "MainMenu": if (CurrentDiagram != null) { if (Context.CheckCurrentDiagram()) { selectedLibElements = EAHelper.GetSelectedLibElement_Diagram(); } else { selectedLibElements = EAHelper.GetSelectedLibElement_Tree(); } } else { selectedLibElements = EAHelper.GetSelectedLibElement_Tree(); } break; } if (selectedLibElements.Count == 0) // если не выделены элементы - пытаемся найти выделенные коннекторы { if (location == "Diagram" || location == "MainMenu") { EA.Connector selectedConnector = EAHelper.GetSelectedLibConnector_Diagram(); if (selectedConnector != null) { return(Context.LinkDesigner.SetConnectorTags(location)); } } else { throw new Exception("Не выделены библиотечные элементы"); } } // Конструируем данные тэгов для формы List <TagData> curTagDataList = new List <TagData>(); foreach (EA.Element curElement in selectedLibElements) { foreach (EA.TaggedValue taggedValue in curElement.TaggedValuesEx) { string tagName = taggedValue.Name; TagData curTagData; curTagData = curTagDataList.FirstOrDefault(item => (item.TagName == tagName)); if (curTagData == null) { curTagData = new TagData() { TagName = tagName, TagValue = taggedValue.Value }; curTagDataList.Add(curTagData); } curTagData.TagState = true; curTagData.Count++; if (taggedValue.ElementID != curElement.ElementID) { curTagData.Ex = true; } } } // Открываем форму для установки Tags ExecResult <List <TagData> > setTagsResult = new FSetTags().Execute(curTagDataList); if (setTagsResult.code != 0) { return(result); } // Прописываем в элементах что наустанавливали на форме foreach (EA.Element curElement in selectedLibElements) { foreach (TagData curTagData in setTagsResult.value) { if (curTagData.Enabled) // записываем только для Tags, в котоорые разрешено { if (curTagData.TagState == false) { EATVHelper.TaggedValueRemove(curElement, curTagData.TagName); } else { EATVHelper.TaggedValueSet(curElement, curTagData.TagName, curTagData.TagValue); } } } } } catch (Exception ex) { result.setException(ex); } return(result); }
/// <summary> /// Функция записывает в выделенные элементы признак библиотечного /// </summary> /// <returns></returns> public static ExecResult <Boolean> SetDPLibratyTag(string location) { ExecResult <Boolean> result = new ExecResult <bool>(); if (!Context.CheckCurrentDiagram()) { throw new Exception("Не установлена или не открыта текущая диаграмма"); } try { switch (location) { case "Diagram": if (Context.CurrentDiagram != null) { if (Context.CurrentDiagram.SelectedObjects.Count > 0) { foreach (EA.DiagramObject curDA in Context.CurrentDiagram.SelectedObjects) { EA.Element curElement = EARepository.GetElementByID(curDA.ElementID); TaggedValueSet(curElement, DAConst.DP_LibraryTag, ""); } } else if (Context.CurrentDiagram.SelectedConnector != null) { TaggedValueSet(Context.CurrentDiagram.SelectedConnector, DAConst.DP_LibraryTag, ""); } } break; case "TreeView": foreach (EA.Element curElement in EARepository.GetTreeSelectedElements()) { TaggedValueSet(curElement, DAConst.DP_LibraryTag, ""); } break; case "MainMenu": if (Context.CurrentDiagram != null) { if (Context.CurrentDiagram.SelectedObjects.Count > 0) { foreach (EA.DiagramObject curDA in Context.CurrentDiagram.SelectedObjects) { EA.Element curElement = EARepository.GetElementByID(curDA.ElementID); TaggedValueSet(curElement, DAConst.DP_LibraryTag, ""); } } else if (Context.CurrentDiagram.SelectedConnector != null) { TaggedValueSet(Context.CurrentDiagram.SelectedConnector, DAConst.DP_LibraryTag, ""); } } else { foreach (EA.Element curElement in EARepository.GetTreeSelectedElements()) { TaggedValueSet(curElement, DAConst.DP_LibraryTag, ""); } break; } break; } } catch (Exception ex) { result.setException(ex); } return(result); }
/// <summary> /// Установка Tags для выделенного коннектора /// </summary> /// <returns></returns> public ExecResult <Boolean> SetConnectorTags(string location) { if (!Context.CheckCurrentDiagram()) { throw new Exception("Не установлена или не открыта текущая диаграмма"); } ExecResult <Boolean> result = new ExecResult <bool>(); try { // Сначала получаем список выделеннеых библиотечных элементов EA.Connector selectedConnector = EAHelper.GetSelectedLibConnector_Diagram(false); if (selectedConnector == null) { throw new Exception("Не выделены библиотечные элементы"); } // Конструируем данные тэгов для формы List <TagData> curTagDataList = new List <TagData>(); foreach (EA.ConnectorTag taggedValue in selectedConnector.TaggedValues) { string tagName = taggedValue.Name; TagData curTagData = new TagData() { TagName = tagName, TagValue = taggedValue.Value }; curTagData.TagState = true; curTagData.Ex = false; curTagData.Count = 1; curTagDataList.Add(curTagData); } // Открываем форму для установки Tags ExecResult <List <TagData> > setTagsResult = new FSetTags().Execute(curTagDataList); if (setTagsResult.code != 0) { return(result); } // Прописываем в элементах что наустанавливали на форме foreach (TagData curTagData in setTagsResult.value) { if (curTagData.Enabled) // записываем только для Tags, в котоорые разрешено { if (curTagData.TagState == false) { EATVHelper.TaggedValueRemove(selectedConnector, curTagData.TagName); } else { EATVHelper.TaggedValueSet(selectedConnector, curTagData.TagName, curTagData.TagValue); } } } } catch (Exception ex) { result.setException(ex); } return(result); }
/// <summary> /// Установка Tags для выделеного коннектора и других видимых на диаграмме линков того же типа /// </summary> /// <returns></returns> public ExecResult <Boolean> SetSimilarLinksTags(string location) { ExecResult <Boolean> result = new ExecResult <bool>(); try { // Сначала получаем список выделеннеых библиотечных элементов EA.Connector selectedConnector = EAHelper.GetSelectedLibConnector_Diagram(); if (selectedConnector == null) { throw new Exception("Не выделены библиотечные элементы"); } // Создаём список коннекторов и добавляем к нему выделенный List <EA.Connector> connectorList = new List <EA.Connector>(); // Ищем на диаграмме другие линки такого же типа foreach (EA.DiagramLink curDL in CurrentDiagram.DiagramLinks) { EA.Connector curConnector = EARepository.GetConnectorByID(curDL.ConnectorID); if (!curDL.IsHidden && curConnector.Type == selectedConnector.Type) { connectorList.Add(curConnector); } } // Конструируем данные тэгов для формы List <TagData> curTagDataList = new List <TagData>(); foreach (EA.Connector connector in connectorList) { foreach (EA.ConnectorTag taggedValue in selectedConnector.TaggedValues) { string tagName = taggedValue.Name; TagData curTagData; curTagData = curTagDataList.FirstOrDefault(item => (item.TagName == tagName)); if (curTagData == null) { curTagData = new TagData() { TagName = tagName, TagValue = taggedValue.Value }; curTagDataList.Add(curTagData); } curTagData.TagState = true; curTagData.Ex = false; curTagData.Count++; } } // Открываем форму для установки Tags ExecResult <List <TagData> > setTagsResult = new FSetTags().Execute(curTagDataList); if (setTagsResult.code != 0) { return(result); } // Прописываем в элементах что наустанавливали на форме foreach (EA.Connector connector in connectorList) { foreach (TagData curTagData in setTagsResult.value) { if (curTagData.Enabled) // записываем только для Tags, в котоорые разрешено { if (curTagData.TagState == false) { EATVHelper.TaggedValueRemove(connector, curTagData.TagName); } else { EATVHelper.TaggedValueSet(connector, curTagData.TagName, curTagData.TagValue); } } } } } catch (Exception ex) { result.setException(ex); } return(result); }
public ExecResult <Boolean> CreateLink() { ExecResult <Boolean> result = new ExecResult <bool>(); Logger.Out(""); try { if (!Context.CheckCurrentDiagram()) { throw new Exception("Не установлена или не открыта текущая диаграмма"); } // На диаграмме должны быть выделены 2 (библиотечных) элемента var selectedObjects = CurrentDiagram.SelectedObjects; if (selectedObjects.Count != 2) { throw new Exception("Должно быть выделено 2 элемента"); } EA.DiagramObject firstDA = selectedObjects.GetAt(0); EA.Element firstElement = EARepository.GetElementByID(firstDA.ElementID); EA.DiagramObject secondDA = selectedObjects.GetAt(1); EA.Element secondElement = EARepository.GetElementByID(secondDA.ElementID); if (!LibraryHelper.IsLibrary(firstElement) || !LibraryHelper.IsLibrary(secondElement)) { throw new Exception("Должны быть выделены библиотечные элементы"); } Logger.Out("Выделенные элементы: ", new EA.Element[] { firstElement, secondElement }); // запускаем форму ExecResult <ConnectorData> createNewLinkData = FCreateNewLink.Execute(firstDA, secondDA); if (createNewLinkData.code != 0) { return(result); } // надо проверить, нет ли уже такого линка между элементами foreach (EA.Connector connector in firstElement.Connectors) { if (connector.ClientID == secondElement.ElementID || connector.SupplierID == secondElement.ElementID) { if (LibraryHelper.IsLibrary(connector)) { LinkType connectorLinkType = LTHelper.GetConnectorType(connector); if (createNewLinkData.value.LinkType == connectorLinkType) { if (EATVHelper.GetTaggedValue(connector, DAConst.DP_FlowIDTag) == createNewLinkData.value.FlowID && EATVHelper.GetTaggedValue(connector, DAConst.DP_SegmentIDTag) == createNewLinkData.value.SegmentID) { throw new Exception("Запрашиваемая связь уже существует"); } } } } } // Создаём EA.Connector newConnector = ConnectorHelper.CreateConnector(createNewLinkData.value, true); CurrentDiagram.DiagramLinks.Refresh(); EARepository.ReloadDiagram(CurrentDiagram.DiagramID); Logger.Out("Создан ", new EA.Connector[] { newConnector }); } catch (Exception ex) { result.setException(ex); } return(result); }
/* * /// <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); }
private void OutExecResult <T>(ExecResult <T> result) { Context.EARepository.WriteOutput("System", "result code=" + result.code + " " + result.message, 0); }