Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        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);
        }