Area ar1 = new Area( prevClip );
	public void drawArc( ArcRenderEvent are ) throws ChartException	{		// CHECK IF THE LINE ATTRIBUTES ARE CORRECTLY DEFINED		final LineAttributes lia = are.getOutline( );		if ( !validateLineAttributes( are.getSource( ), lia ) )		{			return;		}		// SETUP THE FOREGROUND COLOR (DARKER BACKGROUND IF DEFINED AS NULL)		final Color cFG = (Color) validateEdgeColor( lia.getColor( ),				are.getBackground( ),				_ids );		if ( cFG == null )		{			return;		}		// DRAW THE ARC		Stroke sPrevious = null;		Stroke sCurrent = getCachedStroke( lia );		if ( sCurrent != null ) // SOME STROKE DEFINED?		{			sPrevious = _g2d.getStroke( );			_g2d.setStroke( sCurrent );		}		_g2d.setColor( cFG );		if ( are.getInnerRadius( ) >= 0				&& are.getOuterRadius( ) > 0				&& are.getInnerRadius( ) < are.getOuterRadius( ) )		{			Shape outerArc = new Arc2D.Double( are.getTopLeft( ).getX( )					+ ( are.getWidth( ) - 2 * are.getOuterRadius( ) )					/ 2,					are.getTopLeft( ).getY( )							+ ( are.getHeight( ) - 2 * are.getOuterRadius( ) )							/ 2,					2 * are.getOuterRadius( ),					2 * are.getOuterRadius( ),					are.getStartAngle( ),					are.getAngleExtent( ),					Arc2D.PIE );			Shape innerArc = new Arc2D.Double( are.getTopLeft( ).getX( )					+ ( are.getWidth( ) - 2 * are.getInnerRadius( ) )					/ 2,					are.getTopLeft( ).getY( )							+ ( are.getHeight( ) - 2 * are.getInnerRadius( ) )							/ 2,					2 * are.getInnerRadius( ),					2 * are.getInnerRadius( ),					are.getStartAngle( ),					are.getAngleExtent( ),					Arc2D.PIE );			Area fArea = new Area( outerArc );			fArea.exclusiveOr( new Area( innerArc ) );			Shape prevClip = _g2d.getClip( );			Area ar1 = new Area( prevClip );			Area ar2 = new Area( fArea );			ar2.intersect( ar1 );			_g2d.setClip( ar2 );			_g2d.draw( fArea );			_g2d.setClip( prevClip );		}		else		{			_g2d.draw( new Arc2D.Double( are.getTopLeft( ).getX( ),					are.getTopLeft( ).getY( ),					are.getWidth( ),					are.getHeight( ),					are.getStartAngle( ),					are.getAngleExtent( ),					toSwingArcType( are.getStyle( ) ) ) );		}		if ( sPrevious != null ) // RESTORE PREVIOUS STROKE		{			_g2d.setStroke( sPrevious );		}	}