Пример #1
0
        /// <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 });
        }
Пример #2
0
        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];
                }
            }
        }