VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkRenderer.h 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00040 #ifndef __vtkRenderer_h 00041 #define __vtkRenderer_h 00042 00043 #include "vtkViewport.h" 00044 00045 #include "vtkVolumeCollection.h" // Needed for access in inline members 00046 #include "vtkActorCollection.h" // Needed for access in inline members 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 class vtkPainter; 00058 class vtkIdentColoredPainter; 00059 class vtkHardwareSelector; 00060 class vtkRendererDelegate; 00061 class vtkRenderPass; 00062 class vtkTexture; 00063 00064 #if !defined(VTK_LEGACY_REMOVE) 00065 class vtkVisibleCellSelector; 00066 #endif 00067 00068 00069 class VTK_RENDERING_EXPORT vtkRenderer : public vtkViewport 00070 { 00071 public: 00072 vtkTypeMacro(vtkRenderer,vtkViewport); 00073 void PrintSelf(ostream& os, vtkIndent indent); 00074 00078 static vtkRenderer *New(); 00079 00081 00084 void AddActor(vtkProp *p); 00085 void AddVolume(vtkProp *p); 00086 void RemoveActor(vtkProp *p); 00087 void RemoveVolume(vtkProp *p); 00089 00091 void AddLight(vtkLight *); 00092 00094 void RemoveLight(vtkLight *); 00095 00097 void RemoveAllLights(); 00098 00100 vtkLightCollection *GetLights(); 00101 00105 void SetLightCollection(vtkLightCollection *lights); 00106 00108 void CreateLight(void); 00109 00113 virtual vtkLight *MakeLight(); 00114 00116 00120 vtkGetMacro(TwoSidedLighting,int); 00121 vtkSetMacro(TwoSidedLighting,int); 00122 vtkBooleanMacro(TwoSidedLighting,int); 00124 00126 00136 vtkSetMacro(LightFollowCamera,int); 00137 vtkGetMacro(LightFollowCamera,int); 00138 vtkBooleanMacro(LightFollowCamera,int); 00140 00142 00148 vtkGetMacro(AutomaticLightCreation,int); 00149 vtkSetMacro(AutomaticLightCreation,int); 00150 vtkBooleanMacro(AutomaticLightCreation,int); 00152 00156 virtual int UpdateLightsGeometryToFollowCamera(void); 00157 00159 vtkVolumeCollection *GetVolumes(); 00160 00162 vtkActorCollection *GetActors(); 00163 00165 void SetActiveCamera(vtkCamera *); 00166 00170 vtkCamera *GetActiveCamera(); 00171 00175 virtual vtkCamera *MakeCamera(); 00176 00178 00182 vtkSetMacro(Erase, int); 00183 vtkGetMacro(Erase, int); 00184 vtkBooleanMacro(Erase, int); 00186 00188 00191 vtkSetMacro(Draw, int); 00192 vtkGetMacro(Draw, int); 00193 vtkBooleanMacro(Draw, int); 00195 00197 void AddCuller(vtkCuller *); 00198 00200 void RemoveCuller(vtkCuller *); 00201 00203 vtkCullerCollection *GetCullers(); 00204 00206 00207 vtkSetVector3Macro(Ambient,double); 00208 vtkGetVectorMacro(Ambient,double,3); 00210 00212 00214 vtkSetMacro(AllocatedRenderTime,double); 00215 virtual double GetAllocatedRenderTime(); 00217 00222 virtual double GetTimeFactor(); 00223 00228 virtual void Render(); 00229 00232 virtual void DeviceRender() =0; 00233 00238 virtual void DeviceRenderTranslucentPolygonalGeometry(); 00239 00241 virtual void Clear() {}; 00242 00244 int VisibleActorCount(); 00245 00247 int VisibleVolumeCount(); 00248 00251 void ComputeVisiblePropBounds( double bounds[6] ); 00252 00254 double *ComputeVisiblePropBounds(); 00255 00258 void ResetCameraClippingRange(); 00259 00261 00263 void ResetCameraClippingRange( double bounds[6] ); 00264 void ResetCameraClippingRange( double xmin, double xmax, 00265 double ymin, double ymax, 00266 double zmin, double zmax); 00268 00270 00274 vtkSetClampMacro(NearClippingPlaneTolerance,double,0,0.99); 00275 vtkGetMacro(NearClippingPlaneTolerance,double); 00277 00283 void ResetCamera(); 00284 00292 void ResetCamera(double bounds[6]); 00293 00295 00296 void ResetCamera(double xmin, double xmax, double ymin, double ymax, 00297 double zmin, double zmax); 00299 00301 00304 void SetRenderWindow(vtkRenderWindow *); 00305 vtkRenderWindow *GetRenderWindow() {return this->RenderWindow;}; 00306 virtual vtkWindow *GetVTKWindow(); 00308 00310 00313 vtkSetMacro(BackingStore,int); 00314 vtkGetMacro(BackingStore,int); 00315 vtkBooleanMacro(BackingStore,int); 00317 00319 00322 vtkSetMacro(Interactive,int); 00323 vtkGetMacro(Interactive,int); 00324 vtkBooleanMacro(Interactive,int); 00326 00328 00330 vtkSetMacro(Layer, int); 00331 vtkGetMacro(Layer, int); 00333 00335 00337 vtkSetMacro(PreserveDepthBuffer, int); 00338 vtkGetMacro(PreserveDepthBuffer, int); 00339 vtkBooleanMacro(PreserveDepthBuffer, int); 00341 00344 int Transparent(); 00345 00347 void WorldToView(); 00348 00350 00351 void ViewToWorld(); 00352 virtual void ViewToWorld(double &wx, double &wy, double &wz); 00354 00356 virtual void WorldToView(double &wx, double &wy, double &wz); 00357 00360 double GetZ (int x, int y); 00361 00363 unsigned long GetMTime(); 00364 00366 00367 vtkGetMacro( LastRenderTimeInSeconds, double ); 00369 00371 00375 vtkGetMacro( NumberOfPropsRendered, int ); 00377 00379 00384 vtkAssemblyPath* PickProp(double selectionX, double selectionY) 00385 { 00386 return this->PickProp(selectionX, selectionY, selectionX, selectionY); 00387 } 00388 vtkAssemblyPath* PickProp(double selectionX1, double selectionY1, 00389 double selectionX2, double selectionY2); 00391 00395 virtual void StereoMidpoint() { return; }; 00396 00401 double GetTiledAspectRatio(); 00402 00404 00407 int IsActiveCameraCreated() 00408 { return (this->ActiveCamera != NULL); } 00410 00411 00413 00420 vtkSetMacro(UseDepthPeeling,int); 00421 vtkGetMacro(UseDepthPeeling,int); 00422 vtkBooleanMacro(UseDepthPeeling,int); 00424 00426 00433 vtkSetClampMacro(OcclusionRatio,double,0.0,0.5); 00434 vtkGetMacro(OcclusionRatio,double); 00436 00438 00441 vtkSetMacro(MaximumNumberOfPeels,int); 00442 vtkGetMacro(MaximumNumberOfPeels,int); 00444 00446 00448 vtkGetMacro(LastRenderingUsedDepthPeeling,int); 00450 00452 00456 void SetDelegate(vtkRendererDelegate *d); 00457 vtkGetObjectMacro(Delegate,vtkRendererDelegate); 00459 00461 00462 void SetPass(vtkRenderPass *p); 00463 vtkGetObjectMacro(Pass,vtkRenderPass); 00465 00467 00470 vtkGetObjectMacro(Selector, vtkHardwareSelector); 00472 00474 00476 void SetBackgroundTexture(vtkTexture*); 00477 vtkGetObjectMacro(BackgroundTexture, vtkTexture); 00479 00481 00483 vtkSetMacro(TexturedBackground,bool); 00484 vtkGetMacro(TexturedBackground,bool); 00485 vtkBooleanMacro(TexturedBackground,bool); 00487 00488 //BTX 00489 protected: 00490 vtkRenderer(); 00491 ~vtkRenderer(); 00492 00493 // internal method for doing a render for picking purposes 00494 virtual void PickRender(vtkPropCollection *props); 00495 virtual void PickGeometry(); 00496 00497 vtkCamera *ActiveCamera; 00498 vtkLight *CreatedLight; 00499 00500 vtkLightCollection *Lights; 00501 vtkCullerCollection *Cullers; 00502 00503 vtkActorCollection *Actors; 00504 vtkVolumeCollection *Volumes; 00505 00506 double Ambient[3]; 00507 vtkRenderWindow *RenderWindow; 00508 double AllocatedRenderTime; 00509 double TimeFactor; 00510 int TwoSidedLighting; 00511 int AutomaticLightCreation; 00512 int BackingStore; 00513 unsigned char *BackingImage; 00514 int BackingStoreSize[2]; 00515 vtkTimeStamp RenderTime; 00516 00517 double LastRenderTimeInSeconds; 00518 00519 int LightFollowCamera; 00520 00521 // Allocate the time for each prop 00522 void AllocateTime(); 00523 00524 // Internal variables indicating the number of props 00525 // that have been or will be rendered in each category. 00526 int NumberOfPropsRendered; 00527 00528 // A temporary list of props used for culling, and traversal 00529 // of all props when rendering 00530 vtkProp **PropArray; 00531 int PropArrayCount; 00532 00533 // A temporary list used for picking 00534 vtkAssemblyPath **PathArray; 00535 int PathArrayCount; 00536 00537 // Indicates if the renderer should receive events from an interactor. 00538 // Typically only used in conjunction with transparent renderers. 00539 int Interactive; 00540 00541 // Shows what layer this renderer belongs to. Only of interested when 00542 // there are layered renderers. 00543 int Layer; 00544 int PreserveDepthBuffer; 00545 00546 // Holds the result of ComputeVisiblePropBounds so that it is visible from 00547 // wrapped languages 00548 double ComputedVisiblePropBounds[6]; 00549 00555 double NearClippingPlaneTolerance; 00556 00561 int Erase; 00562 00566 int Draw; 00567 00571 virtual int UpdateGeometry(void); 00572 00577 virtual int UpdateTranslucentPolygonalGeometry(); 00578 00581 virtual int UpdateCamera(void); 00582 00586 virtual int UpdateLightGeometry(void); 00587 00590 virtual int UpdateLights(void) {return 0;} 00591 00594 vtkCamera *GetActiveCameraAndResetIfCreated(); 00595 00599 int UseDepthPeeling; 00600 00608 double OcclusionRatio; 00609 00613 int MaximumNumberOfPeels; 00614 00617 int LastRenderingUsedDepthPeeling; 00618 00619 #if !defined(VTK_LEGACY_REMOVE) 00620 // VISIBLE CELL SELECTION ---------------------------------------- 00621 friend class vtkVisibleCellSelector; 00622 00624 00627 enum {NOT_SELECTING = 0, COLOR_BY_PROCESSOR, COLOR_BY_ACTOR, 00628 COLOR_BY_CELL_ID_HIGH, COLOR_BY_CELL_ID_MID, COLOR_BY_CELL_ID_LOW, 00629 COLOR_BY_VERTEX}; 00631 00632 vtkSetMacro(SelectMode, int); 00633 vtkSetMacro(SelectConst, unsigned int); 00634 00637 void SetIdentPainter(vtkIdentColoredPainter*); 00638 00640 virtual int UpdateGeometryForSelection(void); 00641 00643 00645 vtkPainter* SwapInSelectablePainter(vtkProp *, 00646 int &); 00648 00650 00652 void SwapOutSelectablePainter(vtkProp *, 00653 vtkPainter*, 00654 int ); 00656 00658 00659 vtkProp **PropsSelectedFrom; 00660 int PropsSelectedFromCount; 00662 00663 // Ivars for visible cell selecting 00664 int SelectMode; 00665 unsigned int SelectConst; 00666 vtkIdentColoredPainter *IdentPainter; 00667 // End Ivars for visible cell selecting. 00668 #endif 00669 00670 // HARDWARE SELECTION ---------------------------------------- 00671 friend class vtkHardwareSelector; 00672 00674 00675 void SetSelector(vtkHardwareSelector* selector) 00676 { this->Selector = selector; this->Modified(); } 00678 00679 // End Ivars for visible cell selecting. 00680 vtkHardwareSelector* Selector; 00681 00682 //--------------------------------------------------------------- 00683 friend class vtkRendererDelegate; 00684 vtkRendererDelegate *Delegate; 00685 00686 friend class vtkRenderPass; 00687 vtkRenderPass *Pass; 00688 00689 bool TexturedBackground; 00690 vtkTexture* BackgroundTexture; 00691 00692 private: 00693 vtkRenderer(const vtkRenderer&); // Not implemented. 00694 void operator=(const vtkRenderer&); // Not implemented. 00695 //ETX 00696 }; 00697 00698 inline vtkLightCollection *vtkRenderer::GetLights() { 00699 return this->Lights; 00700 } 00701 00703 inline vtkCullerCollection *vtkRenderer::GetCullers(){return this->Cullers;} 00704 00705 00706 #endif