GetEdgeEndpoint() public abstract method

public abstract GetEdgeEndpoint ( Point otherEndpoint, Point &edgeEndpoint ) : void
otherEndpoint Point
edgeEndpoint Point
return void
示例#1
0
    TryGetVertexInformation
    (
        IVertex oVertex1,
        IVertex oVertex2,
        out VertexDrawingHistory oVertex1DrawingHistory,
        out VertexDrawingHistory oVertex2DrawingHistory,
        out Point oEdgeEndpoint1,
        out Point oEdgeEndpoint2
    )
    {
        Debug.Assert(oVertex1 != null);
        Debug.Assert(oVertex2 != null);
        AssertValid();

        oVertex1DrawingHistory = oVertex2DrawingHistory = null;
        oEdgeEndpoint1 = oEdgeEndpoint2 = new Point();

        // Retrieve the information about how the vertices were drawn.

        if (
            !TryGetVertexDrawingHistory(oVertex1, out oVertex1DrawingHistory)
            ||
            !TryGetVertexDrawingHistory(oVertex2, out oVertex2DrawingHistory)
            )
        {
            // One of the edge's vertices is hidden.

            return (false);
        }

        // The drawing histories determine the edge endpoints.  For example, if
        // oVertex1 was drawn as a circle, then oVertex1DrawingHistory is a
        // CircleVertexDrawingHistory that knows to put its endpoint on the
        // circle itself and not at the circle's center.

        oVertex1DrawingHistory.GetEdgeEndpoint(
            oVertex2DrawingHistory.VertexLocation, out oEdgeEndpoint1);

        oVertex2DrawingHistory.GetEdgeEndpoint(
            oVertex1DrawingHistory.VertexLocation, out oEdgeEndpoint2);

        return (true);
    }
示例#2
0
    DrawCurveThroughIntermediatePoints
    (
        IEdge oEdge,
        GraphDrawingContext oGraphDrawingContext,
        DrawingContext oDrawingContext,
        VertexDrawingHistory oVertex1DrawingHistory,
        VertexDrawingHistory oVertex2DrawingHistory,
        Point oEdgeEndpoint1,
        Point oEdgeEndpoint2,
        Pen oPen
    )
    {
        Debug.Assert(oEdge != null);
        Debug.Assert(oGraphDrawingContext != null);
        Debug.Assert(oDrawingContext != null);
        Debug.Assert(oVertex1DrawingHistory != null);
        Debug.Assert(oVertex2DrawingHistory != null);
        Debug.Assert(oPen != null);
        AssertValid();

        // Note: Don't attempt to draw an arrow in this case.

        // Create a list of intermediate points, excluding those that fall
        // within the vertex bounds.  An edge always terminates on the vertex
        // bounds, so we don't want it venturing into the vertex itself.

        List<Point> oCurvePoints = FilterIntermediatePoints(oEdge,
            oVertex1DrawingHistory, oVertex2DrawingHistory);

        Int32 iCurvePoints = oCurvePoints.Count;

        if (iCurvePoints == 0)
        {
            // Just draw a straight line.

            oDrawingContext.DrawLine(oPen, oEdgeEndpoint1, oEdgeEndpoint2);
            return;
        }

        #if false
        // Draw intermediate points for testing.

        foreach (Point oPoint in oCurvePoints)
        {
            oDrawingContext.DrawEllipse(Brushes.Green, null, oPoint, 2, 2);
        }
        #endif

        // The endpoints were originally calculated as if the edge was a
        // straight line between the two vertices.  Recalculate them so they
        // connect more smoothly to the adjacent intermediate curve points.

        oVertex1DrawingHistory.GetEdgeEndpoint(oCurvePoints[0],
            out oEdgeEndpoint1);

        oVertex2DrawingHistory.GetEdgeEndpoint(oCurvePoints[iCurvePoints - 1],
            out oEdgeEndpoint2);

        oCurvePoints.Insert(0, oEdgeEndpoint1);
        oCurvePoints.Add(oEdgeEndpoint2);

        PathGeometry oCurveThroughPoints =
            WpfPathGeometryUtil.GetCurveThroughPoints(oCurvePoints, 0.5,
                CurveThroughIntermediatePointsTolerance);

        oDrawingContext.DrawGeometry(null, oPen, oCurveThroughPoints);

        // Note: Don't attempt to draw a label in this case.
    }