00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00065 #ifndef __vtkRenderWindow_h
00066 #define __vtkRenderWindow_h
00067
00068 #include "vtkWindow.h"
00069
00070 class vtkFloatArray;
00071 class vtkRenderWindowInteractor;
00072 class vtkRenderer;
00073 class vtkRendererCollection;
00074 class vtkUnsignedCharArray;
00075
00076
00077 #define VTK_STEREO_CRYSTAL_EYES 1
00078 #define VTK_STEREO_RED_BLUE 2
00079 #define VTK_STEREO_INTERLACED 3
00080 #define VTK_STEREO_LEFT 4
00081 #define VTK_STEREO_RIGHT 5
00082 #define VTK_STEREO_DRESDEN 6
00083
00084 #define VTK_CURSOR_DEFAULT 0
00085 #define VTK_CURSOR_ARROW 1
00086 #define VTK_CURSOR_SIZENE 2
00087 #define VTK_CURSOR_SIZENW 3
00088 #define VTK_CURSOR_SIZESW 4
00089 #define VTK_CURSOR_SIZESE 5
00090 #define VTK_CURSOR_SIZENS 6
00091 #define VTK_CURSOR_SIZEWE 7
00092 #define VTK_CURSOR_SIZEALL 8
00093 #define VTK_CURSOR_HAND 9
00094
00095 class VTK_RENDERING_EXPORT vtkRenderWindow : public vtkWindow
00096 {
00097 public:
00098 vtkTypeRevisionMacro(vtkRenderWindow,vtkWindow);
00099 void PrintSelf(ostream& os, vtkIndent indent);
00100
00104 static vtkRenderWindow *New();
00105
00107 virtual void AddRenderer(vtkRenderer *);
00108
00110 void RemoveRenderer(vtkRenderer *);
00111
00113 static const char *GetRenderLibrary();
00114
00116 vtkRendererCollection *GetRenderers() {return this->Renderers;};
00117
00120 virtual void Render();
00121
00123 virtual void Start() = 0;
00124
00127 virtual void Frame() = 0;
00128
00131 virtual void CopyResultFrame();
00132
00136 virtual vtkRenderWindowInteractor *MakeRenderWindowInteractor();
00137
00139
00142 virtual void HideCursor() = 0;
00143 virtual void ShowCursor() = 0;
00144 virtual void SetCursorPosition(int , int ) {};
00146
00148
00149 vtkSetMacro(CurrentCursor,int);
00150 vtkGetMacro(CurrentCursor,int);
00152
00154
00155 virtual void SetFullScreen(int) = 0;
00156 vtkGetMacro(FullScreen,int);
00157 vtkBooleanMacro(FullScreen,int);
00159
00161
00164 vtkSetMacro(Borders,int);
00165 vtkGetMacro(Borders,int);
00166 vtkBooleanMacro(Borders,int);
00168
00170
00172 vtkGetMacro(StereoCapableWindow,int);
00173 vtkBooleanMacro(StereoCapableWindow,int);
00174 virtual void SetStereoCapableWindow(int capable);
00176
00178
00179 vtkGetMacro(StereoRender,int);
00180 void SetStereoRender(int stereo);
00181 vtkBooleanMacro(StereoRender,int);
00183
00185
00187 vtkSetMacro(PointSmoothing,int);
00188 vtkGetMacro(PointSmoothing,int);
00189 vtkBooleanMacro(PointSmoothing,int);
00191
00193
00195 vtkSetMacro(LineSmoothing,int);
00196 vtkGetMacro(LineSmoothing,int);
00197 vtkBooleanMacro(LineSmoothing,int);
00199
00201
00203 vtkSetMacro(PolygonSmoothing,int);
00204 vtkGetMacro(PolygonSmoothing,int);
00205 vtkBooleanMacro(PolygonSmoothing,int);
00207
00209
00210 vtkGetMacro(StereoType,int);
00211 vtkSetMacro(StereoType,int);
00212 void SetStereoTypeToCrystalEyes()
00213 {this->SetStereoType(VTK_STEREO_CRYSTAL_EYES);};
00214 void SetStereoTypeToRedBlue()
00215 {this->SetStereoType(VTK_STEREO_RED_BLUE);};
00216 void SetStereoTypeToInterlaced()
00217 {this->SetStereoType(VTK_STEREO_INTERLACED);};
00218 void SetStereoTypeToLeft()
00219 {this->SetStereoType(VTK_STEREO_LEFT);};
00220 void SetStereoTypeToRight()
00221 {this->SetStereoType(VTK_STEREO_RIGHT);};
00222 void SetStereoTypeToDresden()
00223 {this->SetStereoType(VTK_STEREO_DRESDEN);};
00224 char *GetStereoTypeAsString();
00226
00230 virtual void StereoUpdate();
00231
00234 virtual void StereoMidpoint();
00235
00238 virtual void StereoRenderComplete();
00239
00243 virtual void WindowRemap() = 0;
00244
00246
00247 vtkSetMacro(SwapBuffers,int);
00248 vtkGetMacro(SwapBuffers,int);
00249 vtkBooleanMacro(SwapBuffers,int);
00251
00253
00261 virtual int SetPixelData(int, int, int, int, unsigned char *,int) = 0;
00262 virtual int SetPixelData(int, int, int, int, vtkUnsignedCharArray*,
00263 int ) = 0;
00265
00267
00272 virtual float *GetRGBAPixelData(int ,int ,int ,int ,int ) = 0;
00273 virtual int GetRGBAPixelData(int, int, int, int, int, vtkFloatArray* ) = 0;
00274 virtual int SetRGBAPixelData(int ,int ,int ,int ,float *,int,
00275 int blend=0) = 0;
00276 virtual int SetRGBAPixelData(int, int, int, int, vtkFloatArray*,
00277 int, int blend=0) = 0;
00278 virtual void ReleaseRGBAPixelData(float *data)=0;
00279 virtual unsigned char *GetRGBACharPixelData(int ,int ,int ,int ,int ) = 0;
00280 virtual int GetRGBACharPixelData(int ,int, int, int, int,
00281 vtkUnsignedCharArray*) = 0;
00282 virtual int SetRGBACharPixelData(int ,int ,int ,int ,unsigned char *, int,
00283 int blend=0) = 0;
00284 virtual int SetRGBACharPixelData(int, int, int, int,
00285 vtkUnsignedCharArray *,
00286 int, int blend=0) = 0;
00288
00290
00291 virtual float *GetZbufferData(int, int, int, int ) = 0;
00292 virtual int GetZbufferData( int, int, int, int, vtkFloatArray*) = 0;
00293 virtual int SetZbufferData(int, int, int, int, float *) = 0;
00294 virtual int SetZbufferData( int, int, int, int, vtkFloatArray * ) = 0;
00296
00298
00301 vtkGetMacro(AAFrames,int);
00302 vtkSetMacro(AAFrames,int);
00304
00306
00311 vtkGetMacro(FDFrames,int);
00312 vtkSetMacro(FDFrames,int);
00314
00316
00321 vtkGetMacro(SubFrames,int);
00322 vtkSetMacro(SubFrames,int);
00324
00326
00327 vtkGetMacro(NeverRendered,int);
00329
00331
00333 vtkGetMacro(AbortRender,int);
00334 vtkSetMacro(AbortRender,int);
00335 vtkGetMacro(InAbortCheck,int);
00336 vtkSetMacro(InAbortCheck,int);
00337 virtual int CheckAbortStatus();
00339
00340 vtkGetMacro(IsPicking,int);
00341 vtkSetMacro(IsPicking,int);
00342 vtkBooleanMacro(IsPicking,int);
00343
00348 virtual int GetEventPending() = 0;
00349
00351 virtual int CheckInRenderStatus() { return this->InRender; }
00352
00354 virtual void ClearInRenderStatus() { this->InRender = 0; }
00355
00357
00358 #ifndef VTK_REMOVE_LEGACY_CODE
00359 void SetAbortCheckMethod(void (*f)(void *), void *arg);
00360 void SetAbortCheckMethodArgDelete(void (*f)(void *));
00362 #endif
00363
00365
00370 void SetDesiredUpdateRate(float);
00371 vtkGetMacro(DesiredUpdateRate,float);
00373
00375
00379 vtkGetMacro(NumberOfLayers, int);
00380 vtkSetClampMacro(NumberOfLayers, int, 1, VTK_LARGE_INTEGER);
00382
00384
00385 vtkGetObjectMacro(Interactor,vtkRenderWindowInteractor);
00386 void SetInteractor(vtkRenderWindowInteractor *);
00388
00391 virtual void UnRegister(vtkObjectBase *o);
00392
00394
00395 virtual void SetDisplayId(void *) = 0;
00396 virtual void SetWindowId(void *) = 0;
00397 virtual void SetParentId(void *) = 0;
00398 virtual void *GetGenericDisplayId() = 0;
00399 virtual void *GetGenericWindowId() = 0;
00400 virtual void *GetGenericParentId() = 0;
00401 virtual void *GetGenericContext() = 0;
00402 virtual void *GetGenericDrawable() = 0;
00403 virtual void SetWindowInfo(char *) = 0;
00404 virtual void SetParentInfo(char *) = 0;
00406
00408 virtual void MakeCurrent() = 0;
00409
00413 virtual void SetForceMakeCurrent() {};
00414
00416 virtual const char *ReportCapabilities() { return "Not Implemented";};
00417
00419 virtual int SupportsOpenGL() { return 0;};
00420
00422 virtual int IsDirect() { return 0;};
00423
00426 virtual int GetDepthBufferSize() = 0;
00427
00428 protected:
00429 vtkRenderWindow();
00430 ~vtkRenderWindow();
00431
00432 virtual void DoStereoRender();
00433 virtual void DoFDRender();
00434 virtual void DoAARender();
00435
00436 vtkRendererCollection *Renderers;
00437 int Borders;
00438 int FullScreen;
00439 int OldScreen[5];
00440 int PointSmoothing;
00441 int LineSmoothing;
00442 int PolygonSmoothing;
00443 int StereoRender;
00444 int StereoType;
00445 int StereoStatus;
00446 int StereoCapableWindow;
00447 vtkRenderWindowInteractor *Interactor;
00448 unsigned char* StereoBuffer;
00449 float *AccumulationBuffer;
00450 unsigned int AccumulationBufferSize;
00451 int AAFrames;
00452 int FDFrames;
00453 int SubFrames;
00454 int CurrentSubFrame;
00455 unsigned char *ResultFrame;
00456 int SwapBuffers;
00457 float DesiredUpdateRate;
00458 int AbortRender;
00459 int InAbortCheck;
00460 int InRender;
00461 int NeverRendered;
00462 int NumberOfLayers;
00463 void (*AbortCheckMethod)(void *);
00464 void (*AbortCheckMethodArgDelete)(void *);
00465 void *AbortCheckMethodArg;
00466 int CurrentCursor;
00467 int IsPicking;
00468
00469 private:
00470 vtkRenderWindow(const vtkRenderWindow&);
00471 void operator=(const vtkRenderWindow&);
00472 };
00473
00475 inline char *vtkRenderWindow::GetStereoTypeAsString(void)
00476 {
00477 switch ( this->StereoType )
00478 {
00479 case VTK_STEREO_CRYSTAL_EYES:
00480 return (char *)"CrystalEyes";
00481 case VTK_STEREO_RED_BLUE:
00482 return (char *)"RedBlue";
00483 case VTK_STEREO_LEFT:
00484 return (char *)"Left";
00485 case VTK_STEREO_RIGHT:
00486 return (char *)"Right";
00487 case VTK_STEREO_DRESDEN:
00488 return (char *)"DresdenDisplay";
00489 default:
00490 return (char *)"";
00491 }
00492 }
00493
00494 #endif
00495
00496