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);
}
}