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