/// <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> * 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); }
/// <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 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); }