Exemplo n.º 1
0
 private EA.DiagramObject copyDiagramObject(int leftMax, int topMax, EA.Diagram newDiagram, EA.DiagramObject oldDiagramObject, EA.Element element, int sequence)
 {
     EA.DiagramObject newDiaObj2 = (EA.DiagramObject)newDiagram.DiagramObjects.AddNew(
         "l=" + (oldDiagramObject.left - leftMax) +
         ";r=" + (oldDiagramObject.right - leftMax) +
         ";t=" + (oldDiagramObject.top - topMax) +
         ";b=" + (oldDiagramObject.bottom - topMax), element.Type);
     newDiaObj2.Sequence  = sequence;
     newDiaObj2.ElementID = element.ElementID;
     newDiaObj2.Update();
     return(newDiaObj2);
 }
Exemplo n.º 2
0
        /// <summary>
        /// Функция ищет оптимальное место для размещения внутри родительского контейнера
        /// </summary>
        /// <param name="parentDA"></param>
        /// <param name="childDA"></param>
        /// <param name="childDAList">список других элементов внутри родительского, чтобы не наступить на один из них</param>
        /// <returns></returns>
        public static ExecResult <Point> GetPointForChild(EA.DiagramObject parentDA, EA.DiagramObject childDA, List <EA.DiagramObject> childDAList)
        {
            ExecResult <Point> result = new ExecResult <Point>()
            {
                code = -1
            };

            // Сначала просто пытаемся поместить childDA возле левого верхнего угла
            Rectangle requiredRectangle   = new Rectangle(parentDA.left + DAConst.border, parentDA.top - 2 * DAConst.border, childDA.right - childDA.left, childDA.top - childDA.bottom);
            bool      intersectsWithOther = false;

            if (Contain(parentDA, requiredRectangle))
            {
                foreach (var otherChildDA in childDAList)
                {
                    if (otherChildDA.ElementID == childDA.ElementID)
                    {
                        continue;
                    }
                    if (Intersects(otherChildDA, requiredRectangle))
                    {
                        intersectsWithOther = true;
                        break;
                    }
                }
                if (!intersectsWithOther)
                {
                    result.value = new Point(requiredRectangle.X, requiredRectangle.Y);
                    result.code  = 0;
                    return(result);
                }
            }

            // если мы здесь, значит тупо вписаться не удалось, начинаем шарить вокруг вписанных в родительский элементов, пытаясь найти место
            foreach (var otherChildDA in childDAList)
            {
                if (otherChildDA.ElementID == childDA.ElementID)
                {
                    continue;
                }

                Point point = FindSpaceAround(childDA, otherChildDA, parentDA, childDAList);
                if (!point.IsEmpty)
                {
                    result.value = point;
                    result.code  = 0;
                    break;
                }
            }

            return(result);
        }
Exemplo n.º 3
0
        public static void VisualizePortForDiagramobject(int pos, EA.Diagram dia, EA.DiagramObject diaObjSource, EA.Element port, EA.Element interf)
        {
            // check if port already exists
            foreach (EA.DiagramObject diaObj in dia.DiagramObjects)
            {
                if (diaObj.ElementID == port.ElementID)
                {
                    return;
                }
            }

            // visualize ports
            int length = 6;
            // calculate target position
            int left  = diaObjSource.right - length / 2;
            int right = left + length;
            int top   = diaObjSource.top;

            top = top - 10 - pos * 10;
            int    bottom    = top - length;
            string position  = "l=" + left + ";r=" + right + ";t=" + top + ";b=" + bottom + ";";
            var    diaObject = (EA.DiagramObject)dia.DiagramObjects.AddNew(position, "");

            dia.Update();
            if (port.Type.Equals("Port"))
            {
                // not showing label
                diaObject.Style = "LBL=CX=97:CY=13:OX=0:OY=0:HDN=1:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:ALT=0:ROT=0;";
            }
            else
            {
                // not showing label
                diaObject.Style = "LBL=CX=97:CY=13:OX=39:OY=3:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:ALT=0:ROT=0;";
            }
            diaObject.ElementID = port.ElementID;


            diaObject.Update();

            if (interf == null)
            {
                return;
            }

            // visualize interface
            var diaObject2 = (EA.DiagramObject)dia.DiagramObjects.AddNew(position, "");

            dia.Update();
            diaObject.Style      = "LBL=CX=69:CY=13:OX=-69:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:ALT=0:ROT=0;";
            diaObject2.ElementID = interf.ElementID;
            diaObject2.Update();
        }
