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

Rendering/vtkRenderWindow.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkRenderWindow.h,v $
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 =========================================================================*/
00049 #ifndef __vtkRenderWindow_h
00050 #define __vtkRenderWindow_h
00051 
00052 #include "vtkWindow.h"
00053 
00054 class vtkFloatArray;
00055 class vtkRenderWindowInteractor;
00056 class vtkRenderer;
00057 class vtkRendererCollection;
00058 class vtkUnsignedCharArray;
00059 
00060 // lets define the different types of stereo
00061 #define VTK_STEREO_CRYSTAL_EYES 1
00062 #define VTK_STEREO_RED_BLUE     2
00063 #define VTK_STEREO_INTERLACED   3
00064 #define VTK_STEREO_LEFT         4
00065 #define VTK_STEREO_RIGHT        5
00066 #define VTK_STEREO_DRESDEN      6
00067 
00068 #define VTK_CURSOR_DEFAULT  0
00069 #define VTK_CURSOR_ARROW    1
00070 #define VTK_CURSOR_SIZENE   2
00071 #define VTK_CURSOR_SIZENW   3
00072 #define VTK_CURSOR_SIZESW   4
00073 #define VTK_CURSOR_SIZESE   5
00074 #define VTK_CURSOR_SIZENS   6
00075 #define VTK_CURSOR_SIZEWE   7
00076 #define VTK_CURSOR_SIZEALL  8
00077 #define VTK_CURSOR_HAND     9
00078 
00079 class VTK_RENDERING_EXPORT vtkRenderWindow : public vtkWindow
00080 {
00081 public:
00082   vtkTypeRevisionMacro(vtkRenderWindow,vtkWindow);
00083   void PrintSelf(ostream& os, vtkIndent indent);
00084 
00088   static vtkRenderWindow *New();
00089 
00091   virtual void AddRenderer(vtkRenderer *);
00092 
00094   void RemoveRenderer(vtkRenderer *);
00095 
00097   static const char *GetRenderLibrary();
00098 
00100   vtkRendererCollection *GetRenderers() {return this->Renderers;};
00101 
00104   virtual void Render();
00105 
00107   virtual void Start() = 0;
00108   
00111   virtual void Frame() = 0;
00112 
00115   virtual void CopyResultFrame();
00116 
00120   virtual vtkRenderWindowInteractor *MakeRenderWindowInteractor();
00121 
00123 
00126   virtual void HideCursor() = 0;
00127   virtual void ShowCursor() = 0;
00128   virtual void SetCursorPosition(int , int ) {};
00130 
00132 
00133   vtkSetMacro(CurrentCursor,int);
00134   vtkGetMacro(CurrentCursor,int);
00136 
00138 
00139   virtual void SetFullScreen(int) = 0;
00140   vtkGetMacro(FullScreen,int);
00141   vtkBooleanMacro(FullScreen,int);
00143 
00145 
00148   vtkSetMacro(Borders,int);
00149   vtkGetMacro(Borders,int);
00150   vtkBooleanMacro(Borders,int);
00152 
00154 
00156   vtkGetMacro(StereoCapableWindow,int);
00157   vtkBooleanMacro(StereoCapableWindow,int);
00158   virtual void SetStereoCapableWindow(int capable);
00160 
00162 
00163   vtkGetMacro(StereoRender,int);
00164   void SetStereoRender(int stereo);
00165   vtkBooleanMacro(StereoRender,int);
00167 
00169 
00170   vtkSetMacro(AlphaBitPlanes, int);
00171   vtkGetMacro(AlphaBitPlanes, int);
00172   vtkBooleanMacro(AlphaBitPlanes, int);
00174   
00176 
00178   vtkSetMacro(PointSmoothing,int);
00179   vtkGetMacro(PointSmoothing,int);
00180   vtkBooleanMacro(PointSmoothing,int);
00182 
00184 
00186   vtkSetMacro(LineSmoothing,int);
00187   vtkGetMacro(LineSmoothing,int);
00188   vtkBooleanMacro(LineSmoothing,int);
00190 
00192 
00194   vtkSetMacro(PolygonSmoothing,int);
00195   vtkGetMacro(PolygonSmoothing,int);
00196   vtkBooleanMacro(PolygonSmoothing,int);
00198 
00200 
00201   vtkGetMacro(StereoType,int);
00202   vtkSetMacro(StereoType,int);
00203   void SetStereoTypeToCrystalEyes() 
00204     {this->SetStereoType(VTK_STEREO_CRYSTAL_EYES);};
00205   void SetStereoTypeToRedBlue() 
00206     {this->SetStereoType(VTK_STEREO_RED_BLUE);};
00207   void SetStereoTypeToInterlaced() 
00208     {this->SetStereoType(VTK_STEREO_INTERLACED);};
00209   void SetStereoTypeToLeft() 
00210     {this->SetStereoType(VTK_STEREO_LEFT);};
00211   void SetStereoTypeToRight() 
00212     {this->SetStereoType(VTK_STEREO_RIGHT);};
00213   void SetStereoTypeToDresden() 
00214     {this->SetStereoType(VTK_STEREO_DRESDEN);};  
00215   char *GetStereoTypeAsString();
00217 
00221   virtual void StereoUpdate();
00222 
00225   virtual void StereoMidpoint();
00226 
00229   virtual void StereoRenderComplete();
00230 
00234   virtual void WindowRemap() = 0;
00235   
00237 
00238   vtkSetMacro(SwapBuffers,int);
00239   vtkGetMacro(SwapBuffers,int);
00240   vtkBooleanMacro(SwapBuffers,int);
00242   
00244 
00252   virtual int SetPixelData(int, int, int, int, unsigned char *,int) = 0;
00253   virtual int SetPixelData(int, int, int, int, vtkUnsignedCharArray*,
00254                            int ) = 0;
00256 
00258 
00263   virtual float *GetRGBAPixelData(int ,int ,int ,int ,int ) = 0;
00264   virtual int GetRGBAPixelData(int, int, int, int, int, vtkFloatArray* ) = 0;
00265   virtual int SetRGBAPixelData(int ,int ,int ,int ,float *,int,
00266                                int blend=0) = 0;
00267   virtual int SetRGBAPixelData(int, int, int, int, vtkFloatArray*,
00268                                int, int blend=0) = 0;
00269   virtual void ReleaseRGBAPixelData(float *data)=0;
00270   virtual unsigned char *GetRGBACharPixelData(int ,int ,int ,int ,int ) = 0;
00271   virtual int GetRGBACharPixelData(int ,int, int, int, int,
00272                                    vtkUnsignedCharArray*) = 0;
00273   virtual int SetRGBACharPixelData(int ,int ,int ,int ,unsigned char *, int,
00274                                    int blend=0) = 0;
00275   virtual int SetRGBACharPixelData(int, int, int, int,
00276                                    vtkUnsignedCharArray *,
00277                                    int, int blend=0) = 0;
00279 
00281 
00282   virtual float *GetZbufferData(int, int, int, int ) = 0;
00283   virtual int GetZbufferData( int, int, int, int, vtkFloatArray*) = 0;
00284   virtual int SetZbufferData(int, int, int, int, float *) = 0;
00285   virtual int SetZbufferData( int, int, int, int, vtkFloatArray * ) = 0;
00287 
00289 
00292   vtkGetMacro(AAFrames,int);
00293   vtkSetMacro(AAFrames,int);
00295 
00297 
00302   vtkGetMacro(FDFrames,int);
00303   vtkSetMacro(FDFrames,int);
00305 
00307 
00313   vtkGetMacro(SubFrames,int);
00314   virtual void SetSubFrames(int subFrames);
00316 
00318 
00319   vtkGetMacro(NeverRendered,int);
00321 
00323 
00325   vtkGetMacro(AbortRender,int);
00326   vtkSetMacro(AbortRender,int);
00327   vtkGetMacro(InAbortCheck,int);
00328   vtkSetMacro(InAbortCheck,int);
00329   virtual int CheckAbortStatus();
00331 
00332   vtkGetMacro(IsPicking,int);
00333   vtkSetMacro(IsPicking,int);
00334   vtkBooleanMacro(IsPicking,int);
00335   
00340   virtual int GetEventPending() = 0;
00341 
00343   virtual int  CheckInRenderStatus() { return this->InRender; }
00344 
00346   virtual void ClearInRenderStatus() { this->InRender = 0; }
00347 
00349 
00354   void SetDesiredUpdateRate(double);
00355   vtkGetMacro(DesiredUpdateRate,double);
00357 
00359 
00363   vtkGetMacro(NumberOfLayers, int);
00364   vtkSetClampMacro(NumberOfLayers, int, 1, VTK_LARGE_INTEGER);
00366 
00368 
00369   vtkGetObjectMacro(Interactor,vtkRenderWindowInteractor);
00370   void SetInteractor(vtkRenderWindowInteractor *);
00372 
00375   virtual void UnRegister(vtkObjectBase *o);
00376   
00378 
00379   virtual void SetDisplayId(void *) = 0;
00380   virtual void SetWindowId(void *)  = 0;
00381   virtual void SetNextWindowId(void *) = 0;
00382   virtual void SetParentId(void *)  = 0;
00383   virtual void *GetGenericDisplayId() = 0;
00384   virtual void *GetGenericWindowId() = 0;
00385   virtual void *GetGenericParentId() = 0;
00386   virtual void *GetGenericContext() = 0;
00387   virtual void *GetGenericDrawable() = 0;
00388   virtual void SetWindowInfo(char *) = 0;
00389   virtual void SetNextWindowInfo(char *) = 0;
00390   virtual void SetParentInfo(char *) = 0;
00392 
00394   virtual void MakeCurrent() = 0;
00395 
00399   virtual void SetForceMakeCurrent() {};
00400 
00402   virtual const char *ReportCapabilities() { return "Not Implemented";};
00403 
00405   virtual int SupportsOpenGL() { return 0;};
00406 
00408   virtual int IsDirect() { return 0;};
00409 
00412   virtual int GetDepthBufferSize() = 0;
00413 
00414 protected:
00415   vtkRenderWindow();
00416   ~vtkRenderWindow();
00417 
00418   virtual void DoStereoRender();
00419   virtual void DoFDRender();
00420   virtual void DoAARender();
00421 
00422   vtkRendererCollection *Renderers;
00423   int Borders;
00424   int FullScreen;
00425   int OldScreen[5];
00426   int PointSmoothing;
00427   int LineSmoothing;
00428   int PolygonSmoothing;
00429   int StereoRender;
00430   int StereoType;
00431   int StereoStatus; // used for keeping track of what's going on
00432   int StereoCapableWindow;
00433   int AlphaBitPlanes;
00434   vtkRenderWindowInteractor *Interactor;
00435   unsigned char* StereoBuffer; // used for red blue stereo
00436   float *AccumulationBuffer;   // used for many techniques
00437   unsigned int AccumulationBufferSize;
00438   int AAFrames;
00439   int FDFrames;
00440   int SubFrames;               // number of sub frames
00441   int CurrentSubFrame;         // what one are we on
00442   unsigned char *ResultFrame;  // used for any non immediate rendering
00443   int   SwapBuffers;
00444   double DesiredUpdateRate;
00445   int   AbortRender;
00446   int   InAbortCheck;
00447   int   InRender;
00448   int   NeverRendered;
00449   int   NumberOfLayers;
00450   int CurrentCursor;
00451   int IsPicking;
00452 
00453 private:
00454   vtkRenderWindow(const vtkRenderWindow&);  // Not implemented.
00455   void operator=(const vtkRenderWindow&);  // Not implemented.
00456 };
00457 
00459 inline char *vtkRenderWindow::GetStereoTypeAsString(void)
00460 {
00461   switch ( this->StereoType )
00462     {
00463     case VTK_STEREO_CRYSTAL_EYES:
00464       return (char *)"CrystalEyes";
00465     case VTK_STEREO_RED_BLUE:
00466       return (char *)"RedBlue";
00467     case VTK_STEREO_LEFT:
00468       return (char *)"Left";
00469     case VTK_STEREO_RIGHT:
00470       return (char *)"Right";
00471     case VTK_STEREO_DRESDEN:
00472       return (char *)"DresdenDisplay";
00473     default:
00474       return (char *)"";
00475     }
00476 }
00477 
00478 #endif
00479 
00480