if ( !p.isVisible( ) ) { return; }
	public final void renderPlot( IPrimitiveRenderer ipr, Plot p )			throws ChartException	{		final boolean bFirstInSequence = ( iSeriesIndex == 0 );		final boolean bLastInSequence = ( iSeriesIndex == iSeriesCount - 1 );		if ( bFirstInSequence )		{			renderBackground( ipr, p );			renderAxesStructure( ipr, p );		}		SeriesRenderingHints srh = null;		try		{			srh = ( (PlotWith2DAxes) getComputations( ) ).getSeriesRenderingHints( getSeriesDefinition( ),					getSeries( ) );		}		catch ( Exception ex )		{			throw new ChartException( ChartEnginePlugin.ID,					ChartException.RENDERING,					ex );		}		ScriptHandler.callFunction( getRunTimeContext( ).getScriptHandler( ),				ScriptHandler.BEFORE_DRAW_SERIES,				getSeries( ),				this );		getRunTimeContext( ).notifyStructureChange( IStructureDefinitionListener.BEFORE_DRAW_SERIES,				getSeries( ) );		renderSeries( ipr, p, srh ); // CALLS THE APPROPRIATE SUBCLASS FOR		// GRAPHIC ELEMENT RENDERING		ScriptHandler.callFunction( getRunTimeContext( ).getScriptHandler( ),				ScriptHandler.AFTER_DRAW_SERIES,				getSeries( ),				this );		getRunTimeContext( ).notifyStructureChange( IStructureDefinitionListener.AFTER_DRAW_SERIES,				getSeries( ) );		if ( bLastInSequence )		{			try			{				getDeferredCache( ).flush( ); // FLUSH DEFERRED CACHE			}			catch ( ChartException ex ) // NOTE: RENDERING EXCEPTION ALREADY			// BEING THROWN			{				throw new ChartException( ChartEnginePlugin.ID,						ChartException.RENDERING,						ex );			}			// SETUP AXIS ARRAY			final PlotWith2DAxes pwa = (PlotWith2DAxes) getComputations( );			final AllAxes aax = pwa.getAxes( );			final OneAxis[] oaxa = new OneAxis[2 + aax.getOverlayCount( )];			oaxa[0] = aax.getPrimaryBase( );			oaxa[1] = aax.getPrimaryOrthogonal( );			for ( int i = 0; i < aax.getOverlayCount( ); i++ )			{				oaxa[2 + i] = aax.getOverlay( i );			}			Bounds bo = pwa.getPlotBounds( );			// RENDER MARKER LINES			renderMarkerLines( oaxa, bo );			// RENDER AXIS LABELS LAST			renderAxesLabels( ipr, p );		}	}