Exemplo n.º 4
0
        public static EA.Element createAnchorElementIfNecessary(EA.Repository repository, EA.Diagram openedDiagram, Boolean reloadDiagramAfter)
        {
            //checks if the current SDM Diagram already contains an Anchor element.
            //String sqlResult = repository.SQLQuery(@"SELECT Count(*) as Count FROM t_object WHERE ParentID = " + openedDiagram.ParentID +
            //                                       " AND Stereotype = '" + SDMModelingMain.SDMAnchorStereotype + "'");

            String sqlResult = repository.SQLQuery(@"select Count(*) as Count from t_diagramobjects d, t_object o where d.Object_ID = o.Object_ID 
                                                    and o.Stereotype = '" + SDMModelingMain.SDMAnchorStereotype + "' and d.Diagram_ID = " + openedDiagram.DiagramID);
            String count     = EAUtil.getXMLNodeContentFromSQLQueryString(sqlResult, "Count")[0];

            if (count == "0")
            {
                Boolean locked = false;

                EA.Element newAnchorElement = null;

                if (openedDiagram.ParentID != 0)
                {
                    EA.Element parentElement = repository.GetElementByID(openedDiagram.ParentID);
                    locked           = parentElement.Locked;
                    newAnchorElement = parentElement.Elements.AddNew("", Main.EAClassType) as EA.Element;
                }
                else
                {
                    EA.Package parentPackage = repository.GetPackageByID(openedDiagram.PackageID);
                    locked           = parentPackage.Element.Locked;
                    newAnchorElement = parentPackage.Elements.AddNew("", Main.EAClassType) as EA.Element;
                }

                if (!locked)
                {
                    newAnchorElement.Stereotype = SDMModelingMain.SDMAnchorStereotype;
                    newAnchorElement.Update();

                    EA.DiagramObject newAnchorDiagramObject = openedDiagram.DiagramObjects.AddNew("", newAnchorElement.Type) as EA.DiagramObject;
                    newAnchorDiagramObject.left      = 5;
                    newAnchorDiagramObject.top       = -5;
                    newAnchorDiagramObject.right     = 25;
                    newAnchorDiagramObject.bottom    = -25;
                    newAnchorDiagramObject.ElementID = newAnchorElement.ElementID;

                    newAnchorDiagramObject.Update();

                    if (reloadDiagramAfter)
                    {
                        repository.ReloadDiagram(openedDiagram.DiagramID);
                    }
                    return(newAnchorElement);
                }
            }
            return(null);
        }
Exemplo n.º 5
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();
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Подвигает DA и вписанные в него DA на указанный вектор
        /// </summary>
        /// <param name="diagramObject"></param>
        /// <param name="vector"></param>
        public static void MoveContainedHierarchy(EA.DiagramObject diagramObject, Point vector)
        {
            // Сначала получаем и подывигаем детей
            List <EA.DiagramObject> containedDAList = EADOHelper.GetContainedForDA(diagramObject);

            foreach (var curContainedDA in containedDAList)
            {
                MoveContainedHierarchy(curContainedDA, vector);
            }

            // потом сам объект
            EADOHelper.ApplyVectorToDA(diagramObject, vector);
        }
Exemplo n.º 7
0
 private void copyDiagramObjects(int leftMax, int topMax, EA.Diagram newSdmDiagram, EA.Element selectedElement)
 {
     //copy storypattern diagramObjects
     foreach (EA.Element ov in selectedElement.Elements)
     {
         EA.DiagramObject oldOVDiagramObject = getDiagramObject(ov.ElementID);
         if (oldOVDiagramObject != null)
         {
             copyDiagramObject(leftMax, topMax, newSdmDiagram, oldOVDiagramObject, ov, 1);
             EAUtil.deleteDiagramObject(repository, oldSDMDiagram, ov);
         }
     }
 }
Exemplo n.º 8
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();
            }
        }
 public override void doRuleQuickFix(SQLElement eaElement, SQLRepository repository, int i, String errorMessage)
 {
     if (i == 0)
     {
         EAUtil.deleteElement(eaElement.getRealElement(), repository);
     }
     else if (i == 1)
     {
         EA.Diagram possibleDiagram = null;
         SQLElement parent          = eaElement;
         SQLPackage parentPackage   = null;
         while (possibleDiagram == null)
         {
             if (parent.ParentID != 0)
             {
                 parent = repository.GetElementByID(parent.ParentID);
                 if (parent.Diagrams.Count > 0)
                 {
                     possibleDiagram = parent.Diagrams.GetAt(0) as EA.Diagram;
                 }
             }
             else
             {
                 if (parentPackage == null)
                 {
                     parentPackage = repository.GetPackageByID(parent.PackageID);
                 }
                 else
                 {
                     parentPackage = repository.GetPackageByID(parentPackage.ParentID);
                 }
                 if (parentPackage.Diagrams.Count > 0)
                 {
                     possibleDiagram = parentPackage.Diagrams.GetAt(0) as EA.Diagram;
                 }
             }
         }
         possibleDiagram = EAUtil.sqlEAObjectToOriginalObject(repository, possibleDiagram) as EA.Diagram;
         EA.DiagramObject diagObject = possibleDiagram.DiagramObjects.AddNew("", eaElement.Type) as EA.DiagramObject;
         diagObject.left      = 20;
         diagObject.right     = 120;
         diagObject.top       = -20;
         diagObject.bottom    = -70;
         diagObject.ElementID = eaElement.ElementID;
         diagObject.Update();
         repository.OpenDiagram(possibleDiagram.DiagramID);
         EAUtil.clearSelectedDiagramObjects(repository);
         possibleDiagram.SelectedObjects.AddNew(diagObject.ElementID.ToString(), "");
         repository.ReloadDiagram(possibleDiagram.DiagramID);
     }
 }
