else if ( iLabelLocation == INSIDE ) {  if ( dAngleInDegrees == 0 ) { bb = new BoundingBox( INSIDE, dX - dW / 2, dY - dH / 2, dW, dH, 0 ); }  else if ( dAngleInDegrees > 0 && dAngleInDegrees < 90 ) { bb = new BoundingBox( INSIDE, dX - ( dH * dSineTheta + dW * dCosTheta ) / 2, dY - ( dH * dCosTheta + dW * dSineTheta ) / 2, dH * dSineTheta + dW * dCosTheta, dH * dCosTheta + dW * dSineTheta, 0 ); }  else if ( dAngleInDegrees < 0 && dAngleInDegrees > -90 ) { bb = new BoundingBox( INSIDE, dX - ( dW * dCosTheta + dH * dSineTheta ) / 2, dY - ( dH * dCosTheta + dW * dSineTheta ) / 2, dH * dSineTheta + dW * dCosTheta, dH * dCosTheta + dW * dSineTheta, 0 ); }  else if ( dAngleInDegrees == 90 || dAngleInDegrees == -90 ) { bb = new BoundingBox( INSIDE, dX - dH / 2, dY - dW / 2, dH, dW, 0 ); } }
	public static final BoundingBox computeBox( IDisplayServer xs,			int iLabelLocation, Label la, double dX, double dY )			throws IllegalArgumentException	{		double dAngleInDegrees = la.getCaption( ).getFont( ).getRotation( );		if ( dAngleInDegrees < -90 || dAngleInDegrees > 90 )		{			throw new IllegalArgumentException( MessageFormat.format( Messages.getResourceBundle( xs.getULocale( ) )					.getString( "exception.illegal.rotation.angle.label" ), //$NON-NLS-1$					new Object[]{						la					} ) );		}		final double dAngleInRadians = ( ( -dAngleInDegrees * Math.PI ) / 180.0 );		final double dSineTheta = Math.abs( Math.sin( dAngleInRadians ) );		final double dCosTheta = Math.abs( Math.cos( dAngleInRadians ) );		final ITextMetrics itm = xs.getTextMetrics( la );		double dW = itm.getFullWidth( );		double dH = itm.getFullHeight( );		BoundingBox bb = null;		if ( iLabelLocation == LEFT )		{			// ZERO : HORIZONTAL			if ( dAngleInDegrees == 0 )			{				bb = new BoundingBox( LEFT,						dX - dW,						dY - dH / 2,						dW,						dH,						dH / 2 );			}			// POSITIVE			else if ( dAngleInDegrees > 0 && dAngleInDegrees < 90 )			{				bb = new BoundingBox( LEFT, dX						- ( dH * dSineTheta + dW * dCosTheta ), dY						- dH						* dCosTheta, dH * dSineTheta + dW * dCosTheta, dH						* dCosTheta						+ dW						* dSineTheta, dH * dCosTheta );			}			// NEGATIVE			else if ( dAngleInDegrees < 0 && dAngleInDegrees > -90 )			{				bb = new BoundingBox( LEFT, dX						- ( dH * dSineTheta + dW * dCosTheta ), dY						- dW						* dSineTheta, dH * dSineTheta + dW * dCosTheta, dH						* dCosTheta						+ dW						* dSineTheta, dW * dSineTheta );			}			// ?90 : VERTICALLY UP OR DOWN			else if ( dAngleInDegrees == 90 || dAngleInDegrees == -90 )			{				bb = new BoundingBox( LEFT,						dX - dH,						dY - dW / 2,						dH,						dW,						dW / 2 );			}		}		else if ( iLabelLocation == RIGHT )		{			// ZERO : HORIZONTAL			if ( dAngleInDegrees == 0 )			{				bb = new BoundingBox( RIGHT, dX, dY - dH / 2, dW, dH, dH / 2 );			}			// POSITIVE			else if ( dAngleInDegrees > 0 && dAngleInDegrees < 90 )			{				bb = new BoundingBox( RIGHT, dX, dY - dW * dSineTheta, dH						* dSineTheta						+ dW						* dCosTheta, dH * dCosTheta + dW * dSineTheta, dW						* dSineTheta );			}			// NEGATIVE			else if ( dAngleInDegrees < 0 && dAngleInDegrees > -90 )			{				bb = new BoundingBox( RIGHT, dX, dY - dH * dCosTheta, dH						* dSineTheta						+ dW						* dCosTheta, dH * dCosTheta + dW * dSineTheta, dH						* dCosTheta );			}			// ?90 : VERTICALLY UP OR DOWN			else if ( dAngleInDegrees == 90 || dAngleInDegrees == -90 )			{				bb = new BoundingBox( RIGHT, dX, dY - dW / 2, dH, dW, dW / 2 );			}		}		else if ( iLabelLocation == BOTTOM )		{			// ZERO : HORIZONTAL			if ( dAngleInDegrees == 0 )			{				bb = new BoundingBox( BOTTOM, dX - dW / 2, dY, dW, dH, dW / 2 );			}			// POSITIVE			else if ( dAngleInDegrees > 0 && dAngleInDegrees < 90 )			{				bb = new BoundingBox( BOTTOM, dX - dW * dCosTheta, dY, dH						* dSineTheta						+ dW						* dCosTheta, dH * dCosTheta + dW * dSineTheta, dW						* dCosTheta );			}			// NEGATIVE			else if ( dAngleInDegrees < 0 && dAngleInDegrees > -90 )			{				bb = new BoundingBox( BOTTOM, dX - dH * dSineTheta, dY, dH						* dSineTheta						+ dW						* dCosTheta, dH * dCosTheta + dW * dSineTheta, dH						* dSineTheta );			}			// ?90 : VERTICALLY UP OR DOWN			else if ( dAngleInDegrees == 90 || dAngleInDegrees == -90 )			{				bb = new BoundingBox( BOTTOM, dX - dH / 2, dY, dH, dW, dH / 2 );			}		}		else if ( iLabelLocation == TOP )		{			// ZERO : HORIZONTAL			if ( dAngleInDegrees == 0 )			{				bb = new BoundingBox( TOP, dX - dW / 2, dY - dH, dW, dH, dW / 2 );			}			// POSITIVE			else if ( dAngleInDegrees > 0 && dAngleInDegrees < 90 )			{				bb = new BoundingBox( TOP, dX - dH * dSineTheta, dY						- ( dH * dCosTheta + dW * dSineTheta ), dH						* dSineTheta						+ dW						* dCosTheta, dH * dCosTheta + dW * dSineTheta, dH						* dSineTheta );			}			// NEGATIVE			else if ( dAngleInDegrees < 0 && dAngleInDegrees > -90 )			{				bb = new BoundingBox( TOP, dX - dW * dCosTheta, dY						- ( dH * dCosTheta + dW * dSineTheta ), dH						* dSineTheta						+ dW						* dCosTheta, dH * dCosTheta + dW * dSineTheta, dW						* dCosTheta );			}			// ?90 : VERTICALLY UP OR DOWN			else if ( dAngleInDegrees == 90 || dAngleInDegrees == -90 )			{				bb = new BoundingBox( TOP, dX - dH / 2, dY - dW, dH, dW, dH / 2 );			}		}		itm.dispose( );		return bb;	}