object3D.prepareZSort( );
	private boolean translate3DEvent( Object obj, Matrix transMatrix,			double xOffset, double yOffset )	{		if ( obj instanceof Polygon3DRenderEvent )		{			Polygon3DRenderEvent p3dre = (Polygon3DRenderEvent) obj;			Object3D object3D = p3dre.getObject3D( );			object3D.transform( transMatrix );			object3D.transform( M2V_MATRIX );			object3D.prepareZSort( );			boolean behind = checkBehindFace( p3dre );			p3dre.setBehind( behind );			if ( p3dre.isBehind( ) )			{				// optimize for culling face.				return false;			}			double cosValue = object3D.getNormal( ).cosineValue( LDR );			if ( p3dre.isDoubleSided( ) )			{				cosValue = -Math.abs( cosValue );			}			double brightnessRatio = ( 1 - cosValue ) / 2d;			p3dre.setBrightness( brightnessRatio );			object3D.clip( this );			if ( object3D.getVectors( ).length < 3 )			{				return false;			}			object3D.perspective( PERSPECTIVE_VALUE );			object3D.transform( V2C_MATRIX );			p3dre.prepare2D( xOffset, yOffset );			return true;		}		else if ( obj instanceof Line3DRenderEvent )		{			Line3DRenderEvent l3dre = (Line3DRenderEvent) obj;			if ( l3dre.getLineAttributes( ) == null					|| !l3dre.getLineAttributes( ).isSetVisible( )					|| !l3dre.getLineAttributes( ).isVisible( ) )			{				return false;			}			Object3D object3D = l3dre.getObject3D( );			object3D.transform( transMatrix );			object3D.transform( M2V_MATRIX );			object3D.clip( this );			object3D.prepareZSort( );			if ( object3D.getVectors( ).length < 2 )			{				return false;			}			object3D.perspective( PERSPECTIVE_VALUE );			object3D.transform( V2C_MATRIX );			l3dre.prepare2D( xOffset, yOffset );		}		else if ( obj instanceof Text3DRenderEvent )		{			Text3DRenderEvent t3dre = (Text3DRenderEvent) obj;			Object3D object3D = t3dre.getObject3D( );			object3D.transform( transMatrix );			object3D.transform( M2V_MATRIX );			object3D.prepareZSort( );			object3D.clip( this );			if ( object3D.getVectors( ).length < 1 )			{				return false;			}			object3D.perspective( PERSPECTIVE_VALUE );			object3D.transform( V2C_MATRIX );			t3dre.prepare2D( xOffset, yOffset );		}		else if ( obj instanceof Oval3DRenderEvent )		{			Oval3DRenderEvent o3dre = (Oval3DRenderEvent) obj;			Object3D object3D = o3dre.getObject3D( );			object3D.transform( transMatrix );			object3D.transform( M2V_MATRIX );			object3D.prepareZSort( );			object3D.clip( this );			if ( object3D.getVectors( ).length < 3 )			{				return false;			}			object3D.perspective( PERSPECTIVE_VALUE );			object3D.transform( V2C_MATRIX );			o3dre.prepare2D( xOffset, yOffset );		}		else if ( obj instanceof Image3DRenderEvent )		{			Image3DRenderEvent i3dre = (Image3DRenderEvent) obj;			Object3D object3D = i3dre.getObject3D( );			object3D.transform( transMatrix );			object3D.transform( M2V_MATRIX );			object3D.prepareZSort( );			object3D.clip( this );			if ( object3D.getVectors( ).length < 1 )			{				return false;			}			object3D.perspective( PERSPECTIVE_VALUE );			object3D.transform( V2C_MATRIX );			i3dre.prepare2D( xOffset, yOffset );		}		else if ( obj instanceof Arc3DRenderEvent )		{			Arc3DRenderEvent a3dre = (Arc3DRenderEvent) obj;			Object3D object3D = a3dre.getObject3D( );			object3D.transform( transMatrix );			object3D.transform( M2V_MATRIX );			object3D.prepareZSort( );			object3D.clip( this );			if ( object3D.getVectors( ).length < 1 )			{				return false;			}			object3D.perspective( PERSPECTIVE_VALUE );			object3D.transform( V2C_MATRIX );			a3dre.prepare2D( xOffset, yOffset );		}		else if ( obj instanceof Area3DRenderEvent )		{			Area3DRenderEvent a3dre = (Area3DRenderEvent) obj;			for ( Iterator itr = a3dre.iterator( ); itr.hasNext( ); )			{				PrimitiveRenderEvent pre = (PrimitiveRenderEvent)itr.next( );				if ( pre instanceof I3DRenderEvent )				{					try					{						Object3D object3D = ( (I3DRenderEvent) pre ).getObject3D( );						object3D.transform( transMatrix );						object3D.transform( M2V_MATRIX );						object3D.prepareZSort( );						object3D.clip( this );												if ( object3D.getVectors( ).length < 1 )						{							itr.remove( );							continue;						}						object3D.perspective( PERSPECTIVE_VALUE );						object3D.transform( V2C_MATRIX );					}					catch ( ChartException ex )					{						logger.log( ex );						continue;					}				}			}			a3dre.prepare2D( xOffset, yOffset );		}		return true;	}