Exemplo n.º 10
0
        /// <summary>
        /// creates an empty story diagram related to the given Method
        /// </summary>
        /// <param name="method"></param>
        /// <param name="repository"></param>
        /// <param name="currentDiagram"></param> The currently open diagram. An anchor will be added to this diagram.
        public static void createStoryDiagram(SQLMethod method, EA.Repository repository, EA.Diagram currentDiagram)
        {
            EA.Element    containingEClass = repository.GetElementByID(method.ParentID);
            SQLRepository sqlRepository    = new SQLRepository(repository, false);

            EA.Element sdmContainer = (EA.Element)(containingEClass.Elements.AddNew(method.Name, Main.EAClassType));
            sdmContainer.ParentID = containingEClass.ElementID;



            EA.Diagram sdmDiagram = (EA.Diagram)(sdmContainer.Diagrams.AddNew(method.Name + " Story Diagram", SdmDiagramMetatype[0]));
            sdmDiagram.ParentID      = sdmContainer.ElementID;
            sdmDiagram.ExtendedStyle = "HideRel=0;ShowTags=0;ShowReqs=0;ShowCons=0;OpParams=1;ShowSN=0;ScalePI=0;PPgs.cx=1;PPgs.cy=1;PSize=9;ShowIcons=1;SuppCN=0;HideProps=0;HideParents=0;UseAlias=0;HideAtts=0;HideOps=0;HideStereo=0;HideEStereo=1;FormName=;";
            sdmDiagram.StyleEx       = sdmDiagram.StyleEx + "HideConnStereotype=0;";
            repository.SaveDiagram(sdmDiagram.DiagramID);
            sdmDiagram.Update();
            EA.Element startNode = (EA.Element)sdmContainer.Elements.AddNew(" Start", Main.EAStateNodeType);
            startNode.Subtype  = Main.EAStartNodeSubtype;
            startNode.ParentID = sdmContainer.ElementID;

            startNode.Name = SDMUtil.computeStartNodeName(sqlRepository.GetMethodByID(method.MethodID), sqlRepository.GetElementByID(containingEClass.ElementID));

            startNode.Update();
            EA.DiagramObject startNodeDiagramObject = (EA.DiagramObject)sdmDiagram.DiagramObjects.AddNew("l=50;r=70;t=50;b=70;", Main.EAStateNodeType);
            startNodeDiagramObject.ElementID = startNode.ElementID;
            startNodeDiagramObject.Update();


            method.getRealMethod().Update();
            sdmContainer.Update();

            Navigator.addAnchorEntry(sdmDiagram.DiagramID, currentDiagram.DiagramID);

            String objectStyleString = "StateNodeLBL=CX=437:CY=13:OX=-9:OY=-18:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:ALT=0:ROT=0;DUID=2B547EF9;LBL=CX=437:CY=13:OX=-6:OY=-17:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:ALT=0:ROT=0;";

            repository.Execute("UPDATE t_diagramobjects SET ObjectStyle = '" + objectStyleString + "' WHERE Object_ID = " + startNodeDiagramObject.ElementID);

            repository.OpenDiagram(sdmDiagram.DiagramID);

            sdmContainer.Elements.Refresh();

            setAnchorElementTags(sqlRepository, currentDiagram, sqlRepository.GetElementByID(sdmContainer.ElementID));
            Activity activity = new Activity(sqlRepository.GetElementByID(sdmContainer.ElementID), sqlRepository);

            activity.OwningOperation = new ECOREModeling.ECOREExportWrapper.EOperation(sqlRepository.GetMethodByID(method.MethodID), sqlRepository);
            activity.saveTreeToEATaggedValue(true);

            StartNode startNodeObject = new StartNode(sqlRepository, sqlRepository.GetElementByID(startNode.ElementID));

            startNodeObject.saveTreeToEATaggedValue(true);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Устанавливает Zorder для нового элемента
        /// </summary>
        private void SetElementZorder(EA.DiagramObject diagramObject)
        {
            /*
             * План такой:
             * - на входе считаем, что ZOrder у всех нормальный кроме устанавливаемого
             *
             * - есть дерево дочерних (deploy) - обрабатываемый элемент  надо положить "под них"
             * - есть прочие элементы, ZOrder которых был больше (ниже) дочерних выше - их всех надо "притопить" на единичку, т.к. под дочерними вставлен обрабатываемый
             * - все остальные не трогаем
             *
             */

            EA.Element element = EARepository.GetElementByID(diagramObject.ElementID);

            // Получаем список родителей на диаграммме
            //List<EA.DiagramObject> parentDAList = EAHelper.GetDeployParentHierarchyDA(element);

            // Получаем список детей на диаграмме
            List <EA.DiagramObject> childrenDAList = LibraryHelper.GetDeployChildrenHierarchyDA(element);

            // наличие на диаграмме элементов дочерней иерархии, если есть такие - подкладываем элемент под них
            int elementZOrder = 0;

            foreach (var childDA in childrenDAList)
            {
                if (childDA.Sequence >= elementZOrder)
                {
                    elementZOrder = childDA.Sequence + 1;
                }
            }

            foreach (EA.DiagramObject curDA in CurrentDiagram.DiagramObjects)
            {
                if (curDA.ElementID == diagramObject.ElementID)
                {
                    diagramObject.Sequence = elementZOrder;
                    diagramObject.Update();
                }
                else if (curDA.Sequence >= elementZOrder)
                {
                    curDA.Sequence = curDA.Sequence + 1;
                    curDA.Update();
                }
            }

            foreach (EA.DiagramObject curDA in CurrentDiagram.DiagramObjects)
            {
                Logger.Out("Zorder=" + curDA.Sequence, new EA.DiagramObject[] { curDA });
            }
        }
Exemplo n.º 12
0
        private static bool CreateDefaultElementsForActivity(EA.Repository rep, EA.Diagram dia, EA.Element act)
        {
            // check if init and final node are available
            bool init  = false;
            bool final = false;

            foreach (EA.Element node in act.Elements)
            {
                if (node.Type == "StateNode" & node.Subtype == 100)
                {
                    init = true;
                }
                if (node.Type == "StateNode" & node.Subtype == 101)
                {
                    final = true;
                }
            }
            if (!init)
            {
                EA.Element initNode = (EA.Element)act.Elements.AddNew("", "StateNode");
                initNode.Subtype = 100;
                initNode.Update();
                if (dia != null)
                {
                    EA.DiagramObject initDiaNode = (EA.DiagramObject)dia.DiagramObjects.AddNew("l=295;r=315;t=125;b=135;", "");
                    initDiaNode.ElementID = initNode.ElementID;
                    initDiaNode.Update();
                }
            }
            if (!final)
            {
                EA.Element finalNode = (EA.Element)act.Elements.AddNew("", "StateNode");
                finalNode.Subtype = 101;
                finalNode.Update();
                if (dia != null)
                {
                    EA.DiagramObject finalDiaNode = (EA.DiagramObject)dia.DiagramObjects.AddNew("l=285;r=305;t=745;b=765;", "");
                    finalDiaNode.ElementID = finalNode.ElementID;
                    finalDiaNode.Update();
                }
            }
            act.Elements.Refresh();
            dia.DiagramObjects.Refresh();
            dia.Update();
            rep.ReloadDiagram(dia.DiagramID);

            return(true);
        }
Exemplo n.º 13
0
        private void addConstraintCopyToRule(EA.Element elementToBeCopied, EA.DiagramObject diagramObjectToBeCopied)
        {
            EA.Element newConstraint = newRuleElement.EmbeddedElements.AddNew(elementToBeCopied.Name, "Note") as EA.Element;
            newConstraint.Type  = "Constraint";
            newConstraint.Notes = elementToBeCopied.Notes;
            newConstraint.Update();


            EA.DiagramObject newDiagramObject = newRuleDiagram.DiagramObjects.AddNew("", newConstraint.Type) as EA.DiagramObject;
            newDiagramObject.ElementID = newConstraint.ElementID;
            newDiagramObject.left      = diagramObjectToBeCopied.left;
            newDiagramObject.right     = diagramObjectToBeCopied.right;
            newDiagramObject.top       = diagramObjectToBeCopied.top;
            newDiagramObject.bottom    = diagramObjectToBeCopied.bottom;
            newDiagramObject.Update();
        }
Exemplo n.º 14
0
        private int AddUCToUCDiagram(EA.Package eaPackage, EA.Diagram diagram, int iUCElementID, int iUCClassElementID, int iVertPos)
        {
            int iTopOffset         = 10;
            int iHeightOneStep     = 200;
            int iSpaceBetweenSteps = 20;

            int iL = 300;
            int iR = 400;
            int iT = iTopOffset + (iHeightOneStep * iVertPos) + iSpaceBetweenSteps;
            int iB = iTopOffset + (iHeightOneStep * (iVertPos + 1));

            string strPos = "l=" + iL.ToString() + ";r=" + iR.ToString() + ";t=" + iT.ToString() + ";b=" + iB.ToString() + ";";

            EA.DiagramObject diagramObj = diagram.DiagramObjects.AddNew(strPos, "");
            if (diagramObj == null)
            {
                //EAImporter.LogError(EAImporter.LogErrorLevel.A, strLogInfo);
                return(1);
            }

            diagramObj.ElementID = iUCElementID;
            diagramObj.Update();

            iL = 700;
            iR = 800;
            iT = iTopOffset + (iHeightOneStep * iVertPos) + iSpaceBetweenSteps;
            iB = iTopOffset + (iHeightOneStep * (iVertPos + 1));

            strPos = "l=" + iL.ToString() + ";r=" + iR.ToString() + ";t=" + iT.ToString() + ";b=" + iB.ToString() + ";";

            EA.DiagramObject diagramObj2 = diagram.DiagramObjects.AddNew(strPos, "");
            if (diagramObj2 == null)
            {
                //EAImporter.LogError(EAImporter.LogErrorLevel.A, strLogInfo);
                return(1);
            }

            diagramObj2.ElementID = iUCClassElementID;
            diagramObj2.Update();


            diagram.DiagramObjects.Refresh();
            eaPackage.Diagrams.Refresh();
            diagram.Update();

            return(0);
        }
Exemplo n.º 15
0
        private static void createSDMActivityNodeDiagramObject(EA.Repository repository, EA.Diagram diagram, int i, int j, EA.Element node, List <Point> usedPoints, List <int> handledElementIds)
        {
            if (node.MetaType == SDMModelingMain.ActivityNodeMetatype)
            {
                Point currentPoint = new Point(i, j);
                int   width        = StoryNode.DefaultWidth;
                int   height       = StoryNode.DefaultHeight;

                if (node.Stereotype == SDMModelingMain.StopNodeStereotype || node.Stereotype == SDMModelingMain.StartNodeStereotype)
                {
                    width  = StopNode.DefaultWidth;
                    height = StopNode.DefaultHeight;
                }



                while (usedPoints.Contains(currentPoint))
                {
                    currentPoint.Y = currentPoint.Y + 1;
                }

                EA.DiagramObject dObj = diagram.DiagramObjects.AddNew("", "") as EA.DiagramObject;
                dObj.ElementID = node.ElementID;
                dObj.left      = currentPoint.X * 200 + (100 - width / 2);
                dObj.right     = dObj.left + width;
                dObj.top       = currentPoint.Y * -200 + (-100 + height / 2);
                dObj.bottom    = dObj.top - height;
                dObj.Update();

                String aa = " l = " + dObj.left + " r  =" + dObj.right + " t = " + dObj.top + " b = " + dObj.bottom;

                handledElementIds.Add(node.ElementID);
                usedPoints.Add(currentPoint);

                foreach (EA.Connector con in node.Connectors)
                {
                    if (con.SupplierID != node.ElementID && !handledElementIds.Contains(con.SupplierID))
                    {
                        EA.Element target = repository.GetElementByID(con.SupplierID);
                        createSDMActivityNodeDiagramObject(repository, diagram, currentPoint.X + 1, currentPoint.Y, target, usedPoints, handledElementIds);
                        currentPoint.Y = currentPoint.Y + 1;
                        currentPoint.X = currentPoint.X - 1;
                    }
                }
            }
        }
Exemplo n.º 16
0
        private void appendNewMethodAndSdm()
        {
            repository.SaveDiagram(oldSDMDiagram.DiagramID);


            EA.Element eClass = getContainingClass();
            this.newMethod = eClass.Methods.AddNew(textBoxNewSDM.Text, "void") as EA.Method;
            newMethod.Update();

            SDMModelingMain.createStoryDiagram(sqlRepository.GetMethodByID(newMethod.MethodID), sqlRepository.GetOriginalRepository(), oldSDMDiagram);
            newSdmContainer = sqlRepository.GetOriginalRepository().GetElementByID(sqlRepository.GetCurrentDiagram().ParentID);
            EA.Diagram newSdmDiagram = newSdmContainer.Diagrams.GetAt(0) as EA.Diagram;
            EA.Element newStartNode  = findNewStartNode(newSdmContainer);
            createExtractedSDMStatementNode();

            int leftMax = 10000000;
            int topMax  = -100000;

            computeLeftAndTopMin(ref leftMax, ref topMax);

            //copy elements
            foreach (EA.Element selectedElement in this.selectedActivityNodes)
            {
                selectedElement.ParentID = newSdmContainer.ElementID;
                EA.DiagramObject newPatternDiagramObject = null;
                copyDiagramObjects(leftMax - 100, topMax + 100, newSdmDiagram, selectedElement);
                EA.DiagramObject selectedDiagramObject = getDiagramObject(selectedElement.ElementID);
                if (selectedDiagramObject != null)
                {
                    newPatternDiagramObject = copyDiagramObject(leftMax - 100, topMax + 100, newSdmDiagram, selectedDiagramObject, selectedElement, 2);
                    EAUtil.deleteDiagramObject(repository, oldSDMDiagram, selectedElement);
                }

                //deleteUnselectedConnectors(selectedElement);
                selectedElement.Update();

                arrangeUnselectedConnectors(newSdmContainer, newSdmDiagram, newStartNode, selectedElement, newPatternDiagramObject.bottom, newPatternDiagramObject.left);
            }



            repository.ReloadDiagram(newSdmDiagram.DiagramID);
            repository.ReloadDiagram(oldSDMDiagram.DiagramID);
            repository.OpenDiagram(oldSDMDiagram.DiagramID);
        }
Exemplo n.º 17
0
        private void createCorrespondenceDiagramObject(EA.Diagram currentDiagram, EA.Repository Repository, EA.Element clientOv, EA.Element supplierOv, EA.Element tggCorrespondenceObject)
        {
            //create a new diagram object
            Repository.SaveDiagram(currentDiagram.DiagramID);
            EA.DiagramObject sourceDiagObj = null;
            EA.DiagramObject targetDiagObj = null;

            currentDiagram.DiagramObjects.Refresh();
            foreach (EA.DiagramObject diagObj in currentDiagram.DiagramObjects)
            {
                if (diagObj.ElementID == clientOv.ElementID)
                {
                    sourceDiagObj = diagObj;
                }
                else if (diagObj.ElementID == supplierOv.ElementID)
                {
                    targetDiagObj = diagObj;
                }

                if (sourceDiagObj != null && targetDiagObj != null)
                {
                    continue;
                }
            }

            int sourceLeft   = (sourceDiagObj == null) ? 0 : sourceDiagObj.left;
            int sourceRight  = (sourceDiagObj == null) ? 0 : sourceDiagObj.right;
            int sourceBottom = (sourceDiagObj == null) ? 0 : sourceDiagObj.bottom;
            int sourceTop    = (sourceDiagObj == null) ? 0 : sourceDiagObj.top;

            int targetLeft   = (targetDiagObj == null) ? 0 : targetDiagObj.left;
            int targetRight  = (targetDiagObj == null) ? 0 : targetDiagObj.right;
            int targetBottom = (targetDiagObj == null) ? 0 : targetDiagObj.bottom;
            int targetTop    = (targetDiagObj == null) ? 0 : targetDiagObj.top;

            EA.DiagramObject tggLinkDiagObj = currentDiagram.DiagramObjects.AddNew("", "") as EA.DiagramObject;
            tggLinkDiagObj.ElementID = tggCorrespondenceObject.ElementID;
            tggLinkDiagObj.Update();
            tggLinkDiagObj.left   = (sourceLeft + targetLeft) / 2;
            tggLinkDiagObj.right  = (sourceRight + targetRight) / 2;
            tggLinkDiagObj.bottom = (sourceBottom + targetBottom) / 2;
            tggLinkDiagObj.top    = (sourceTop + targetTop) / 2;
            tggLinkDiagObj.Update();
            currentDiagram.DiagramObjects.Refresh();
        }
Exemplo n.º 18
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.º 19
0
        /// <summary>
        /// Возвращает Список элементов диаграммы, являющихся для него родительскими
        /// </summary>
        /// <param name="element"></param>
        /// <returns>Отсортированный в сооответствии с род. иерархией список DiagramObjects</returns>
        public static List <EA.DiagramObject> GetDeployParentHierarchyDA(EA.Element element)
        {
            List <EA.DiagramObject> result = new List <EA.DiagramObject>();

            // Получаем список родительской иерархии
            List <EA.Element> parentHierarchy = GetParentHierarchy(element);

            foreach (EA.Element curParent in parentHierarchy)
            {
                EA.DiagramObject curParentDA = Context.Designer.CurrentDiagram.GetDiagramObjectByID(curParent.ElementID, "");
                if (curParentDA != null)
                {
                    result.Add(curParentDA);
                }
            }

            return(result);
        }
Exemplo n.º 20
0
 /// <summary>
 /// Searches for a DiagramObject with the same ID as the element on the given diagram
 /// </summary>
 /// <param name="element"></param>
 /// <param name="diagram"></param>
 /// <returns>The found DiagramObject or null if there exists none</returns>
 public static EA.DiagramObject findDiagramObject(SQLRepository repository, EA.Element element, EA.Diagram diagram)
 {
     EA.Diagram currentDiagram = diagram;
     if (currentDiagram is SQLDiagram)
     {
         currentDiagram = sqlEAObjectToOriginalObject(repository, currentDiagram) as EA.Diagram;
     }
     EA.DiagramObject val = null;
     foreach (EA.DiagramObject diagObj in currentDiagram.DiagramObjects)
     {
         if (diagObj.ElementID == element.ElementID)
         {
             val = diagObj;
             break;
         }
     }
     return(val);
 }
Exemplo n.º 21
0
        /// <summary>
        /// Функция вычисляет требуемое расширение родительского элемента для вписывания в него childDA
        /// </summary>
        /// <param name="parentDA"></param>
        /// <param name="childDA"></param>
        /// <returns>Новый размер parentDA, позиция для child-а внутри parentDA</returns>
        public static Tuple <Size, Point> GetExpandedDASizeForChild(EA.DiagramObject parentDA, EA.DiagramObject childDA, List <EA.DiagramObject> childDAList)
        {
            Point resultPoint = new Point();


            Size parentSize = GetSize(parentDA);
            Size childSize  = GetSize(childDA);

            // получаем точку, от которой в элементе начинается свободное место
            var   childDAList1        = childDAList.Where(da => da.ElementID != childDA.ElementID); // убираем из списка "внтури родительского" дочерний
            Point parentDAFreeBorders = GetDAFreeBorders(parentDA, childDAList);                    // получаем точку начала свободного места


            // далее упрощённо - если ширина больше высоты - увеличиваем высоту
            // иначе - увеличиваем ширину
            if (parentSize.Width > parentSize.Height)
            {
                // Увеличиваем parentDA вниз
                parentSize.Height = parentSize.Height + childSize.Height + 3 * DAConst.border - (parentSize.Height - Math.Abs(parentDAFreeBorders.Y));
                if (parentSize.Width < (childSize.Width + 2 * DAConst.border))
                {
                    parentSize.Width = childSize.Width + 2 * DAConst.border;
                }

                // размещение childDA = у левой и нижней границы
                resultPoint.X = DAConst.border;
                resultPoint.Y = -parentSize.Height + DAConst.border + childSize.Height;
            }
            else
            {
                // Увеличиваем parentDA вправо
                parentSize.Width = parentSize.Width + childSize.Width + 2 * DAConst.border - (parentSize.Width - parentDAFreeBorders.X);
                if (parentSize.Height < (childSize.Height + 3 * DAConst.border))
                {
                    parentSize.Height = childSize.Height + 3 * DAConst.border;
                }

                // размещение childDA = у правой верхней границы
                resultPoint.X = parentSize.Width - DAConst.border - childSize.Width;
                resultPoint.Y = -2 * DAConst.border;
            }

            return(new Tuple <Size, Point>(parentSize, resultPoint));
        }
Exemplo n.º 22
0
        /// <summary>
        /// Проверяет, что элементы-концы (линка) помещены на текущую диаграмму
        /// </summary>
        /// <param name="connector"></param>
        public static bool IsConnectorEndsOnCurrentDiagram(int sourceElementID, int targetElementID)

        {
            bool result = false;

            if (Context.CurrentDiagram == null)
            {
                return(false);                                // Диаграмма не открыта
            }
            EA.DiagramObject sourceDA = Context.CurrentDiagram.GetDiagramObjectByID(sourceElementID, "");
            EA.DiagramObject targetDA = Context.CurrentDiagram.GetDiagramObjectByID(targetElementID, "");

            if (sourceDA != null && targetDA != null)
            {
                result = true;
            }

            return(result);
        }
Exemplo n.º 23
0
        /// <summary>
        /// Возвращает Список всех дочерних (deploy, всё дерево) элементов диаграммы, присутствующих на диаграмме
        /// </summary>
        /// <param name="eaElement"></param>
        /// <returns></returns>
        public static List <EA.DiagramObject> GetDeployChildrenHierarchyDA(EA.Element eaElement)
        {
            List <EA.DiagramObject> result = new List <EA.DiagramObject>();

            // Получаем собственно дочерних
            List <EA.Element> childrenElements = GetChildHierarchy(eaElement);

            // для каждого проверяем, нет ли его на диаграмме
            foreach (EA.Element childElement in childrenElements)
            {
                EA.DiagramObject childElementDA = Context.CurrentDiagram.GetDiagramObjectByID(childElement.ElementID, "");
                if (childElementDA != null) // если есть на диаграмме - добавляем его в результат
                {
                    result.Add(childElementDA);
                }
            }

            return(result);
        }
Exemplo n.º 24
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);
        }
