Ejemplo n.º 1
0
        /// <summary>
        /// Функция добавляет или замещает элемент на диаграмме, если указано - внутри указанного элемента
        /// </summary>
        /// <param name="element"></param>
        /// <param name="parentElement"></param>
        public EA.DiagramObject PutElementOnDiagram(EA.Element element)
        {
            ElementDesignerHelper.CallLevel++;
            EA.DiagramObject elementDA;

            try
            {
                Logger.Out(element.Name);
                Logger.Out("размещаем элемент ", new EA.Element[] { element });

                var diagramObjects = CurrentDiagram.DiagramObjects;

                elementDA = CurrentDiagram.GetDiagramObjectByID(element.ElementID, ""); // Получаем элемент на диаграмме
                if (elementDA == null)                                                  // если элемента нет - создаём
                {
                    Logger.Out("элемента нет на диаграмме, создаём ");


                    elementDA           = CurrentDiagram.DiagramObjects.AddNew("", "");
                    elementDA.ElementID = element.ElementID;

                    // устанавливаем размер объекта
                    Size elementSize = ElementDesignerHelper.GetDefaultDASize(elementDA);
                    EADOHelper.ApplySizeToDA(elementDA, elementSize, false);
                    int elementID = elementDA.ElementID;

                    Point newDAPoint = ElementDesignerHelper.GetFirstFreePoinForDA(elementDA);
                    EADOHelper.ApplyPointToDA(elementDA, newDAPoint, false);

                    elementDA.Update();
                    CurrentDiagram.Update();
                    CurrentDiagram.DiagramObjects.Refresh();

                    Logger.Out(element.Name + ":создан элемент ", new EA.DiagramObject[] { elementDA });
                }
                else
                {
                    Logger.Out("элемент уже на диаграмме", new EA.DiagramObject[] { elementDA });
                }

                // Подгоняем ZOrder
                //SetElementZorder(elementDA);

                /*
                 * // Проверяем наличие на диаграмме (непосредственных) элементов дочерней иерархии
                 * // Еесли есть такие - вписываем их в текущий элемент
                 * List<EA.DiagramObject> childDAList = EAHelper.GetNearestChildrenDA(element);
                 * Logger.Out("получен список присутсвующих на диагр. дочерних ", childDAList.ToArray());
                 * foreach (var childDA in childDAList)
                 * {
                 *  FitElementInElement(childDA, elementDA);
                 * }
                 *
                 *
                 * // Проверяем наличие на диаграмме элемента родительской иерархии
                 * // При наличии вписываем элемент в него
                 * List<EA.DiagramObject> parentDAList = EAHelper.GetDeployParentHierarchyDA(element);
                 * Logger.Out("получен список родительской иерархии на диаграмме", parentDAList.ToArray());
                 * if (parentDAList.Count > 0)
                 * {
                 *  var nearestParentDA = parentDAList[0];
                 *  FitElementInElement(elementDA, nearestParentDA);
                 * }
                 */
            }
            finally
            {
                ElementDesignerHelper.CallLevel--;
            }

            return(elementDA);
        }
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);
        }