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