00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00037 #ifndef __vtkRenderer_h
00038 #define __vtkRenderer_h
00039
00040 #include "vtkViewport.h"
00041
00042 #include "vtkVolumeCollection.h"
00043 #include "vtkActorCollection.h"
00044
00045 class vtkRenderWindow;
00046 class vtkVolume;
00047 class vtkCuller;
00048 class vtkActor;
00049 class vtkActor2D;
00050 class vtkCamera;
00051 class vtkLightCollection;
00052 class vtkCullerCollection;
00053 class vtkLight;
00054 class vtkPainter;
00055 class vtkIdentColoredPainter;
00056 class vtkHardwareSelector;
00057 class vtkRendererDelegate;
00058 class vtkRenderPass;
00059
00060 #if !defined(VTK_LEGACY_REMOVE)
00061 class vtkVisibleCellSelector;
00062 #endif
00063
00064
00065 class VTK_RENDERING_EXPORT vtkRenderer : public vtkViewport
00066 {
00067 public:
00068 vtkTypeRevisionMacro(vtkRenderer,vtkViewport);
00069 void PrintSelf(ostream& os, vtkIndent indent);
00070
00074 static vtkRenderer *New();
00075
00077
00080 void AddActor(vtkProp *p);
00081 void AddVolume(vtkProp *p);
00082 void RemoveActor(vtkProp *p);
00083 void RemoveVolume(vtkProp *p);
00085
00087 void AddLight(vtkLight *);
00088
00090 void RemoveLight(vtkLight *);
00091
00093 void RemoveAllLights();
00094
00096 vtkLightCollection *GetLights();
00097
00099 void CreateLight(void);
00100
00104 virtual vtkLight *MakeLight();
00105
00107
00111 vtkGetMacro(TwoSidedLighting,int);
00112 vtkSetMacro(TwoSidedLighting,int);
00113 vtkBooleanMacro(TwoSidedLighting,int);
00115
00117
00127 vtkSetMacro(LightFollowCamera,int);
00128 vtkGetMacro(LightFollowCamera,int);
00129 vtkBooleanMacro(LightFollowCamera,int);
00131
00133
00139 vtkGetMacro(AutomaticLightCreation,int);
00140 vtkSetMacro(AutomaticLightCreation,int);
00141 vtkBooleanMacro(AutomaticLightCreation,int);
00143
00147 virtual int UpdateLightsGeometryToFollowCamera(void);
00148
00150 vtkVolumeCollection *GetVolumes();
00151
00153 vtkActorCollection *GetActors();
00154
00156 void SetActiveCamera(vtkCamera *);
00157
00161 vtkCamera *GetActiveCamera();
00162
00166 virtual vtkCamera *MakeCamera();
00167
00169
00173 vtkSetMacro(Erase, int);
00174 vtkGetMacro(Erase, int);
00175 vtkBooleanMacro(Erase, int);
00177
00179
00182 vtkSetMacro(Draw, int);
00183 vtkGetMacro(Draw, int);
00184 vtkBooleanMacro(Draw, int);
00186
00188 void AddCuller(vtkCuller *);
00189
00191 void RemoveCuller(vtkCuller *);
00192
00194 vtkCullerCollection *GetCullers();
00195
00197
00198 vtkSetVector3Macro(Ambient,double);
00199 vtkGetVectorMacro(Ambient,double,3);
00201
00203
00205 vtkSetMacro(AllocatedRenderTime,double);
00206 virtual double GetAllocatedRenderTime();
00208
00213 virtual double GetTimeFactor();
00214
00217 virtual void Render();
00218
00221 virtual void DeviceRender() =0;
00222
00227 virtual void DeviceRenderTranslucentPolygonalGeometry();
00228
00230 virtual void Clear() {};
00231
00233 int VisibleActorCount();
00234
00236 int VisibleVolumeCount();
00237
00240 void ComputeVisiblePropBounds( double bounds[6] );
00241
00243 double *ComputeVisiblePropBounds();
00244
00247 void ResetCameraClippingRange();
00248
00250
00252 void ResetCameraClippingRange( double bounds[6] );
00253 void ResetCameraClippingRange( double xmin, double xmax,
00254 double ymin, double ymax,
00255 double zmin, double zmax);
00257
00259
00263 vtkSetClampMacro(NearClippingPlaneTolerance,double,0,0.99);
00264 vtkGetMacro(NearClippingPlaneTolerance,double);
00266
00272 void ResetCamera();
00273
00281 void ResetCamera(double bounds[6]);
00282
00284
00285 void ResetCamera(double xmin, double xmax, double ymin, double ymax,
00286 double zmin, double zmax);
00288
00290
00293 void SetRenderWindow(vtkRenderWindow *);
00294 vtkRenderWindow *GetRenderWindow() {return this->RenderWindow;};
00295 virtual vtkWindow *GetVTKWindow();
00297
00299
00302 vtkSetMacro(BackingStore,int);
00303 vtkGetMacro(BackingStore,int);
00304 vtkBooleanMacro(BackingStore,int);
00306
00308
00311 vtkSetMacro(Interactive,int);
00312 vtkGetMacro(Interactive,int);
00313 vtkBooleanMacro(Interactive,int);
00315
00317
00319 vtkSetMacro(Layer, int);
00320 vtkGetMacro(Layer, int);
00322
00324
00326 vtkSetMacro(PreserveDepthBuffer, int);
00327 vtkGetMacro(PreserveDepthBuffer, int);
00328 vtkBooleanMacro(PreserveDepthBuffer, int);
00330
00333 int Transparent();
00334
00336 void WorldToView();
00337
00339
00340 void ViewToWorld();
00341 virtual void ViewToWorld(double &wx, double &wy, double &wz);
00343
00345 virtual void WorldToView(double &wx, double &wy, double &wz);
00346
00349 double GetZ (int x, int y);
00350
00352 unsigned long GetMTime();
00353
00355
00356 vtkGetMacro( LastRenderTimeInSeconds, double );
00358
00360
00364 vtkGetMacro( NumberOfPropsRendered, int );
00366
00368
00373 vtkAssemblyPath* PickProp(double selectionX, double selectionY)
00374 {
00375 return this->PickProp(selectionX, selectionY, selectionX, selectionY);
00376 }
00377 vtkAssemblyPath* PickProp(double selectionX1, double selectionY1,
00378 double selectionX2, double selectionY2);
00380
00384 virtual void StereoMidpoint() { return; };
00385
00390 double GetTiledAspectRatio();
00391
00393
00396 int IsActiveCameraCreated()
00397 { return (this->ActiveCamera != NULL); }
00399
00400
00402
00408 vtkSetMacro(UseDepthPeeling,int);
00409 vtkGetMacro(UseDepthPeeling,int);
00410 vtkBooleanMacro(UseDepthPeeling,int);
00412
00414
00421 vtkSetClampMacro(OcclusionRatio,double,0.0,0.5);
00422 vtkGetMacro(OcclusionRatio,double);
00424
00426
00429 vtkSetMacro(MaximumNumberOfPeels,int);
00430 vtkGetMacro(MaximumNumberOfPeels,int);
00432
00434
00436 vtkGetMacro(LastRenderingUsedDepthPeeling,int);
00438
00440
00444 void SetDelegate(vtkRendererDelegate *d);
00445 vtkGetObjectMacro(Delegate,vtkRendererDelegate);
00447
00448
00450
00451 void SetPass(vtkRenderPass *p);
00452 vtkGetObjectMacro(Pass,vtkRenderPass);
00453
00455
00457
00460 vtkGetObjectMacro(Selector, vtkHardwareSelector);
00462
00463 protected:
00464 vtkRenderer();
00465 ~vtkRenderer();
00466
00467
00468 virtual void PickRender(vtkPropCollection *props);
00469 virtual void PickGeometry();
00470
00471 vtkCamera *ActiveCamera;
00472 vtkLight *CreatedLight;
00473
00474 vtkLightCollection *Lights;
00475 vtkCullerCollection *Cullers;
00476
00477 vtkActorCollection *Actors;
00478 vtkVolumeCollection *Volumes;
00479
00480 double Ambient[3];
00481 vtkRenderWindow *RenderWindow;
00482 double AllocatedRenderTime;
00483 double TimeFactor;
00484 int TwoSidedLighting;
00485 int AutomaticLightCreation;
00486 int BackingStore;
00487 unsigned char *BackingImage;
00488 int BackingStoreSize[2];
00489 vtkTimeStamp RenderTime;
00490
00491 double LastRenderTimeInSeconds;
00492
00493 int LightFollowCamera;
00494
00495
00496 void AllocateTime();
00497
00498
00499
00500 int NumberOfPropsRendered;
00501
00502
00503
00504 vtkProp **PropArray;
00505 int PropArrayCount;
00506
00507
00508 vtkAssemblyPath **PathArray;
00509 int PathArrayCount;
00510
00511
00512
00513 int Interactive;
00514
00515
00516
00517 int Layer;
00518 int PreserveDepthBuffer;
00519
00520
00521
00522 double ComputedVisiblePropBounds[6];
00523
00529 double NearClippingPlaneTolerance;
00530
00535 int Erase;
00536
00540 int Draw;
00541
00545 virtual int UpdateGeometry(void);
00546
00551 virtual int UpdateTranslucentPolygonalGeometry();
00552
00555 virtual int UpdateCamera(void);
00556
00560 virtual int UpdateLightGeometry(void);
00561
00564 virtual int UpdateLights(void) {return 0;};
00565
00568 vtkCamera *GetActiveCameraAndResetIfCreated();
00569
00573 int UseDepthPeeling;
00574
00582 double OcclusionRatio;
00583
00587 int MaximumNumberOfPeels;
00588
00591 int LastRenderingUsedDepthPeeling;
00592
00593 #if !defined(VTK_LEGACY_REMOVE)
00594
00595 friend class vtkVisibleCellSelector;
00596
00598
00601 enum {NOT_SELECTING = 0, COLOR_BY_PROCESSOR, COLOR_BY_ACTOR,
00602 COLOR_BY_CELL_ID_HIGH, COLOR_BY_CELL_ID_MID, COLOR_BY_CELL_ID_LOW,
00603 COLOR_BY_VERTEX};
00605
00606 vtkSetMacro(SelectMode, int);
00607 vtkSetMacro(SelectConst, unsigned int);
00608
00611 void SetIdentPainter(vtkIdentColoredPainter*);
00612
00614 virtual int UpdateGeometryForSelection(void);
00615
00617
00619 vtkPainter* SwapInSelectablePainter(vtkProp *,
00620 int &);
00622
00624
00626 void SwapOutSelectablePainter(vtkProp *,
00627 vtkPainter*,
00628 int );
00630
00632
00633 vtkProp **PropsSelectedFrom;
00634 int PropsSelectedFromCount;
00636
00637
00638 int SelectMode;
00639 unsigned int SelectConst;
00640 vtkIdentColoredPainter *IdentPainter;
00641
00642 #endif
00643
00644
00645 friend class vtkHardwareSelector;
00646
00648
00649 void SetSelector(vtkHardwareSelector* selector)
00650 { this->Selector = selector; this->Modified(); }
00652
00653
00654 vtkHardwareSelector* Selector;
00655
00656
00657 friend class vtkRendererDelegate;
00658 vtkRendererDelegate *Delegate;
00659
00660 friend class vtkRenderPass;
00661 vtkRenderPass *Pass;
00662
00663 private:
00664 vtkRenderer(const vtkRenderer&);
00665 void operator=(const vtkRenderer&);
00666
00667 };
00668
00669 inline vtkLightCollection *vtkRenderer::GetLights() {
00670 return this->Lights;
00671 }
00672
00674 inline vtkCullerCollection *vtkRenderer::GetCullers(){return this->Cullers;}
00675
00676
00677 #endif