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