Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

474 lines
17 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkRenderer.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkRenderer - abstract specification for renderers
// .SECTION Description
// vtkRenderer provides an abstract specification for renderers. A renderer
// is an object that controls the rendering process for objects. Rendering
// is the process of converting geometry, a specification for lights, and
// a camera view into an image. vtkRenderer also performs coordinate
// transformation between world coordinates, view coordinates (the computer
// graphics rendering coordinate system), and display coordinates (the
// actual screen coordinates on the display device). Certain advanced
// rendering features such as two-sided lighting can also be controlled.
// .SECTION See Also
// vtkRenderWindow vtkActor vtkCamera vtkLight vtkVolume
#ifndef __vtkRenderer_h
#define __vtkRenderer_h
#include "vtkViewport.h"
#include "vtkVolumeCollection.h" // Needed for access in inline members
#include "vtkActorCollection.h" // Needed for access in inline members
class vtkRenderWindow;
class vtkVolume;
class vtkCuller;
class vtkActor;
class vtkActor2D;
class vtkCamera;
class vtkLightCollection;
class vtkCullerCollection;
class vtkLight;
class VTK_RENDERING_EXPORT vtkRenderer : public vtkViewport
{
public:
vtkTypeRevisionMacro(vtkRenderer,vtkViewport);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Create a vtkRenderer with a black background, a white ambient light,
// two-sided lighting turned on, a viewport of (0,0,1,1), and backface
// culling turned off.
static vtkRenderer *New();
// Description:
// Add/Remove different types of props to the renderer.
// These methods are all synonyms to AddViewProp and RemoveViewProp.
// They are here for convenience and backwards compatibility.
void AddActor(vtkProp *p);
void AddVolume(vtkProp *p);
void RemoveActor(vtkProp *p);
void RemoveVolume(vtkProp *p);
// Description:
// Add a light to the list of lights.
void AddLight(vtkLight *);
// Description:
// Remove a light from the list of lights.
void RemoveLight(vtkLight *);
// Description:
// Return the collection of lights.
vtkLightCollection *GetLights();
// Description:
// Create and add a light to renderer.
void CreateLight(void);
// Description:
// Create a new Light sutible for use with this type of Renderer.
// For example, a vtkMesaRenderer should create a vtkMesaLight
// in this function. The default is to just call vtkLight::New.
virtual vtkLight *MakeLight();
// Description:
// Turn on/off two-sided lighting of surfaces. If two-sided lighting is
// off, then only the side of the surface facing the light(s) will be lit,
// and the other side dark. If two-sided lighting on, both sides of the
// surface will be lit.
vtkGetMacro(TwoSidedLighting,int);
vtkSetMacro(TwoSidedLighting,int);
vtkBooleanMacro(TwoSidedLighting,int);
// Description:
// Turn on/off the automatic repositioning of lights as the camera moves.
// If LightFollowCamera is on, lights that are designated as Headlights
// or CameraLights will be adjusted to move with this renderer's camera.
// If LightFollowCamera is off, the lights will not be adjusted.
//
// (Note: In previous versions of vtk, this light-tracking
// functionality was part of the interactors, not the renderer. For
// backwards compatibility, the older, more limited interactor
// behavior is enabled by default. To disable this mode, turn the
// interactor's LightFollowCamera flag OFF, and leave the renderer's
// LightFollowCamera flag ON.)
vtkSetMacro(LightFollowCamera,int);
vtkGetMacro(LightFollowCamera,int);
vtkBooleanMacro(LightFollowCamera,int);
// Description:
// Turn on/off a flag which disables the automatic light creation capability.
// Normally in VTK if no lights are associated with the renderer, then a light
// is automatically created. However, in special circumstances this feature is
// undesirable, so the following boolean is provided to disable automatic
// light creation. (Turn AutomaticLightCreation off if you do not want lights
// to be created.)
vtkGetMacro(AutomaticLightCreation,int);
vtkSetMacro(AutomaticLightCreation,int);
vtkBooleanMacro(AutomaticLightCreation,int);
// Description:
// Ask the lights in the scene that are not in world space
// (for instance, Headlights or CameraLights that are attached to the
// camera) to update their geometry to match the active camera.
virtual int UpdateLightsGeometryToFollowCamera(void);
// Description:
// Return the collection of volumes.
vtkVolumeCollection *GetVolumes();
// Description:
// Return any actors in this renderer.
vtkActorCollection *GetActors();
// Description:
// Specify the camera to use for this renderer.
void SetActiveCamera(vtkCamera *);
// Description:
// Get the current camera. If there is not camera assigned to the
// renderer already, a new one is created automatically.
// This does *not* reset the camera.
vtkCamera *GetActiveCamera();
// Description:
// Create a new Camera sutible for use with this type of Renderer.
// For example, a vtkMesaRenderer should create a vtkMesaCamera
// in this function. The default is to just call vtkCamera::New.
virtual vtkCamera *MakeCamera();
// Description:
// When this flag is off, the renderer will not erase the background
// or the Zbuffer. It is used to have overlapping renderers.
// Both the RenderWindow Erase and Render Erase must be on
// for the camera to clear the renderer. By default, Erase is on.
vtkSetMacro(Erase, int);
vtkGetMacro(Erase, int);
vtkBooleanMacro(Erase, int);
// Description:
// Add an culler to the list of cullers.
void AddCuller(vtkCuller *);
// Description:
// Remove an actor from the list of cullers.
void RemoveCuller(vtkCuller *);
// Description:
// Return the collection of cullers.
vtkCullerCollection *GetCullers();
// Description:
// Set the intensity of ambient lighting.
vtkSetVector3Macro(Ambient,double);
vtkGetVectorMacro(Ambient,double,3);
// Description:
// Set/Get the amount of time this renderer is allowed to spend
// rendering its scene. This is used by vtkLODActor's.
vtkSetMacro(AllocatedRenderTime,double);
virtual double GetAllocatedRenderTime();
// Description:
// Get the ratio between allocated time and actual render time.
// TimeFactor has been taken out of the render process.
// It is still computed in case someone finds it useful.
// It may be taken away in the future.
virtual double GetTimeFactor();
// Description:
// Create an image. This is a superclass method which will in turn
// call the DeviceRender method of Subclasses of vtkRenderer
virtual void Render();
// Description:
// Create an image. Subclasses of vtkRenderer must implement this method.
virtual void DeviceRender() =0;
// Description:
// Clear the image to the background color.
virtual void Clear() {};
// Description:
// Returns the number of visible actors.
int VisibleActorCount();
// Description:
// Returns the number of visible volumes.
int VisibleVolumeCount();
// Description:
// Compute the bounding box of all the visible props
// Used in ResetCamera() and ResetCameraClippingRange()
void ComputeVisiblePropBounds( double bounds[6] );
// Description:
// Wrapper-friendly version of ComputeVisiblePropBounds
double *ComputeVisiblePropBounds();
// Description:
// Reset the camera clipping range based on the bounds of the
// visible actors. This ensures that no props are cut off
void ResetCameraClippingRange();
// Description:
// Reset the camera clipping range based on a bounding box.
// This method is called from ResetCameraClippingRange()
void ResetCameraClippingRange( double bounds[6] );
void ResetCameraClippingRange( double xmin, double xmax,
double ymin, double ymax,
double zmin, double zmax);
// Description:
// Specify tolerance for near clipping plane distance to the camera as a
// percentage of the far clipping plane distance. By default this will be
// set to 0.01 for 16 bit zbuffers and 0.001 for higher depth z buffers
vtkSetClampMacro(NearClippingPlaneTolerance,double,0,0.99);
vtkGetMacro(NearClippingPlaneTolerance,double);
// Description:
// Automatically set up the camera based on the visible actors.
// The camera will reposition itself to view the center point of the actors,
// and move along its initial view plane normal (i.e., vector defined from
// camera position to focal point) so that all of the actors can be seen.
void ResetCamera();
// Description:
// Automatically set up the camera based on a specified bounding box
// (xmin,xmax, ymin,ymax, zmin,zmax). Camera will reposition itself so
// that its focal point is the center of the bounding box, and adjust its
// distance and position to preserve its initial view plane normal
// (i.e., vector defined from camera position to focal point). Note: is
// the view plane is parallel to the view up axis, the view up axis will
// be reset to one of the three coordinate axes.
void ResetCamera(double bounds[6]);
// Description:
// Alternative version of ResetCamera(bounds[6]);
void ResetCamera(double xmin, double xmax, double ymin, double ymax,
double zmin, double zmax);
// Description:
// Specify the rendering window in which to draw. This is automatically set
// when the renderer is created by MakeRenderer. The user probably
// shouldn't ever need to call this method.
void SetRenderWindow(vtkRenderWindow *);
vtkRenderWindow *GetRenderWindow() {return this->RenderWindow;};
virtual vtkWindow *GetVTKWindow();
// Description:
// Turn on/off using backing store. This may cause the re-rendering
// time to be slightly slower when the view changes. But it is
// much faster when the image has not changed, such as during an
// expose event.
vtkSetMacro(BackingStore,int);
vtkGetMacro(BackingStore,int);
vtkBooleanMacro(BackingStore,int);
// Description:
// Turn on/off interactive status. An interactive renderer is one that
// can receive events from an interactor. Should only be set if
// there are multiple renderers in the same section of the viewport.
vtkSetMacro(Interactive,int);
vtkGetMacro(Interactive,int);
vtkBooleanMacro(Interactive,int);
// Description:
// Set/Get the layer that this renderer belongs to. This is only used if
// there are layered renderers.
vtkSetMacro(Layer, int);
vtkGetMacro(Layer, int);
// Description:
// Returns a boolean indicating if this renderer is transparent. It is
// transparent if it is not in the deepest layer of its render window.
int Transparent();
// Description:
// Convert world point coordinates to view coordinates.
void WorldToView();
// Description:
// Convert view point coordinates to world coordinates.
void ViewToWorld();
virtual void ViewToWorld(double &wx, double &wy, double &wz);
// Description:
// Convert world point coordinates to view coordinates.
virtual void WorldToView(double &wx, double &wy, double &wz);
// Description:
// Given a pixel location, return the Z value. The z value is
// normalized (0,1) between the front and back clipping planes.
double GetZ (int x, int y);
// Description:
// Return the MTime of the renderer also considering its ivars.
unsigned long GetMTime();
// Description:
// Get the time required, in seconds, for the last Render call.
vtkGetMacro( LastRenderTimeInSeconds, double );
// Description:
// Should be used internally only during a render
// Get the number of props that were rendered using a
// RenderOpaqueGeometry or RenderTranslucentGeometry call.
// This is used to know if something is in the frame buffer.
vtkGetMacro( NumberOfPropsRendered, int );
// Description:
// Return the prop (via a vtkAssemblyPath) that has the highest z value
// at the given x, y position in the viewport. Basically, the top most
// prop that renders the pixel at selectionX, selectionY will be returned.
// If nothing was picked then NULL is returned. This method selects from
// the renderers Prop list.
vtkAssemblyPath* PickProp(double selectionX, double selectionY);
// Description:
// Do anything necessary between rendering the left and right viewpoints
// in a stereo render. Doesn't do anything except in the derived
// vtkIceTRenderer in ParaView.
virtual void StereoMidpoint() { return; };
// Description:
// Compute the aspect ratio of this renderer for the current tile. When
// tiled displays are used the aspect ratio of the renderer for a given
// tile may be diferent that the aspect ratio of the renderer when rendered
// in it entirity
double GetTiledAspectRatio();
protected:
vtkRenderer();
~vtkRenderer();
// internal method for doing a render for picking purposes
virtual void PickRender(vtkPropCollection *props);
virtual void PickGeometry();
vtkCamera *ActiveCamera;
vtkLight *CreatedLight;
vtkLightCollection *Lights;
vtkCullerCollection *Cullers;
vtkActorCollection *Actors;
vtkVolumeCollection *Volumes;
double Ambient[3];
vtkRenderWindow *RenderWindow;
double AllocatedRenderTime;
double TimeFactor;
int TwoSidedLighting;
int AutomaticLightCreation;
int BackingStore;
unsigned char *BackingImage;
int BackingStoreSize[2];
vtkTimeStamp RenderTime;
double LastRenderTimeInSeconds;
int LightFollowCamera;
// Allocate the time for each prop
void AllocateTime();
// Internal variables indicating the number of props
// that have been or will be rendered in each category.
int NumberOfPropsRendered;
// A temporary list of props used for culling, and traversal
// of all props when rendering
vtkProp **PropArray;
int PropArrayCount;
// A temporary list used for picking
vtkAssemblyPath **PathArray;
int PathArrayCount;
// Indicates if the renderer should receive events from an interactor.
// Typically only used in conjunction with transparent renderers.
int Interactive;
// Shows what layer this renderer belongs to. Only of interested when
// there are layered renderers.
int Layer;
// Holds the result of ComputeVisiblePropBounds so that it is visible from
// wrapped languages
double ComputedVisiblePropBounds[6];
// Description:
// Specifies the minimum distance of the near clipping
// plane as a percentage of the far clipping plane distance. Values below
// this threshold are clipped to NearClippingPlaneTolerance*range[1].
// Note that values which are too small may cause problems on systems
// with low z-buffer resolution.
double NearClippingPlaneTolerance;
// Description:
// When this flag is off, the renderer will not erase the background
// or the Zbuffer. It is used to have overlapping renderers.
// Both the RenderWindow Erase and Render Erase must be on
// for the camera to clear the renderer. By default, Erase is on.
int Erase;
// Description:
// Ask all props to update and draw any opaque and translucent
// geometry. This includes both vtkActors and vtkVolumes
// Returns the number of props that rendered geometry.
virtual int UpdateGeometry(void);
// Description:
// Ask the active camera to do whatever it needs to do prior to rendering.
// Creates a camera if none found active.
virtual int UpdateCamera(void);
// Description:
// Update the geometry of the lights in the scene that are not in world
// space (for instance, Headlights or CameraLights that are attached to the
// camera).
virtual int UpdateLightGeometry(void);
// Description:
// Ask all lights to load themselves into rendering pipeline.
// This method will return the actual number of lights that were on.
virtual int UpdateLights(void) {return 0;};
// Description:
// Get the current camera and eventually reset it if it gets created
// automatically (see GetActiveCamera).
// This is mainly used internally.
vtkCamera *GetActiveCameraAndEventuallyReset();
private:
vtkRenderer(const vtkRenderer&); // Not implemented.
void operator=(const vtkRenderer&); // Not implemented.
};
inline vtkLightCollection *vtkRenderer::GetLights() {
return this->Lights;
}
// Description:
// Get the list of cullers for this renderer.
inline vtkCullerCollection *vtkRenderer::GetCullers(){return this->Cullers;}
#endif