00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00040 #ifndef __vtkRenderer_h
00041 #define __vtkRenderer_h
00042
00043 #include "vtkViewport.h"
00044
00045 #include "vtkVolumeCollection.h"
00046 #include "vtkActorCollection.h"
00047
00048 class vtkRenderWindow;
00049 class vtkVolume;
00050 class vtkCuller;
00051 class vtkActor;
00052 class vtkActor2D;
00053 class vtkCamera;
00054 class vtkLightCollection;
00055 class vtkCullerCollection;
00056 class vtkLight;
00057
00058 class VTK_RENDERING_EXPORT vtkRenderer : public vtkViewport
00059 {
00060 public:
00061 vtkTypeRevisionMacro(vtkRenderer,vtkViewport);
00062 void PrintSelf(ostream& os, vtkIndent indent);
00063
00067 static vtkRenderer *New();
00068
00070
00073 void AddActor(vtkProp *p) {this->AddProp(p);};
00074 void AddVolume(vtkProp *p) {this->AddProp(p);};
00075 void RemoveActor(vtkProp *p) {this->Actors->RemoveItem(p);this->RemoveProp(p);};
00076 void RemoveVolume(vtkProp *p) {this->Volumes->RemoveItem(p);this->RemoveProp(p);};
00078
00080 void AddLight(vtkLight *);
00081
00083 void RemoveLight(vtkLight *);
00084
00086 vtkLightCollection *GetLights();
00087
00089 void CreateLight(void);
00090
00094 virtual vtkLight *MakeLight();
00095
00097
00101 vtkGetMacro(TwoSidedLighting,int);
00102 vtkSetMacro(TwoSidedLighting,int);
00103 vtkBooleanMacro(TwoSidedLighting,int);
00105
00107
00117 vtkSetMacro(LightFollowCamera,int);
00118 vtkGetMacro(LightFollowCamera,int);
00119 vtkBooleanMacro(LightFollowCamera,int);
00121
00123
00129 vtkGetMacro(AutomaticLightCreation,int);
00130 vtkSetMacro(AutomaticLightCreation,int);
00131 vtkBooleanMacro(AutomaticLightCreation,int);
00133
00137 virtual int UpdateLightsGeometryToFollowCamera(void);
00138
00140 vtkVolumeCollection *GetVolumes();
00141
00143 vtkActorCollection *GetActors();
00144
00146 void SetActiveCamera(vtkCamera *);
00147
00149 vtkCamera *GetActiveCamera();
00150
00154 virtual vtkCamera *MakeCamera();
00155
00157 void AddCuller(vtkCuller *);
00158
00160 void RemoveCuller(vtkCuller *);
00161
00163 vtkCullerCollection *GetCullers();
00164
00166
00167 vtkSetVector3Macro(Ambient,double);
00168 vtkGetVectorMacro(Ambient,double,3);
00170
00172
00174 vtkSetMacro(AllocatedRenderTime,double);
00175 virtual double GetAllocatedRenderTime();
00177
00182 virtual double GetTimeFactor();
00183
00186 virtual void Render();
00187
00190 virtual void DeviceRender() =0;
00191
00193 virtual void Clear() {};
00194
00196 int VisibleActorCount();
00197
00199 int VisibleVolumeCount();
00200
00203 void ComputeVisiblePropBounds( double bounds[6] );
00204
00206 double *ComputeVisiblePropBounds();
00207
00210 void ResetCameraClippingRange();
00211
00213
00215 void ResetCameraClippingRange( double bounds[6] );
00216 void ResetCameraClippingRange( double xmin, double xmax,
00217 double ymin, double ymax,
00218 double zmin, double zmax);
00220
00222
00224 vtkSetMacro(NearClippingPlaneTolerance,double);
00225 vtkGetMacro(NearClippingPlaneTolerance,double);
00227
00233 void ResetCamera();
00234
00242 void ResetCamera(double bounds[6]);
00243
00245
00246 void ResetCamera(double xmin, double xmax, double ymin, double ymax,
00247 double zmin, double zmax);
00249
00251
00254 void SetRenderWindow(vtkRenderWindow *);
00255 vtkRenderWindow *GetRenderWindow() {return this->RenderWindow;};
00256 virtual vtkWindow *GetVTKWindow();
00258
00260
00263 vtkSetMacro(BackingStore,int);
00264 vtkGetMacro(BackingStore,int);
00265 vtkBooleanMacro(BackingStore,int);
00267
00269
00272 vtkSetMacro(Interactive,int);
00273 vtkGetMacro(Interactive,int);
00274 vtkBooleanMacro(Interactive,int);
00276
00278
00280 vtkSetMacro(Layer, int);
00281 vtkGetMacro(Layer, int);
00283
00286 int Transparent();
00287
00289 void WorldToView();
00290
00292
00293 void ViewToWorld();
00294 virtual void ViewToWorld(double &wx, double &wy, double &wz);
00296
00298 virtual void WorldToView(double &wx, double &wy, double &wz);
00299
00301 double GetZ (int x, int y);
00302
00304 unsigned long GetMTime();
00305
00307
00308 vtkGetMacro( LastRenderTimeInSeconds, double );
00310
00312
00316 vtkGetMacro( NumberOfPropsRendered, int );
00318
00324 vtkAssemblyPath* PickProp(double selectionX, double selectionY);
00325
00326 protected:
00327 vtkRenderer();
00328 ~vtkRenderer();
00329
00330
00331 virtual void PickRender(vtkPropCollection *props);
00332 virtual void PickGeometry();
00333
00334 vtkCamera *ActiveCamera;
00335 vtkLight *CreatedLight;
00336
00337 vtkLightCollection *Lights;
00338 vtkCullerCollection *Cullers;
00339
00340 vtkActorCollection *Actors;
00341 vtkVolumeCollection *Volumes;
00342
00343 double Ambient[3];
00344 vtkRenderWindow *RenderWindow;
00345 double AllocatedRenderTime;
00346 double TimeFactor;
00347 int TwoSidedLighting;
00348 int AutomaticLightCreation;
00349 int BackingStore;
00350 unsigned char *BackingImage;
00351 vtkTimeStamp RenderTime;
00352
00353 double LastRenderTimeInSeconds;
00354
00355 int LightFollowCamera;
00356
00357
00358 void AllocateTime();
00359
00360
00361
00362 int NumberOfPropsRendered;
00363
00364
00365
00366 vtkProp **PropArray;
00367 int PropArrayCount;
00368
00369
00370 vtkAssemblyPath **PathArray;
00371 int PathArrayCount;
00372
00373
00374
00375 int Interactive;
00376
00377
00378
00379 int Layer;
00380
00381
00382
00383 double ComputedVisiblePropBounds[6];
00384
00390 double NearClippingPlaneTolerance;
00391
00395 virtual int UpdateGeometry(void);
00396
00399 virtual int UpdateCamera(void);
00400
00404 virtual int UpdateLightGeometry(void);
00405
00408 virtual int UpdateLights(void) {return 0;};
00409
00410 private:
00411 vtkRenderer(const vtkRenderer&);
00412 void operator=(const vtkRenderer&);
00413 };
00414
00415 inline vtkLightCollection *vtkRenderer::GetLights() {
00416 return this->Lights;
00417 }
00418
00420 inline vtkCullerCollection *vtkRenderer::GetCullers(){return this->Cullers;}
00421
00422
00423 #endif