Exemplo n.º 25
0
        private static void printTggCorrespondenceObjectTree(EA.Element child, EA.Diagram diagram, EA.Repository repository, List <int> usedY, List <Point> usedPoints, List <int> usedElementIds)
        {
            int x = 2;
            int y = 1;

            while (usedY.Contains(y))
            {
                y++;
            }

            EA.DiagramObject diagObject = diagram.DiagramObjects.AddNew("", "") as EA.DiagramObject;
            diagObject.ElementID = child.ElementID;
            diagObject.left      = x * 200;
            diagObject.right     = diagObject.left + 125;
            diagObject.top       = y * -100;
            diagObject.bottom    = diagObject.top - 50;
            diagObject.Update();
            usedY.Add(y);
            usedPoints.Add(new Point(x, y));
        }
Exemplo n.º 26
0
 public static void fillDiagramFromCollections(EA.Diagram diagram, EA.Collection elementCollection, EA.Collection packageCollection)
 {
     if (elementCollection != null)
     {
         foreach (EA.Element element in elementCollection)
         {
             EA.DiagramObject diagramObject = diagram.DiagramObjects.AddNew(element.Name, element.Type) as EA.DiagramObject;
             diagramObject.ElementID = element.ElementID;
             diagramObject.Update();
         }
     }
     if (packageCollection != null)
     {
         foreach (EA.Package pkg in packageCollection)
         {
             EA.DiagramObject diagramObject = diagram.DiagramObjects.AddNew(pkg.Name, "") as EA.DiagramObject;
             diagramObject.ElementID = pkg.Element.ElementID;
             diagramObject.Update();
         }
     }
 }
        private EA.DiagramObject AddDiagramObject(EA.Diagram diagram, int iLinkedElementID, string strPos)
        {
            string strLogInfo = "diagram object for link ID: " + iLinkedElementID.ToString();

            EAImporter.LogMsg(EAImporter.LogMsgType.Adding, strLogInfo);

            EA.DiagramObject diagramObj = diagram.DiagramObjects.AddNew(strPos, "");
            if (diagramObj == null)
            {
                EAImporter.LogError(EAImporter.LogErrorLevel.A, strLogInfo);
                return(null);
            }

            diagramObj.ElementID = iLinkedElementID;
            diagramObj.Update();
            diagram.DiagramObjects.Refresh();

            EAImporter.LogMsg(EAImporter.LogMsgType.Added, strLogInfo);

            return(diagramObj);
        }
