Example #1
0
        GetLabelLocation
        (
            VertexLabelPosition labelPosition
        )
        {
            AssertValid();

            Rect oVertexBounds =
                WpfGraphicsUtil.TriangleBoundsFromCenterAndHalfWidth(
                    this.VertexLocation, m_dHalfWidth);

            Double dCenterX = oVertexBounds.Left + oVertexBounds.Width / 2.0;

            // These were determined experimentally to avoid trigonometry method
            // calls and to make the labels look good.

            Double dCenterY = oVertexBounds.Top +
                              1.2 * (oVertexBounds.Height / 2.0);

            Double dOffsetX = m_dHalfWidth * 1.0;

            switch (labelPosition)
            {
            case VertexLabelPosition.TopLeft:
            case VertexLabelPosition.TopCenter:
            case VertexLabelPosition.TopRight:

                return(new Point(dCenterX, oVertexBounds.Top));

            case VertexLabelPosition.MiddleLeft:

                return(new Point(dCenterX - dOffsetX, dCenterY));

            case VertexLabelPosition.MiddleCenter:

                return(new Point(dCenterX, dCenterY));

            case VertexLabelPosition.MiddleRight:

                return(new Point(dCenterX + dOffsetX, dCenterY));

            case VertexLabelPosition.BottomLeft:

                return(oVertexBounds.BottomLeft);

            case VertexLabelPosition.BottomCenter:

                return(new Point(dCenterX, oVertexBounds.Bottom));

            case VertexLabelPosition.BottomRight:

                return(oVertexBounds.BottomRight);

            default:

                Debug.Assert(false);
                return(this.VertexLocation);
            }
        }