/// <summary> /// Helper method to find shapes for either end of a connector by looking for shapes associated with either end of the relationship mapped to the connector. /// </summary> private DslDiagrams::NodeShape[] GetEndShapesForConnector(DslDiagrams::BinaryLinkShape connector) { DslModeling::ElementLink link = connector.ModelElement as DslModeling::ElementLink; DslDiagrams::NodeShape sourceShape = null, targetShape = null; if (link != null) { global::System.Collections.ObjectModel.ReadOnlyCollection <DslModeling::ModelElement> linkedElements = link.LinkedElements; if (linkedElements.Count == 2) { DslDiagrams::Diagram currentDiagram = this.Diagram; DslModeling::LinkedElementCollection <DslDiagrams::PresentationElement> presentationElements = DslDiagrams::PresentationViewsSubject.GetPresentation(linkedElements[0]); foreach (DslDiagrams::PresentationElement presentationElement in presentationElements) { DslDiagrams::NodeShape shape = presentationElement as DslDiagrams::NodeShape; if (shape != null && shape.Diagram == currentDiagram) { sourceShape = shape; break; } } presentationElements = DslDiagrams::PresentationViewsSubject.GetPresentation(linkedElements[1]); foreach (DslDiagrams::PresentationElement presentationElement in presentationElements) { DslDiagrams::NodeShape shape = presentationElement as DslDiagrams::NodeShape; if (shape != null && shape.Diagram == currentDiagram) { targetShape = shape; break; } } } } return(new DslDiagrams::NodeShape[] { sourceShape, targetShape }); }
internal void GetSourceAndTargetForConnector(DslDiagrams::BinaryLinkShape connector, out DslDiagrams::NodeShape sourceShape, out DslDiagrams::NodeShape targetShape) { sourceShape = null; targetShape = null; if (sourceShape == null || targetShape == null) { DslDiagrams::NodeShape[] endShapes = GetEndShapesForConnector(connector); if (sourceShape == null) { sourceShape = endShapes[0]; } if (targetShape == null) { targetShape = endShapes[1]; } } }