Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

dox/Rendering/vtkRenderWindow.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkRenderWindow.h,v $ 00005 Language: C++ 00006 00007 Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 00008 All rights reserved. 00009 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00010 00011 This software is distributed WITHOUT ANY WARRANTY; without even 00012 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00013 PURPOSE. See the above copyright notice for more information. 00014 00015 =========================================================================*/ 00053 #ifndef __vtkRenderWindow_h 00054 #define __vtkRenderWindow_h 00055 00056 #include "vtkWindow.h" 00057 00058 class vtkFloatArray; 00059 class vtkRenderWindowInteractor; 00060 class vtkRenderer; 00061 class vtkRendererCollection; 00062 class vtkUnsignedCharArray; 00063 00064 // lets define the different types of stereo 00065 #define VTK_STEREO_CRYSTAL_EYES 1 00066 #define VTK_STEREO_RED_BLUE 2 00067 #define VTK_STEREO_INTERLACED 3 00068 #define VTK_STEREO_LEFT 4 00069 #define VTK_STEREO_RIGHT 5 00070 #define VTK_STEREO_DRESDEN 6 00071 00072 #define VTK_CURSOR_DEFAULT 0 00073 #define VTK_CURSOR_ARROW 1 00074 #define VTK_CURSOR_SIZENE 2 00075 #define VTK_CURSOR_SIZENW 3 00076 #define VTK_CURSOR_SIZESW 4 00077 #define VTK_CURSOR_SIZESE 5 00078 #define VTK_CURSOR_SIZENS 6 00079 #define VTK_CURSOR_SIZEWE 7 00080 #define VTK_CURSOR_SIZEALL 8 00081 #define VTK_CURSOR_HAND 9 00082 00083 class VTK_RENDERING_EXPORT vtkRenderWindow : public vtkWindow 00084 { 00085 public: 00086 vtkTypeRevisionMacro(vtkRenderWindow,vtkWindow); 00087 void PrintSelf(ostream& os, vtkIndent indent); 00088 00092 static vtkRenderWindow *New(); 00093 00095 virtual void AddRenderer(vtkRenderer *); 00096 00098 void RemoveRenderer(vtkRenderer *); 00099 00101 static const char *GetRenderLibrary(); 00102 00104 vtkRendererCollection *GetRenderers() {return this->Renderers;}; 00105 00108 virtual void Render(); 00109 00111 virtual void Start() = 0; 00112 00115 virtual void Frame() = 0; 00116 00119 virtual void CopyResultFrame(); 00120 00124 virtual vtkRenderWindowInteractor *MakeRenderWindowInteractor(); 00125 00127 00130 virtual void HideCursor() = 0; 00131 virtual void ShowCursor() = 0; 00132 virtual void SetCursorPosition(int , int ) {}; 00134 00136 00137 vtkSetMacro(CurrentCursor,int); 00138 vtkGetMacro(CurrentCursor,int); 00140 00142 00143 virtual void SetFullScreen(int) = 0; 00144 vtkGetMacro(FullScreen,int); 00145 vtkBooleanMacro(FullScreen,int); 00147 00149 00152 vtkSetMacro(Borders,int); 00153 vtkGetMacro(Borders,int); 00154 vtkBooleanMacro(Borders,int); 00156 00158 00160 vtkGetMacro(StereoCapableWindow,int); 00161 vtkBooleanMacro(StereoCapableWindow,int); 00162 virtual void SetStereoCapableWindow(int capable); 00164 00166 00167 vtkGetMacro(StereoRender,int); 00168 void SetStereoRender(int stereo); 00169 vtkBooleanMacro(StereoRender,int); 00171 00173 00175 vtkSetMacro(PointSmoothing,int); 00176 vtkGetMacro(PointSmoothing,int); 00177 vtkBooleanMacro(PointSmoothing,int); 00179 00181 00183 vtkSetMacro(LineSmoothing,int); 00184 vtkGetMacro(LineSmoothing,int); 00185 vtkBooleanMacro(LineSmoothing,int); 00187 00189 00191 vtkSetMacro(PolygonSmoothing,int); 00192 vtkGetMacro(PolygonSmoothing,int); 00193 vtkBooleanMacro(PolygonSmoothing,int); 00195 00197 00198 vtkGetMacro(StereoType,int); 00199 vtkSetMacro(StereoType,int); 00200 void SetStereoTypeToCrystalEyes() 00201 {this->SetStereoType(VTK_STEREO_CRYSTAL_EYES);}; 00202 void SetStereoTypeToRedBlue() 00203 {this->SetStereoType(VTK_STEREO_RED_BLUE);}; 00204 void SetStereoTypeToInterlaced() 00205 {this->SetStereoType(VTK_STEREO_INTERLACED);}; 00206 void SetStereoTypeToLeft() 00207 {this->SetStereoType(VTK_STEREO_LEFT);}; 00208 void SetStereoTypeToRight() 00209 {this->SetStereoType(VTK_STEREO_RIGHT);}; 00210 void SetStereoTypeToDresden() 00211 {this->SetStereoType(VTK_STEREO_DRESDEN);}; 00212 char *GetStereoTypeAsString(); 00214 00218 virtual void StereoUpdate(); 00219 00222 virtual void StereoMidpoint(); 00223 00226 virtual void StereoRenderComplete(); 00227 00231 virtual void WindowRemap() = 0; 00232 00234 00235 vtkSetMacro(SwapBuffers,int); 00236 vtkGetMacro(SwapBuffers,int); 00237 vtkBooleanMacro(SwapBuffers,int); 00239 00241 00249 virtual int SetPixelData(int, int, int, int, unsigned char *,int) = 0; 00250 virtual int SetPixelData(int, int, int, int, vtkUnsignedCharArray*, 00251 int ) = 0; 00253 00255 00260 virtual float *GetRGBAPixelData(int ,int ,int ,int ,int ) = 0; 00261 virtual int GetRGBAPixelData(int, int, int, int, int, vtkFloatArray* ) = 0; 00262 virtual int SetRGBAPixelData(int ,int ,int ,int ,float *,int, 00263 int blend=0) = 0; 00264 virtual int SetRGBAPixelData(int, int, int, int, vtkFloatArray*, 00265 int, int blend=0) = 0; 00266 virtual void ReleaseRGBAPixelData(float *data)=0; 00267 virtual unsigned char *GetRGBACharPixelData(int ,int ,int ,int ,int ) = 0; 00268 virtual int GetRGBACharPixelData(int ,int, int, int, int, 00269 vtkUnsignedCharArray*) = 0; 00270 virtual int SetRGBACharPixelData(int ,int ,int ,int ,unsigned char *, int, 00271 int blend=0) = 0; 00272 virtual int SetRGBACharPixelData(int, int, int, int, 00273 vtkUnsignedCharArray *, 00274 int, int blend=0) = 0; 00276 00278 00279 virtual float *GetZbufferData(int, int, int, int ) = 0; 00280 virtual int GetZbufferData( int, int, int, int, vtkFloatArray*) = 0; 00281 virtual int SetZbufferData(int, int, int, int, float *) = 0; 00282 virtual int SetZbufferData( int, int, int, int, vtkFloatArray * ) = 0; 00284 00286 00289 vtkGetMacro(AAFrames,int); 00290 vtkSetMacro(AAFrames,int); 00292 00294 00299 vtkGetMacro(FDFrames,int); 00300 vtkSetMacro(FDFrames,int); 00302 00304 00309 vtkGetMacro(SubFrames,int); 00310 vtkSetMacro(SubFrames,int); 00312 00314 00315 vtkGetMacro(NeverRendered,int); 00317 00319 00321 vtkGetMacro(AbortRender,int); 00322 vtkSetMacro(AbortRender,int); 00323 vtkGetMacro(InAbortCheck,int); 00324 vtkSetMacro(InAbortCheck,int); 00325 virtual int CheckAbortStatus(); 00327 00328 vtkGetMacro(IsPicking,int); 00329 vtkSetMacro(IsPicking,int); 00330 vtkBooleanMacro(IsPicking,int); 00331 00336 virtual int GetEventPending() = 0; 00337 00339 virtual int CheckInRenderStatus() { return this->InRender; } 00340 00342 virtual void ClearInRenderStatus() { this->InRender = 0; } 00343 00345 00346 #ifndef VTK_REMOVE_LEGACY_CODE 00347 void SetAbortCheckMethod(void (*f)(void *), void *arg); 00348 void SetAbortCheckMethodArgDelete(void (*f)(void *)); 00350 #endif 00351 00353 00358 void SetDesiredUpdateRate(float); 00359 vtkGetMacro(DesiredUpdateRate,float); 00361 00363 00367 vtkGetMacro(NumberOfLayers, int); 00368 vtkSetClampMacro(NumberOfLayers, int, 1, VTK_LARGE_INTEGER); 00370 00372 00373 vtkGetObjectMacro(Interactor,vtkRenderWindowInteractor); 00374 void SetInteractor(vtkRenderWindowInteractor *); 00376 00379 virtual void UnRegister(vtkObjectBase *o); 00380 00382 00383 virtual void SetDisplayId(void *) = 0; 00384 virtual void SetWindowId(void *) = 0; 00385 virtual void SetParentId(void *) = 0; 00386 virtual void *GetGenericDisplayId() = 0; 00387 virtual void *GetGenericWindowId() = 0; 00388 virtual void *GetGenericParentId() = 0; 00389 virtual void *GetGenericContext() = 0; 00390 virtual void *GetGenericDrawable() = 0; 00391 virtual void SetWindowInfo(char *) = 0; 00392 virtual void SetParentInfo(char *) = 0; 00394 00396 virtual void MakeCurrent() = 0; 00397 00401 virtual void SetForceMakeCurrent() {}; 00402 00404 virtual const char *ReportCapabilities() { return "Not Implemented";}; 00405 00407 virtual int SupportsOpenGL() { return 0;}; 00408 00410 virtual int IsDirect() { return 0;}; 00411 00414 virtual int GetDepthBufferSize() = 0; 00415 00416 protected: 00417 vtkRenderWindow(); 00418 ~vtkRenderWindow(); 00419 00420 virtual void DoStereoRender(); 00421 virtual void DoFDRender(); 00422 virtual void DoAARender(); 00423 00424 vtkRendererCollection *Renderers; 00425 int Borders; 00426 int FullScreen; 00427 int OldScreen[5]; 00428 int PointSmoothing; 00429 int LineSmoothing; 00430 int PolygonSmoothing; 00431 int StereoRender; 00432 int StereoType; 00433 int StereoStatus; // used for keeping track of what's going on 00434 int StereoCapableWindow; 00435 vtkRenderWindowInteractor *Interactor; 00436 unsigned char* StereoBuffer; // used for red blue stereo 00437 float *AccumulationBuffer; // used for many techniques 00438 unsigned int AccumulationBufferSize; 00439 int AAFrames; 00440 int FDFrames; 00441 int SubFrames; // number of sub frames 00442 int CurrentSubFrame; // what one are we on 00443 unsigned char *ResultFrame; // used for any non immediate rendering 00444 int SwapBuffers; 00445 float DesiredUpdateRate; 00446 int AbortRender; 00447 int InAbortCheck; 00448 int InRender; 00449 int NeverRendered; 00450 int NumberOfLayers; 00451 void (*AbortCheckMethod)(void *); 00452 void (*AbortCheckMethodArgDelete)(void *); 00453 void *AbortCheckMethodArg; 00454 int CurrentCursor; 00455 int IsPicking; 00456 00457 private: 00458 vtkRenderWindow(const vtkRenderWindow&); // Not implemented. 00459 void operator=(const vtkRenderWindow&); // Not implemented. 00460 }; 00461 00463 inline char *vtkRenderWindow::GetStereoTypeAsString(void) 00464 { 00465 switch ( this->StereoType ) 00466 { 00467 case VTK_STEREO_CRYSTAL_EYES: 00468 return (char *)"CrystalEyes"; 00469 case VTK_STEREO_RED_BLUE: 00470 return (char *)"RedBlue"; 00471 case VTK_STEREO_LEFT: 00472 return (char *)"Left"; 00473 case VTK_STEREO_RIGHT: 00474 return (char *)"Right"; 00475 case VTK_STEREO_DRESDEN: 00476 return (char *)"DresdenDisplay"; 00477 default: 00478 return (char *)""; 00479 } 00480 } 00481 00482 #endif 00483 00484