Exemplo n.º 28
0
        /// <summary>
        /// Функция вычисляет размеры элемента по умолчанию, если они нулевые
        /// Если есть настройки размера в элементе - используются настройки в элементе
        /// Если нет - используются общие дефолтные константы
        /// </summary>
        /// <param name="da"></param>
        /// <returns>размер объекта</returns>
        public static Size GetDefaultDASize(EA.DiagramObject diagramObject)
        {
            Size result = new Size(diagramObject.right - diagramObject.left, diagramObject.top - diagramObject.bottom);

            EA.Element element = EARepository.GetElementByID(diagramObject.ElementID);

            // Для начала пытаемся установить размер из тэгов
            if (result.Width == 0 && EATVHelper.GetTaggedValues(element).GetByName(DAConst.defaultWidthTag) != null)
            {
                result.Width = int.Parse(EATVHelper.GetTaggedValues(element).GetByName(DAConst.defaultWidthTag).Value);
            }
            if (result.Height == 0 && EATVHelper.GetTaggedValues(element).GetByName(DAConst.defaultHeightTag) != null)
            {
                result.Height = int.Parse(EATVHelper.GetTaggedValues(element).GetByName(DAConst.defaultHeightTag).Value);
            }

            // Если из тэгов не установили, пытаемся вычислить на лету по библиотечной диаграмме

            /*
             * if (result.Height == 0 || result.Width == 0)
             * {
             *  ExecResult<Size> GetElementSizeOnLibDiagramResult = EAHelper.GetElementSizeOnLibDiagram(element);
             *  if (GetElementSizeOnLibDiagramResult.code == 0)
             *  {
             *      result = GetElementSizeOnLibDiagramResult.value;
             *  }
             * }
             */
            // Ну если совсем ничего, то просто ставим цифры по умолчанию
            if (result.Height == 0)
            {
                result.Height = DAConst.defaultHeight;
            }
            if (result.Width == 0)
            {
                result.Width = DAConst.defaultWidth;
            }

            return(result);
        }
