double offset = Math.floor( 0.5 * Math.sqrt( 2.0 ) * iSize ) + 1;
double offset = Math.floor( 0.5 * iSize ) + 1;
	private void drawFourDiamonds( IPrimitiveRenderer ipr )			throws ChartException	{		double offset = Math.floor( 0.5 * Math.sqrt( 2.0 ) * iSize ) + 1;		if ( bRendering3D )		{			final Location3D[] loa = new Location3D[4];			loa[0] = Location3DImpl.create( lo3d.getX( ) - 2 * offset,					lo3d.getY( ),					lo3d.getZ( ) );			loa[1] = Location3DImpl.create( lo3d.getX( ), lo3d.getY( )					+ 2					* offset, lo3d.getZ( ) );			loa[2] = Location3DImpl.create( lo3d.getX( ) + 2 * offset,					lo3d.getY( ),					lo3d.getZ( ) );			loa[3] = Location3DImpl.create( lo3d.getX( ), lo3d.getY( )					- 2					* offset, lo3d.getZ( ) );			final Polygon3DRenderEvent pre = (Polygon3DRenderEvent) ( (EventObjectCache) ipr ).getEventObject( oSource,					Polygon3DRenderEvent.class );			pre.setPoints3D( loa );			pre.setDoubleSided( true );			preCopy = pre.copy( );			final Location3D[] loa1 = new Location3D[4];			loa1[0] = Location3DImpl.create( lo3d.getX( ) - offset + 1,					lo3d.getY( ) - offset,					lo3d.getZ( ) );			loa1[1] = Location3DImpl.create( lo3d.getX( ),					lo3d.getY( ) - 1,					lo3d.getZ( ) );			loa1[2] = Location3DImpl.create( lo3d.getX( ) + offset - 1,					lo3d.getY( ) - offset,					lo3d.getZ( ) );			loa1[3] = Location3DImpl.create( lo3d.getX( ), lo3d.getY( )					- 2					* offset					+ 1, lo3d.getZ( ) );			final Polygon3DRenderEvent pre1 = (Polygon3DRenderEvent) ( (EventObjectCache) ipr ).getEventObject( oSource,					Polygon3DRenderEvent.class );			pre1.setPoints3D( loa1 );			pre1.setDoubleSided( true );			pre1.setBackground( paletteEntry );			pre1.setOutline( la );			final Location3D[] loa2 = new Location3D[4];			loa2[0] = Location3DImpl.create( lo3d.getX( ) + 1,					lo3d.getY( ),					lo3d.getZ( ) );			loa2[1] = Location3DImpl.create( lo3d.getX( ) + offset, lo3d.getY( )					+ offset					- 1, lo3d.getZ( ) );			loa2[2] = Location3DImpl.create( lo3d.getX( ) + 2 * offset - 1,					lo3d.getY( ),					lo3d.getZ( ) );			loa2[3] = Location3DImpl.create( lo3d.getX( ) + offset, lo3d.getY( )					- offset					+ 1, lo3d.getZ( ) );			final Location3D[] loa3 = new Location3D[4];			loa3[0] = Location3DImpl.create( lo3d.getX( ) - offset + 1,					lo3d.getY( ) + offset,					lo3d.getZ( ) );			loa3[1] = Location3DImpl.create( lo3d.getX( ), lo3d.getY( )					+ 2					* offset					- 1, lo3d.getZ( ) );			loa3[2] = Location3DImpl.create( lo3d.getX( ) + offset - 1,					lo3d.getY( ) + offset,					lo3d.getZ( ) );			loa3[3] = Location3DImpl.create( lo3d.getX( ),					lo3d.getY( ) + 1,					lo3d.getZ( ) );			final Location3D[] loa4 = new Location3D[4];			loa4[0] = Location3DImpl.create( lo3d.getX( ) - 2 * offset + 1,					lo3d.getY( ),					lo3d.getZ( ) );			loa4[1] = Location3DImpl.create( lo3d.getX( ) - offset, lo3d.getY( )					+ offset					- 1, lo3d.getZ( ) );			loa4[2] = Location3DImpl.create( lo3d.getX( ) - 1,					lo3d.getY( ),					lo3d.getZ( ) );			loa4[3] = Location3DImpl.create( lo3d.getX( ) - offset, lo3d.getY( )					- offset					+ 1, lo3d.getZ( ) );			dc.addPlane( pre1, PrimitiveRenderEvent.FILL					| PrimitiveRenderEvent.DRAW );			pre1.setPoints3D( loa2 );			dc.addPlane( pre1, PrimitiveRenderEvent.FILL					| PrimitiveRenderEvent.DRAW );			pre1.setPoints3D( loa3 );			dc.addPlane( pre1, PrimitiveRenderEvent.FILL					| PrimitiveRenderEvent.DRAW );			pre1.setPoints3D( loa4 );			dc.addPlane( pre1, PrimitiveRenderEvent.FILL					| PrimitiveRenderEvent.DRAW );		}		else		{			final Location[] loa = new Location[4];			loa[0] = LocationImpl.create( lo.getX( ) - 2 * offset, lo.getY( ) );			loa[1] = LocationImpl.create( lo.getX( ), lo.getY( ) + 2 * offset );			loa[2] = LocationImpl.create( lo.getX( ) + 2 * offset, lo.getY( ) );			loa[3] = LocationImpl.create( lo.getX( ), lo.getY( ) - 2 * offset );			final PolygonRenderEvent pre = (PolygonRenderEvent) ( (EventObjectCache) ipr ).getEventObject( oSource,					PolygonRenderEvent.class );			pre.setPoints( loa );			preCopy = pre.copy( );			final Location[] loa1 = new Location[4];			loa1[0] = LocationImpl.create( lo.getX( ) - offset + 1, lo.getY( )					- offset );			loa1[1] = LocationImpl.create( lo.getX( ), lo.getY( ) - 1 );			loa1[2] = LocationImpl.create( lo.getX( ) + offset - 1, lo.getY( )					- offset );			loa1[3] = LocationImpl.create( lo.getX( ), lo.getY( )					- 2					* offset					+ 1 );			final PolygonRenderEvent pre1 = (PolygonRenderEvent) ( (EventObjectCache) ipr ).getEventObject( oSource,					PolygonRenderEvent.class );			pre1.setPoints( loa1 );			pre1.setBackground( paletteEntry );			pre1.setOutline( la );			final Location[] loa2 = new Location[4];			loa2[0] = LocationImpl.create( lo.getX( ) + 1, lo.getY( ) );			loa2[1] = LocationImpl.create( lo.getX( ) + offset, lo.getY( )					+ offset					- 1 );			loa2[2] = LocationImpl.create( lo.getX( ) + 2 * offset - 1,					lo.getY( ) );			loa2[3] = LocationImpl.create( lo.getX( ) + offset, lo.getY( )					- offset					+ 1 );			final Location[] loa3 = new Location[4];			loa3[0] = LocationImpl.create( lo.getX( ) - offset + 1, lo.getY( )					+ offset );			loa3[1] = LocationImpl.create( lo.getX( ), lo.getY( )					+ 2					* offset					- 1 );			loa3[2] = LocationImpl.create( lo.getX( ) + offset - 1, lo.getY( )					+ offset );			loa3[3] = LocationImpl.create( lo.getX( ), lo.getY( ) + 1 );			final Location[] loa4 = new Location[4];			loa4[0] = LocationImpl.create( lo.getX( ) - 2 * offset + 1,					lo.getY( ) );			loa4[1] = LocationImpl.create( lo.getX( ) - offset, lo.getY( )					+ offset					- 1 );			loa4[2] = LocationImpl.create( lo.getX( ) - 1, lo.getY( ) );			loa4[3] = LocationImpl.create( lo.getX( ) - offset, lo.getY( )					- offset					+ 1 );			if ( bDeferred )			{				dc.addMarker( pre1, PrimitiveRenderEvent.FILL						| PrimitiveRenderEvent.DRAW );				pre1.setPoints( loa2 );				dc.addMarker( pre1, PrimitiveRenderEvent.FILL						| PrimitiveRenderEvent.DRAW );				pre1.setPoints( loa3 );				dc.addMarker( pre1, PrimitiveRenderEvent.FILL						| PrimitiveRenderEvent.DRAW );				pre1.setPoints( loa4 );				dc.addMarker( pre1, PrimitiveRenderEvent.FILL						| PrimitiveRenderEvent.DRAW );			}			else			{				ipr.fillPolygon( pre1 );				ipr.drawPolygon( pre1 );				pre1.setPoints( loa2 );				ipr.fillPolygon( pre1 );				ipr.drawPolygon( pre1 );				pre1.setPoints( loa3 );				ipr.fillPolygon( pre1 );				ipr.drawPolygon( pre1 );				pre1.setPoints( loa4 );				ipr.fillPolygon( pre1 );				ipr.drawPolygon( pre1 );			}		}	}