/// <summary> /// Returns the edge an embedded element is bound to (left, right, top, bottom) /// </summary> /// <param name="obj"></param> /// <param name="rep"></param> /// <returns></returns> public static EmbeddedPosition Edge(this EA.DiagramObject obj, EA.Repository rep) { EA.Element el = rep.GetElementByID(obj.ElementID); EA.Element elParent = el.GetParentOfEmbedded(rep); if (elParent == null) { return(EmbeddedPosition.Undefined); } // for Required/Required Interface use the owning Port for the position if (el.Type == "ProvidedInterface" || el.Type == "RequiredInterface") { if (el.ParentID == 0) { return(EmbeddedPosition.Undefined); } el = rep.GetElementByID(el.ParentID); } EA.Diagram dia = rep.GetDiagramByID(obj.DiagramID); EA.DiagramObject objParent = dia.GetDiagramObjectByID(elParent.ElementID, ""); EA.DiagramObject objFirstEmbedded = dia.GetDiagramObjectByID(el.ElementID, ""); if (objParent == null) { return(EmbeddedPosition.Undefined); } int horicontalCenter = objFirstEmbedded.left + (objFirstEmbedded.right - objFirstEmbedded.left) / 2; int verticalCenter = objFirstEmbedded.top - (objFirstEmbedded.top - objFirstEmbedded.bottom) / 2; if (horicontalCenter < objParent.left + 10 && horicontalCenter > objParent.left - 10) { return(EmbeddedPosition.Left); } if (horicontalCenter < objParent.right + 10 && horicontalCenter > objParent.right - 10) { return(EmbeddedPosition.Right); } if (verticalCenter < objParent.top + 10 && verticalCenter > objParent.top - 10) { return(EmbeddedPosition.Top); } if (verticalCenter < objParent.bottom + 10 && verticalCenter > objParent.bottom - 10) { return(EmbeddedPosition.Bottom); } return(EmbeddedPosition.Undefined); }
/// <summary> /// Get parent Element of an Embedded Element which isn't an embedded element. Returns null if not found /// </summary> /// <param name="el"></param> /// <param name="rep"></param> /// <returns></returns> public static EA.Element GetParentOfEmbedded(this EA.Element el, EA.Repository rep) { if (!el.IsEmbeddedElement(rep, true)) { return(el); } if (el.ParentID == 0) { return(null); } EA.Element elParent = rep.GetElementByID(el.ParentID); if (elParent.IsEmbeddedElement(rep, true)) { return(elParent.GetParentOfEmbedded(rep)); } return(elParent); }