int iDirection = sc.getDirection( ) == IConstants.FORWARD ? -1
int iDirection = sc.getDirection( ) != IConstants.FORWARD ? -1
	protected void renderBackground( IPrimitiveRenderer ipr, Plot p )			throws ChartException	{		// PLOT BLOCK STUFF		super.renderBackground( ipr, p );		final ChartWithAxes cwa = (ChartWithAxes) getModel( );		final PlotWithAxes pwa = (PlotWithAxes) getComputations( );		// PLOT CLIENT AREA		final ClientArea ca = p.getClientArea( );		Bounds bo = pwa.getPlotBounds( );		final RectangleRenderEvent rre = (RectangleRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),				RectangleRenderEvent.class );		// render client area shadow		if ( ca.getShadowColor( ) != null )		{			rre.setBounds( bo.translateInstance( 3, 3 ) );			rre.setBackground( ca.getShadowColor( ) );			ipr.fillRectangle( rre );		}		// render client area		rre.setBounds( bo );		rre.setOutline( ca.getOutline( ) );		rre.setBackground( ca.getBackground( ) );		ipr.fillRectangle( rre );		// NOW THAT THE AXES HAVE BEEN COMPUTED, FILL THE INTERNAL PLOT AREA		double dSeriesThickness = pwa.getSeriesThickness( );		double[] daX = {				bo.getLeft( ) - dSeriesThickness,				bo.getLeft( ) + bo.getWidth( ) - dSeriesThickness		};		double[] daY = {				bo.getTop( ) + bo.getHeight( ) + dSeriesThickness,				bo.getTop( ) + dSeriesThickness		};		final AllAxes aax = pwa.getAxes( );		AutoScale scPrimaryBase = null;		AutoScale scPrimaryOrthogonal = null;		AutoScale scAncillaryBase = null;		double dXStart = 0;		double dYStart = 0;		double dZStart = 0;		int baseTickCount = 0;		int ancillaryTickCount = 0;		int orthogonalTickCount = 0;		double xStep = 0;		double yStep = 0;		double zStep = 0;		if ( isDimension3D( ) )		{			scPrimaryBase = aax.getPrimaryBase( ).getScale( );			scPrimaryOrthogonal = aax.getPrimaryOrthogonal( ).getScale( );			scAncillaryBase = aax.getAncillaryBase( ).getScale( );			dXStart = scPrimaryBase.getStart( );			dYStart = scPrimaryOrthogonal.getStart( );			dZStart = scAncillaryBase.getStart( );			baseTickCount = scPrimaryBase.getTickCordinates( ).length;			ancillaryTickCount = scAncillaryBase.getTickCordinates( ).length;			orthogonalTickCount = scPrimaryOrthogonal.getTickCordinates( ).length;			xStep = scPrimaryBase.getUnitSize( );			yStep = scPrimaryOrthogonal.getUnitSize( );			zStep = scAncillaryBase.getUnitSize( );		}		if ( pwa.getDimension( ) == IConstants.TWO_5_D )		{			Location[] loa = null;			// DRAW THE LEFT WALL			if ( cwa.getWallFill( ) == null )			{				renderPlane( ipr,						StructureSource.createPlot( p ),						new Location[]{								LocationImpl.create( daX[0], daY[0] ),								LocationImpl.create( daX[0], daY[1] )						},						ca.getBackground( ),						ca.getOutline( ),						cwa.getDimension( ),						dSeriesThickness,						false );			}			else			{				loa = new Location[4];				loa[0] = LocationImpl.create( daX[0], daY[0] );				loa[1] = LocationImpl.create( daX[0], daY[1] );				loa[2] = LocationImpl.create( daX[0] + dSeriesThickness, daY[1]						- dSeriesThickness );				loa[3] = LocationImpl.create( daX[0] + dSeriesThickness, daY[0]						- dSeriesThickness );				final PolygonRenderEvent pre = (PolygonRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),						PolygonRenderEvent.class );				pre.setPoints( loa );				pre.setBackground( cwa.getWallFill( ) );				pre.setOutline( ca.getOutline( ) );				ipr.fillPolygon( pre );				ipr.drawPolygon( pre );			}			// DRAW THE FLOOR			if ( cwa.getFloorFill( ) == null )			{				renderPlane( ipr,						StructureSource.createPlot( p ),						new Location[]{								LocationImpl.create( daX[0], daY[0] ),								LocationImpl.create( daX[1], daY[0] )						},						ca.getBackground( ),						ca.getOutline( ),						cwa.getDimension( ),						dSeriesThickness,						false );			}			else			{				if ( loa == null )				{					loa = new Location[4];				}				loa[0] = LocationImpl.create( daX[0], daY[0] );				loa[1] = LocationImpl.create( daX[1], daY[0] );				loa[2] = LocationImpl.create( daX[1] + dSeriesThickness, daY[0]						- dSeriesThickness );				loa[3] = LocationImpl.create( daX[0] + dSeriesThickness, daY[0]						- dSeriesThickness );				final PolygonRenderEvent pre = (PolygonRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),						PolygonRenderEvent.class );				pre.setPoints( loa );				pre.setBackground( cwa.getFloorFill( ) );				pre.setOutline( ca.getOutline( ) );				ipr.fillPolygon( pre );				ipr.drawPolygon( pre );			}		}		else if ( pwa.getDimension( ) == IConstants.THREE_D )		{			Location3D[] loa = null;			final Polygon3DRenderEvent pre = (Polygon3DRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),					Polygon3DRenderEvent.class );			pre.setDoubleSided( true );			// DRAW THE WALL			if ( ( cwa.getWallFill( ) instanceof ColorDefinition && ( (ColorDefinition) cwa.getWallFill( ) ).getTransparency( ) > 0 )					|| ( !( cwa.getWallFill( ) instanceof ColorDefinition ) && cwa.getWallFill( ) != null ) )			{				loa = new Location3D[4];				// Left Wall				// split to small planes to render.				for ( int i = 0; i < orthogonalTickCount - 1; i++ )				{					for ( int j = 0; j < ancillaryTickCount - 1; j++ )					{						loa[0] = Location3DImpl.create( dXStart, dYStart								+ yStep								* i, dZStart + zStep * j );						loa[1] = Location3DImpl.create( dXStart, dYStart								+ ( i + 1 )								* yStep, dZStart + j * zStep );						loa[2] = Location3DImpl.create( dXStart, dYStart								+ ( i + 1 )								* yStep, dZStart + ( j + 1 ) * zStep );						loa[3] = Location3DImpl.create( dXStart, dYStart								+ i								* yStep, dZStart + ( j + 1 ) * zStep );						pre.setPoints3D( loa );						pre.setBackground( cwa.getWallFill( ) );						pre.setOutline( ca.getOutline( ) );						getDeferredCache( ).addPlane( pre,								PrimitiveRenderEvent.DRAW										| PrimitiveRenderEvent.FILL );					}				}				leftWallFill = true;				// Right Wall				// split to small planes to render.				for ( int i = 0; i < orthogonalTickCount - 1; i++ )				{					for ( int j = 0; j < baseTickCount - 1; j++ )					{						loa[0] = Location3DImpl.create( dXStart + j * xStep,								dYStart + i * yStep,								dZStart );						loa[1] = Location3DImpl.create( dXStart								+ ( j + 1 )								* xStep, dYStart + i * yStep, dZStart );						loa[2] = Location3DImpl.create( dXStart								+ ( j + 1 )								* xStep, dYStart + ( i + 1 ) * yStep, dZStart );						loa[3] = Location3DImpl.create( dXStart + j * xStep,								dYStart + ( i + 1 ) * yStep,								dZStart );						pre.setPoints3D( loa );						pre.setBackground( cwa.getWallFill( ) );						pre.setOutline( ca.getOutline( ) );						getDeferredCache( ).addPlane( pre,								PrimitiveRenderEvent.DRAW										| PrimitiveRenderEvent.FILL );					}				}				rightWallFill = true;			}			// DRAW THE FLOOR			if ( ( cwa.getFloorFill( ) instanceof ColorDefinition && ( (ColorDefinition) cwa.getFloorFill( ) ).getTransparency( ) > 0 )					|| ( !( cwa.getFloorFill( ) instanceof ColorDefinition ) && cwa.getFloorFill( ) != null ) )			{				if ( loa == null )				{					loa = new Location3D[4];				}				// split to small planes to render.				for ( int i = 0; i < baseTickCount - 1; i++ )				{					for ( int j = 0; j < ancillaryTickCount - 1; j++ )					{						loa[0] = Location3DImpl.create( dXStart + i * xStep,								dYStart,								dZStart + j * zStep );						loa[1] = Location3DImpl.create( dXStart + i * xStep,								dYStart,								dZStart + ( j + 1 ) * zStep );						loa[2] = Location3DImpl.create( dXStart								+ ( i + 1 )								* xStep, dYStart, dZStart + ( j + 1 ) * zStep );						loa[3] = Location3DImpl.create( dXStart								+ ( i + 1 )								* xStep, dYStart, dZStart + j * zStep );						pre.setPoints3D( loa );						pre.setBackground( cwa.getFloorFill( ) );						pre.setOutline( ca.getOutline( ) );						getDeferredCache( ).addPlane( pre,								PrimitiveRenderEvent.DRAW										| PrimitiveRenderEvent.FILL );					}				}				floorFill = true;			}		}		// SETUP AXIS ARRAY		final OneAxis[] oaxa = new OneAxis[2				+ aax.getOverlayCount( )				+ ( aax.getAncillaryBase( ) != null ? 1 : 0 )];		oaxa[0] = aax.getPrimaryBase( );		oaxa[1] = aax.getPrimaryOrthogonal( );		for ( int i = 0; i < aax.getOverlayCount( ); i++ )		{			oaxa[2 + i] = aax.getOverlay( i );		}		if ( aax.getAncillaryBase( ) != null )		{			oaxa[2 + aax.getOverlayCount( )] = aax.getAncillaryBase( );		}		// RENDER MARKER RANGES (MARKER LINES ARE DRAWN LATER)		renderMarkerRanges( oaxa, bo );		// RENDER GRID LINES (MAJOR=DONE; MINOR=DONE)		double x = 0, y = 0;		LineAttributes lia;		LineRenderEvent lre;		final Insets insCA = aax.getInsets( );		// RENDER MINOR GRID LINES FIRST		int iCount;		Grid g;		double[] doaMinor = null;		for ( int i = 0; i < oaxa.length; i++ )		{			g = oaxa[i].getGrid( );			iCount = g.getMinorCountPerMajor( );			lia = oaxa[i].getGrid( ).getLineAttributes( IConstants.MINOR );			if ( lia == null || !lia.isSetStyle( ) || !lia.isVisible( ) )			{				continue;			}			if ( iCount <= 0 )			{				throw new ChartException( ChartEnginePlugin.ID,						ChartException.RENDERING,						"exception.cannot.split.major", //$NON-NLS-1$						new Object[]{							new Integer( iCount )						},						ResourceBundle.getBundle( Messages.ENGINE,								getRunTimeContext( ).getULocale( ).toLocale( ) ) );			}			AutoScale sc = oaxa[i].getScale( );			doaMinor = sc.getMinorCoordinates( iCount );			if ( isDimension3D( ) )			{				Line3DRenderEvent lre3d = (Line3DRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),						Line3DRenderEvent.class );				lre3d.setLineAttributes( lia );				switch ( oaxa[i].getAxisType( ) )				{					case IConstants.BASE_AXIS :						double[] xa = scPrimaryBase.getTickCordinates( );						if ( floorFill )						{							for ( int k = 0; k < xa.length - 1; k++ )							{								for ( int j = 0; j < doaMinor.length - 1; j++ )								{									for ( int n = 0; n < ancillaryTickCount - 1; n++ )									{										lre3d.setStart3D( Location3DImpl.create( xa[k]												+ doaMinor[j],												dYStart,												dZStart + n * zStep ) );										lre3d.setEnd3D( Location3DImpl.create( xa[k]												+ doaMinor[j],												dYStart,												dZStart + ( n + 1 ) * zStep ) );										getDeferredCache( ).addLine( lre3d );									}								}							}						}						if ( rightWallFill )						{							for ( int k = 0; k < xa.length - 1; k++ )							{								for ( int j = 0; j < doaMinor.length - 1; j++ )								{									for ( int n = 0; n < orthogonalTickCount - 1; n++ )									{										lre3d.setStart3D( Location3DImpl.create( xa[k]												+ doaMinor[j],												dYStart + n * yStep,												dZStart ) );										lre3d.setEnd3D( Location3DImpl.create( xa[k]												+ doaMinor[j],												dYStart + ( n + 1 ) * yStep,												dZStart ) );										getDeferredCache( ).addLine( lre3d );									}								}							}						}						break;					case IConstants.ORTHOGONAL_AXIS :						double[] ya = scPrimaryOrthogonal.getTickCordinates( );						if ( leftWallFill )						{							for ( int k = 0; k < ya.length - 1; k++ )							{								for ( int j = 0; j < doaMinor.length - 1; j++ )								{									for ( int n = 0; n < ancillaryTickCount - 1; n++ )									{										lre3d.setStart3D( Location3DImpl.create( dXStart,												ya[k] + doaMinor[j],												dZStart + n * zStep ) );										lre3d.setEnd3D( Location3DImpl.create( dXStart,												ya[k] + doaMinor[j],												dZStart + ( n + 1 ) * zStep ) );										getDeferredCache( ).addLine( lre3d );									}								}							}						}						if ( rightWallFill )						{							for ( int k = 0; k < ya.length - 1; k++ )							{								for ( int j = 0; j < doaMinor.length - 1; j++ )								{									for ( int n = 0; n < baseTickCount - 1; n++ )									{										lre3d.setStart3D( Location3DImpl.create( dXStart												+ n												* xStep,												ya[k] + doaMinor[j],												dZStart ) );										lre3d.setEnd3D( Location3DImpl.create( dXStart												+ ( n + 1 )												* xStep,												ya[k] + doaMinor[j],												dZStart ) );										getDeferredCache( ).addLine( lre3d );									}								}							}						}						break;					case IConstants.ANCILLARY_AXIS :						double[] za = scAncillaryBase.getTickCordinates( );						if ( leftWallFill )						{							for ( int k = 0; k < za.length - 1; k++ )							{								for ( int j = 0; j < doaMinor.length - 1; j++ )								{									for ( int n = 0; n < orthogonalTickCount - 1; n++ )									{										lre3d.setStart3D( Location3DImpl.create( dXStart,												dYStart + n * yStep,												za[k] + doaMinor[j] ) );										lre3d.setEnd3D( Location3DImpl.create( dXStart,												dYStart + ( n + 1 ) * yStep,												za[k] + doaMinor[j] ) );										getDeferredCache( ).addLine( lre3d );									}								}							}						}						if ( floorFill )						{							for ( int k = 0; k < za.length - 1; k++ )							{								for ( int j = 0; j < doaMinor.length - 1; j++ )								{									for ( int n = 0; n < baseTickCount - 1; n++ )									{										lre3d.setStart3D( Location3DImpl.create( dXStart												+ n												* xStep,												dYStart,												za[k] + doaMinor[j] ) );										lre3d.setEnd3D( Location3DImpl.create( dXStart												+ ( n + 1 )												* xStep,												dYStart,												za[k] + doaMinor[j] ) );										getDeferredCache( ).addLine( lre3d );									}								}							}						}						break;					default :						break;				}			}			else if ( oaxa[i].getOrientation( ) == IConstants.HORIZONTAL )			{				int iDirection = sc.getDirection( ) == IConstants.BACKWARD ? -1						: 1;				double[] da = sc.getTickCordinates( );				double dY2 = bo.getTop( ) + 1, dY1 = bo.getTop( )						+ bo.getHeight( )						- 2;				if ( pwa.getDimension( ) == IConstants.TWO_5_D )				{					for ( int j = 0; j < da.length - 1; j++ )					{						x = da[j];						for ( int k = 0; k < doaMinor.length; k++ )						{							lre = (LineRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),									LineRenderEvent.class );							lre.setLineAttributes( lia );							lre.setStart( LocationImpl.create( x									+ iDirection									* doaMinor[k], dY1									+ pwa.getSeriesThickness( ) ) );							lre.setEnd( LocationImpl.create( x									+ iDirection									* doaMinor[k]									+ pwa.getSeriesThickness( ), dY1 ) );							ipr.drawLine( lre );						}					}				}				for ( int j = 0; j < da.length - 1; j++ )				{					x = da[j];					if ( pwa.getDimension( ) == IConstants.TWO_5_D )					{						x += pwa.getSeriesThickness( );					}					for ( int k = 0; k < doaMinor.length; k++ )					{						lre = (LineRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),								LineRenderEvent.class );						lre.setLineAttributes( lia );						lre.setStart( LocationImpl.create( x								+ iDirection								* doaMinor[k], dY1 ) );						lre.setEnd( LocationImpl.create( x								+ iDirection								* doaMinor[k], dY2 ) );						ipr.drawLine( lre );					}				}			}			else if ( oaxa[i].getOrientation( ) == IConstants.VERTICAL )			{				int iDirection = sc.getDirection( ) == IConstants.FORWARD ? -1						: 1;				double[] da = sc.getTickCordinates( );				double dX1 = bo.getLeft( ) + 1, dX2 = bo.getLeft( )						+ bo.getWidth( )						- 2;				if ( pwa.getDimension( ) == IConstants.TWO_5_D )				{					for ( int j = 0; j < da.length - 1; j++ )					{						y = ( da[j] - pwa.getSeriesThickness( ) );						for ( int k = 0; k < doaMinor.length; k++ )						{							lre = (LineRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),									LineRenderEvent.class );							lre.setLineAttributes( lia );							lre.setStart( LocationImpl.create( dX1, y									- iDirection									* doaMinor[k] ) );							lre.setEnd( LocationImpl.create( dX1									- pwa.getSeriesThickness( ), y									- iDirection									* doaMinor[k]									+ pwa.getSeriesThickness( ) ) );							ipr.drawLine( lre );						}					}				}				for ( int j = 0; j < da.length - 1; j++ )				{					y = da[j];					if ( pwa.getDimension( ) == IConstants.TWO_5_D )					{						y -= pwa.getSeriesThickness( );					}					for ( int k = 0; k < doaMinor.length; k++ )					{						lre = (LineRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),								LineRenderEvent.class );						lre.setLineAttributes( lia );						lre.setStart( LocationImpl.create( dX1, y								- iDirection								* doaMinor[k] ) );						lre.setEnd( LocationImpl.create( dX2, y								- iDirection								* doaMinor[k] ) );						ipr.drawLine( lre );					}				}			}		}		// RENDER MAJOR GRID LINES NEXT		for ( int i = 0; i < oaxa.length; i++ )		{			lia = oaxa[i].getGrid( ).getLineAttributes( IConstants.MAJOR );			if ( lia == null || !lia.isSetStyle( ) || !lia.isVisible( ) ) // GRID			// LINE			// UNDEFINED			{				continue;			}			AutoScale sc = oaxa[i].getScale( );			if ( isDimension3D( ) )			{				Line3DRenderEvent lre3d = (Line3DRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),						Line3DRenderEvent.class );				lre3d.setLineAttributes( lia );				switch ( oaxa[i].getAxisType( ) )				{					case IConstants.BASE_AXIS :						double[] xa = scPrimaryBase.getTickCordinates( );						if ( floorFill )						{							for ( int k = 0; k < xa.length; k++ )							{								for ( int j = 0; j < ancillaryTickCount - 1; j++ )								{									lre3d.setStart3D( Location3DImpl.create( xa[k],											dYStart,											dZStart + j * zStep ) );									lre3d.setEnd3D( Location3DImpl.create( xa[k],											dYStart,											dZStart + ( j + 1 ) * zStep ) );									getDeferredCache( ).addLine( lre3d );								}							}						}						if ( rightWallFill )						{							for ( int k = 0; k < xa.length; k++ )							{								for ( int j = 0; j < orthogonalTickCount - 1; j++ )								{									lre3d.setStart3D( Location3DImpl.create( xa[k],											dYStart + j * yStep,											dZStart ) );									lre3d.setEnd3D( Location3DImpl.create( xa[k],											dYStart + ( j + 1 ) * yStep,											dZStart ) );									getDeferredCache( ).addLine( lre3d );								}							}						}						break;					case IConstants.ORTHOGONAL_AXIS :						double[] ya = scPrimaryOrthogonal.getTickCordinates( );						if ( leftWallFill )						{							for ( int k = 0; k < ya.length; k++ )							{								for ( int j = 0; j < ancillaryTickCount - 1; j++ )								{									lre3d.setStart3D( Location3DImpl.create( dXStart,											ya[k],											dZStart + j * zStep ) );									lre3d.setEnd3D( Location3DImpl.create( dXStart,											ya[k],											dZStart + ( j + 1 ) * zStep ) );									getDeferredCache( ).addLine( lre3d );								}							}						}						if ( rightWallFill )						{							for ( int k = 0; k < ya.length; k++ )							{								for ( int j = 0; j < baseTickCount - 1; j++ )								{									lre3d.setStart3D( Location3DImpl.create( dXStart											+ j											* xStep,											ya[k],											dZStart ) );									lre3d.setEnd3D( Location3DImpl.create( dXStart											+ ( j + 1 )											* xStep,											ya[k],											dZStart ) );									getDeferredCache( ).addLine( lre3d );								}							}						}						break;					case IConstants.ANCILLARY_AXIS :						double[] za = scAncillaryBase.getTickCordinates( );						if ( leftWallFill )						{							for ( int k = 0; k < za.length; k++ )							{								for ( int j = 0; j < orthogonalTickCount - 1; j++ )								{									lre3d.setStart3D( Location3DImpl.create( dXStart,											dYStart + j * yStep,											za[k] ) );									lre3d.setEnd3D( Location3DImpl.create( dXStart,											dYStart + ( j + 1 ) * yStep,											za[k] ) );									getDeferredCache( ).addLine( lre3d );								}							}						}						if ( floorFill )						{							for ( int k = 0; k < za.length; k++ )							{								for ( int j = 0; j < baseTickCount - 1; j++ )								{									lre3d.setStart3D( Location3DImpl.create( dXStart											+ j											* xStep,											dYStart,											za[k] ) );									lre3d.setEnd3D( Location3DImpl.create( dXStart											+ ( j + 1 )											* xStep,											dYStart,											za[k] ) );									getDeferredCache( ).addLine( lre3d );								}							}						}						break;					default :						break;				}			}			else if ( oaxa[i].getOrientation( ) == IConstants.HORIZONTAL )			{				double[] da = sc.getTickCordinates( );				double dY2 = bo.getTop( ) + 1, dY1 = bo.getTop( )						+ bo.getHeight( )						- 2;				if ( pwa.getDimension( ) == IConstants.TWO_5_D )				{					for ( int j = 0; j < da.length; j++ )					{						if ( j == 0 && insCA.getBottom( ) < lia.getThickness( ) )							continue;						if ( j == da.length - 1								&& insCA.getTop( ) < lia.getThickness( ) )							continue;						x = da[j];						lre = (LineRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),								LineRenderEvent.class );						lre.setLineAttributes( lia );						lre.setStart( LocationImpl.create( x, dY1								+ pwa.getSeriesThickness( ) ) );						lre.setEnd( LocationImpl.create( x								+ pwa.getSeriesThickness( ), dY1 ) );						ipr.drawLine( lre );					}				}				for ( int j = 0; j < da.length; j++ )				{					if ( j == 0 && insCA.getBottom( ) < lia.getThickness( ) )						continue;					if ( j == da.length - 1							&& insCA.getTop( ) < lia.getThickness( ) )						continue;					x = da[j];					if ( pwa.getDimension( ) == IConstants.TWO_5_D )					{						x += pwa.getSeriesThickness( );					}					lre = (LineRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),							LineRenderEvent.class );					lre.setLineAttributes( lia );					lre.setStart( LocationImpl.create( x, dY1 ) );					lre.setEnd( LocationImpl.create( x, dY2 ) );					ipr.drawLine( lre );				}			}			else if ( oaxa[i].getOrientation( ) == IConstants.VERTICAL )			{				double[] da = sc.getTickCordinates( );				double dX1 = bo.getLeft( ) + 1, dX2 = bo.getLeft( )						+ bo.getWidth( )						- 2;				if ( pwa.getDimension( ) == IConstants.TWO_5_D )				{					for ( int j = 0; j < da.length; j++ )					{						if ( j == 0 && insCA.getLeft( ) < lia.getThickness( ) )							continue;						if ( j == da.length - 1								&& insCA.getRight( ) < lia.getThickness( ) )							continue;						y = ( da[j] - pwa.getSeriesThickness( ) );						lre = (LineRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),								LineRenderEvent.class );						lre.setLineAttributes( lia );						lre.setStart( LocationImpl.create( dX1, y ) );						lre.setEnd( LocationImpl.create( dX1								- pwa.getSeriesThickness( ), y								+ pwa.getSeriesThickness( ) ) );						ipr.drawLine( lre );					}				}				for ( int j = 0; j < da.length; j++ )				{					if ( j == 0 && insCA.getLeft( ) < lia.getThickness( ) )						continue;					if ( j == da.length - 1							&& insCA.getRight( ) < lia.getThickness( ) )						continue;					y = da[j];					if ( pwa.getDimension( ) == IConstants.TWO_5_D )					{						y -= pwa.getSeriesThickness( );					}					lre = (LineRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),							LineRenderEvent.class );					lre.setLineAttributes( lia );					lre.setStart( LocationImpl.create( dX1, y ) );					lre.setEnd( LocationImpl.create( dX2, y ) );					ipr.drawLine( lre );				}			}		}		if ( p.getClientArea( ).getOutline( ).isVisible( ) )		{			rre.setBounds( bo );			ipr.drawRectangle( rre );		}	}