/// <summary> /// Get the current Diagram with it's selected objects and connectors. /// </summary> /// <param name="rep"></param> /// <param name="getAllDiagramObject">True if you want all diagram objects if nothing no diagram object is selected</param> public EaDiagram(Repository rep, bool getAllDiagramObject = false) { _rep = rep; _dia = _rep.GetCurrentDiagram(); IsSelectedObjects = false; if (_dia == null) { return; } if (_dia.SelectedObjects.Count == 0 && getAllDiagramObject) { // overall diagram objects foreach (EA.DiagramObject obj in _dia.DiagramObjects) { _selectedObjects.Add(obj); SelElements.Add(rep.GetElementByID(obj.ElementID)); } } // If an context element exists than this is the last selected element if (_dia.SelectedObjects.Count > 0) { EA.ObjectType type = _rep.GetContextItemType(); // only package and object makes sense, or no context element (than go for selected elements) if (type == EA.ObjectType.otElement || type == EA.ObjectType.otPackage || type == EA.ObjectType.otNone) { // 1. store context element/ last selected element EA.Element elContext = (EA.Element)rep.GetContextObject(); // no context element available, take first element if (elContext == null) { EA.DiagramObject obj = (EA.DiagramObject)_dia.SelectedObjects.GetAt(0); elContext = rep.GetElementByID(obj.ElementID); } _conTextDiagramObject = _dia.GetDiagramObjectByID(elContext.ElementID, ""); SelElements.Add(elContext); _selectedObjects.Add(_conTextDiagramObject); IsSelectedObjects = true; // over all selected diagram objects foreach (EA.DiagramObject obj in _dia.SelectedObjects) { // skip last selected element / context element if (obj.ElementID == _conTextDiagramObject.ElementID) { continue; } _selectedObjects.Add(obj); SelElements.Add(rep.GetElementByID(obj.ElementID)); } } } _selectedConnector = _dia.SelectedConnector; }
/// <summary> /// Get the current Diagram with it's selected objects and connectors. /// </summary> /// <param name="rep"></param> /// <param name="getAllDiagramObject">True if you want all diagram objects if nothing no diagram object is selected</param> public EaDiagram(Repository rep, bool getAllDiagramObject = false) { _rep = rep; _selectedConnector = null; IsSelectedObjects = false; _dia = rep.GetCurrentDiagram(); // Nothing selected if (_dia == null || (_dia.SelectedConnector == null && _dia.SelectedObjects.Count == 0)) { GetTreeSelected(); return; } EA.ObjectType contextObjectType = Rep.GetContextItemType(); // Check if context is diagram or something inside the current diagram is selected (selected things are never old) if (contextObjectType != ObjectType.otDiagram && _dia.SelectedObjects.Count == 0 && _dia.SelectedConnector == null) { return; } // Diagram is context or something inside the diagram is selected IsSelectedObjects = false; if (_dia.SelectedObjects.Count == 0 && getAllDiagramObject) { // overall diagram objects foreach (EA.DiagramObject obj in _dia.DiagramObjects) { _selectedObjects.Add(obj); SelElements.Add(rep.GetElementByID(obj.ElementID)); } } // If an context element exists than this is the last selected element if (_dia.SelectedObjects.Count > 0) { // The context item isn't always set, try to estimate it if (contextObjectType == EA.ObjectType.otElement || contextObjectType == EA.ObjectType.otPackage || contextObjectType == EA.ObjectType.otNone || contextObjectType == EA.ObjectType.otDiagram ) { // 1. store context element/ last selected element // Context Element may be a Package. EA also stores the package as Element EA.Element elContext = null; switch (rep.GetContextItemType()) { case EA.ObjectType.otElement: elContext = (EA.Element)rep.GetContextObject(); break; case EA.ObjectType.otPackage: var pkg = (EA.Package)rep.GetContextObject(); elContext = rep.GetElementByGuid(pkg.PackageGUID); break; } // no context element available, take first element if (elContext == null) { EA.DiagramObject obj = (EA.DiagramObject)_dia.SelectedObjects.GetAt(0); elContext = rep.GetElementByID(obj.ElementID); } _conTextDiagramObject = _dia.GetDiagramObjectByID(elContext.ElementID, ""); SelElements.Add(elContext); _selectedObjects.Add(_conTextDiagramObject); IsSelectedObjects = true; // over all selected diagram objects foreach (EA.DiagramObject obj in _dia.SelectedObjects) { // skip last selected element / context element if (_conTextDiagramObject != null && obj.ElementID == _conTextDiagramObject.ElementID) { continue; } _selectedObjects.Add(obj); SelElements.Add(rep.GetElementByID(obj.ElementID)); } } } _selectedConnector = _dia.SelectedConnector; }