/// <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> /// <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> PutChildrenDHierarchyOnElement() { ExecResult <Boolean> result = new ExecResult <bool>(); ElementDesignerHelper.CallLevel = 0; try { ExecResult <List <ComponentLevel> > displayLevelsResult = FSelectComponentLevels.Execute(); if (displayLevelsResult.code != 0) { return(result); } // Получаем текущий (библиотечный) элемент дерева if (Context.CurrentDiagram.SelectedObjects.Count == 0 || !LibraryHelper.IsLibrary(Context.EARepository.GetElementByID(((EA.DiagramObject)Context.CurrentDiagram.SelectedObjects.GetAt(0)).ElementID))) { throw new Exception("Не выделен библиотечный элемент на диаграмме"); } EA.Element curElement = Context.EARepository.GetElementByID(((EA.DiagramObject)Context.CurrentDiagram.SelectedObjects.GetAt(0)).ElementID); // Получаем список дочерних элементов контейнеров List <EA.Element> сhildrenDHierarchy = LibraryHelper.GetChildHierarchy(curElement); // Проходимся по иерархии и размещаем элементы на диаграмме for (int i = 0; i < сhildrenDHierarchy.Count; i++) { // Размещаем элемент EA.DiagramObject diagramObject = Context.Designer.PutElementOnDiagram(сhildrenDHierarchy[i]); diagramObject.Update(); } Context.CurrentDiagram.DiagramLinks.Refresh(); Context.LinkDesigner.SetLinkTypeVisibility(LinkType.Deploy, false); Context.EARepository.ReloadDiagram(Context.CurrentDiagram.DiagramID); } 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); }