Exemplo n.º 29
0
        /// <summary>
        /// Функция возвращает свободное место на диаграмме для размещения DA
        /// Точку в левом / правом верхнем углу
        /// </summary>
        /// <returns></returns>
        public static Point GetFirstFreePoinForDA(EA.DiagramObject diagramObject)
        {
            Size daSize = GetSize(diagramObject);

            Point result  = new Point(DAConst.border, -DAConst.border); // начальная точка - возле левого верхнего угла
            Point result1 = new Point(DAConst.border, -DAConst.border);


            // Проходимся по элементам, одновременно решая, пересекается ли элемент с другими
            // и вычисляя минимальную правую незанятую точку на тот случай если пересекается
            bool intersects = false;

            foreach (EA.DiagramObject curDA in Context.CurrentDiagram.DiagramObjects)
            {
                if (curDA.ElementID == diagramObject.ElementID)
                {
                    continue;                                             // вообще то он ещё не проапдейчен и его нет, но на всякий случай....
                }
                if (!intersects && Intersects(diagramObject, curDA))
                {
                    intersects = true;
                }

                if ((curDA.right + DAConst.border) >= result1.X)
                {
                    result1.X = curDA.right + DAConst.border;
                }
            }


            if (!intersects)
            {
                return(result);
            }
            else
            {
                return(result1);
            }
        }
Exemplo n.º 30
0
        /// <summary>
        /// Функция возвращает точку внутри DA (координаты отсчитываются от DA), правее и ниже которой нет дочерних элементов
        /// </summary>
        /// <param name="DA">объект, куда вписываем</param>
        /// <param name="childDAList">прочие объекты внутри DA</param>
        /// <returns></returns>
        private static Point GetDAFreeBorders(EA.DiagramObject diagramObject, List <EA.DiagramObject> childDAList)
        {
            Point result = new Point(diagramObject.left, diagramObject.top);

            foreach (var childDA in childDAList)
            {
                if (result.X < childDA.right)
                {
                    result.X = childDA.right;
                }
                if (result.Y > childDA.bottom)
                {
                    result.Y = childDA.bottom;
                }
            }

            // Делаем координаты относительно diagramObject
            result.X = result.X - diagramObject.left;
            result.Y = result.Y - diagramObject.top;

            return(result);
        }