Esempio n. 1
0
        /// <summary>
        /// Фунция возвращает DA, в который непосредственно вставлен указанный DA
        /// Вставленные это:
        /// - С границами внутри указанного
        /// - С Z-Order "выше" указанного
        /// - Которые не могут быть названными вставленными другими da с Z-Order "выше" указанного
        ///
        /// </summary>
        /// <param name="da"></param>
        /// <returns></returns>
        public static EA.DiagramObject GetContainerOfDA(EA.DiagramObject da)
        {
            EA.DiagramObject result = null;

            // Сначала проходимся по элементам диаграммы и смотрим кто укладывается в рамки и Z-order

            foreach (EA.DiagramObject curDA in Context.Designer.CurrentDiagram.DiagramObjects)
            {
                if (curDA.ElementID == da.ElementID)
                {
                    continue;
                }

                if (ElementDesignerHelper.DAFitInside(da, curDA) && da.Sequence < curDA.Sequence)
                {
                    if (result == null)
                    {
                        result = curDA;
                    }
                    else
                    {
                        if (result.Sequence < curDA.Sequence) // если уже кого то отобрали, то новый становится "папой" только если у него больше Zorder
                        {
                            result = curDA;
                        }
                    }
                }
            }


            return(result);
        }
Esempio n. 2
0
        /// <summary>
        /// Функция возвращает размер элемента, соответствующий размеру элемента на библиотечной диаграмме
        /// </summary>
        /// <returns></returns>
        public static ExecResult <Size> GetElementSizeOnLibDiagram(EA.Element element)
        {
            ExecResult <Size> result = new ExecResult <Size>()
            {
                code = -1
            };

            try
            {
                // лезем от элемента вверх по дереву пакетов, пока не достигнем верха либо не достигнем пакета без тэга DP_Library после нахождения такого тэга
                EA.Package curPackage = EARepository.GetPackageByID(element.PackageID);
                bool       foundPackageAfterDPLibrary = false;
                bool       foundDPLibraryPackage      = false;

                while (curPackage != null & !(foundPackageAfterDPLibrary))
                {
                    // Проходимся по диаграммам пакета
                    foreach (EA.Diagram curDiagram in curPackage.Diagrams)
                    {
                        // ... В в диаграмме - по объектам
                        foreach (EA.DiagramObject diagramObject in curDiagram.DiagramObjects)
                        {
                            // если объект на диаграмме - наш объект, то срисовываем его размеры как дефолтные
                            if (diagramObject.ElementID == element.ElementID)
                            {
                                Size curSize = ElementDesignerHelper.GetSize(diagramObject);
                                result.value = curSize;
                                result.code  = 0;
                                return(result);
                            }
                        }

                        if (curPackage.ParentID != 0)
                        {
                            curPackage = EARepository.GetPackageByID(curPackage.ParentID);
                        }
                        else
                        {
                            curPackage = null;
                        }
                        if (LibraryHelper.IsLibrary(curPackage.Element))
                        {
                            foundDPLibraryPackage = true;
                        }
                        if (!LibraryHelper.IsLibrary(curPackage.Element) && foundDPLibraryPackage)
                        {
                            foundPackageAfterDPLibrary = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
Esempio n. 3
0
        /// <summary>
        /// Функция передвигает DA по указанному вектору (т.е. смещает на размеры точки)
        /// </summary>
        /// <param name="diagramObject"></param>
        /// <param name="newStart"></param>
        /// <param name="doUpdate"></param>
        public static void ApplyVectorToDA(EA.DiagramObject diagramObject, Point vector, bool doUpdate = true)
        {
            Size diagramObjectSize = ElementDesignerHelper.GetSize(diagramObject);

            diagramObject.left   += vector.X;
            diagramObject.right  += vector.X;
            diagramObject.top    += vector.Y;
            diagramObject.bottom += vector.Y;
            if (doUpdate)
            {
                diagramObject.Update();
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Функция передвигает DA в указанную точку
        /// </summary>
        /// <param name="diagramObject"></param>
        /// <param name="newStart"></param>
        /// <param name="doUpdate"></param>
        public static void ApplyPointToDA(EA.DiagramObject diagramObject, Point newStart, bool doUpdate = true)
        {
            Size diagramObjectSize = ElementDesignerHelper.GetSize(diagramObject);

            diagramObject.left   = newStart.X;
            diagramObject.right  = diagramObject.left + diagramObjectSize.Width;
            diagramObject.top    = newStart.Y;
            diagramObject.bottom = diagramObject.top - diagramObjectSize.Height;
            if (doUpdate)
            {
                diagramObject.Update();
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Фунция возвращает список непосредственных вставленных DA для указанного
        /// Вставленные это:
        /// - С границами внутри указанного
        /// - С Z-Order "выше" указанного
        /// - Которые не могут быть названными вставленными другими da с Z-Order "выше" указанного
        ///
        /// </summary>
        /// <param name="da"></param>
        /// <returns></returns>
        public static List <EA.DiagramObject> GetContainedForDA(EA.DiagramObject da)
        {
            List <EA.DiagramObject> result = new List <EA.DiagramObject>();

            // Сначала проходимся по элементам диаграммы и смотрим кто укладывается в рамки и Z-order
            foreach (EA.DiagramObject curDA in Context.Designer.CurrentDiagram.DiagramObjects)
            {
                if (curDA.ElementID == da.ElementID)
                {
                    continue;
                }
                // если такой элемент есть, проходимся по элементам даграммы ещё раз и смотрим,
                // не может ли он принадлежать ещё кому-то с меньшим Z-order
                if (ElementDesignerHelper.DAFitInside(curDA, da) && da.Sequence > curDA.Sequence)
                {
                    bool hasAnotherParent = false;

                    foreach (EA.DiagramObject curDA1 in Context.Designer.CurrentDiagram.DiagramObjects)
                    {
                        if (curDA1.ElementID == da.ElementID)
                        {
                            continue;
                        }
                        if (ElementDesignerHelper.DAFitInside(curDA, curDA1) && curDA1.Sequence < da.Sequence)
                        {
                            hasAnotherParent = true;
                            break;
                        }
                    }
                    if (!hasAnotherParent)
                    {
                        result.Add(curDA);
                    }
                }
                else
                {
                    //EAHelper.Out("Не Укладывается в рамки и Zorder: ", new EA.DiagramObject[] { curDA });
                }
            }


            return(result);
        }
Esempio n. 6
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);
        }