00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
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
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;
00434 int StereoCapableWindow;
00435 vtkRenderWindowInteractor *Interactor;
00436 unsigned char* StereoBuffer;
00437 float *AccumulationBuffer;
00438 unsigned int AccumulationBufferSize;
00439 int AAFrames;
00440 int FDFrames;
00441 int SubFrames;
00442 int CurrentSubFrame;
00443 unsigned char *ResultFrame;
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&);
00459 void operator=(const vtkRenderWindow&);
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