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

dox/Rendering/vtkRenderWindowInteractor.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkRenderWindowInteractor.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 =========================================================================*/
00047 #ifndef __vtkRenderWindowInteractor_h
00048 #define __vtkRenderWindowInteractor_h
00049 
00050 #include "vtkObject.h"
00051 
00052 // Timer flags for win32/X compatibility
00053 #define VTKI_TIMER_FIRST  0
00054 #define VTKI_TIMER_UPDATE 1
00055 
00056 class vtkAbstractPicker;
00057 class vtkAbstractPropPicker;
00058 class vtkInteractorObserver;
00059 class vtkInteractorObserver;
00060 class vtkRenderWindow;
00061 class vtkRenderer;
00062 
00063 class VTK_RENDERING_EXPORT vtkRenderWindowInteractor : public vtkObject
00064 {
00065 public:
00066   static vtkRenderWindowInteractor *New();
00067   vtkTypeRevisionMacro(vtkRenderWindowInteractor,vtkObject);
00068   void PrintSelf(ostream& os, vtkIndent indent);
00069 
00071 
00073   virtual void Initialize();
00074   void ReInitialize() {  this->Initialized = 0; this->Enabled = 0;
00075                         this->Initialize(); } 
00077 
00080   virtual void UnRegister(vtkObjectBase *o);
00081 
00085   virtual void Start() {};
00086 
00088 
00095   virtual void Enable() { this->Enabled = 1; this->Modified();};
00096   virtual void Disable() { this->Enabled = 0; this->Modified();};
00097   vtkGetMacro(Enabled, int);
00099 
00101 
00102   void SetRenderWindow(vtkRenderWindow *aren);
00103   vtkGetObjectMacro(RenderWindow,vtkRenderWindow);
00105 
00107   virtual void UpdateSize(int x,int y);
00108 
00110 
00115   virtual int CreateTimer(int )  { return 1; };
00116   virtual int DestroyTimer()    { return 1; };
00118 
00122   virtual void TerminateApp(void) {};
00123 
00125 
00126   virtual void SetInteractorStyle(vtkInteractorObserver *);
00127   vtkGetObjectMacro(InteractorStyle,vtkInteractorObserver);
00129 
00131 
00133   vtkSetMacro(LightFollowCamera,int);
00134   vtkGetMacro(LightFollowCamera,int);
00135   vtkBooleanMacro(LightFollowCamera,int);
00137 
00139 
00143   vtkSetClampMacro(DesiredUpdateRate,float,0.0001f,VTK_LARGE_FLOAT);
00144   vtkGetMacro(DesiredUpdateRate,float);
00146 
00148 
00150   vtkSetClampMacro(StillUpdateRate,float,0.0001f,VTK_LARGE_FLOAT);
00151   vtkGetMacro(StillUpdateRate,float);
00153 
00155 
00156   vtkGetMacro(Initialized,int);
00158 
00160 
00164   virtual void SetPicker(vtkAbstractPicker*);
00165   vtkGetObjectMacro(Picker,vtkAbstractPicker);
00167 
00170   virtual vtkAbstractPropPicker *CreateDefaultPicker();
00171 
00172 #ifndef VTK_REMOVE_LEGACY_CODE
00173 
00174 
00175   void SetStartPickMethod(void (*f)(void *), void *arg);
00176   void SetStartPickMethodArgDelete(void (*f)(void *));
00177   void SetEndPickMethod(void (*f)(void *), void *arg);
00178   void SetEndPickMethodArgDelete(void (*f)(void *));
00179   void SetUserMethod(void (*f)(void *), void *arg);
00180   void SetUserMethodArgDelete(void (*f)(void *));
00181   void SetExitMethod(void (*f)(void *), void *arg);
00182   void SetExitMethodArgDelete(void (*f)(void *));
00184 #endif
00185   
00187 
00189   virtual void ExitCallback();
00190   virtual void UserCallback();
00191   virtual void StartPickCallback();
00192   virtual void EndPickCallback();
00194   
00196   virtual void GetMousePosition(int *x, int *y) { *x = 0 ; *y = 0; }
00197 
00199 
00201   void HideCursor();
00202   void ShowCursor();
00204 
00207   virtual void Render();
00208 
00210 
00213   void FlyTo(vtkRenderer *ren, float x, float y, float z);
00214   void FlyTo(vtkRenderer *ren, float *x)
00215     {this->FlyTo(ren, x[0], x[1], x[2]);}
00216   void FlyToImage(vtkRenderer *ren, float x, float y);
00217   void FlyToImage(vtkRenderer *ren, float *x)
00218     {this->FlyToImage(ren, x[0], x[1]);}
00220 
00222 
00223   vtkSetClampMacro(NumberOfFlyFrames,int,1,VTK_LARGE_INTEGER);
00224   vtkGetMacro(NumberOfFlyFrames,int);
00226 
00228 
00230   vtkSetMacro(Dolly,float);
00231   vtkGetMacro(Dolly,float);
00233 
00235 
00240   vtkGetVector2Macro(EventPosition,int);
00241   vtkGetVector2Macro(LastEventPosition,int);
00242   virtual void SetEventPosition(int x, int y)
00243   {
00244     vtkDebugMacro(<< this->GetClassName() << " (" << this 
00245                   << "): setting EventPosition to (" << x << "," << y << ")");
00246     if (this->EventPosition[0] != x || this->EventPosition[1] != y)
00247       {
00248       this->LastEventPosition[0] = this->EventPosition[0];
00249       this->LastEventPosition[1] = this->EventPosition[1];
00250       this->EventPosition[0] = x;
00251       this->EventPosition[1] = y;
00252       this->Modified();
00253       }
00254   };
00255   virtual void SetEventPosition(int pos[2])
00256   {
00257     this->SetEventPosition(pos[0], pos[1]);
00258   } 
00259   virtual void SetEventPositionFlipY(int x, int y)
00260   {
00261     this->SetEventPosition(x, this->Size[1] - y - 1);
00262   }
00263   virtual void SetEventPositionFlipY(int pos[2])
00264   {
00265     this->SetEventPositionFlipY(pos[0], pos[1]);
00266   } 
00267   vtkSetMacro(ControlKey, int);
00268   vtkGetMacro(ControlKey, int);
00269   vtkSetMacro(ShiftKey, int);
00270   vtkGetMacro(ShiftKey, int);
00271   vtkSetMacro(KeyCode, char);
00272   vtkGetMacro(KeyCode, char);
00273   vtkSetMacro(RepeatCount, int);
00274   vtkGetMacro(RepeatCount, int);
00275   vtkSetStringMacro(KeySym);
00276   vtkGetStringMacro(KeySym);
00278 
00280 
00281   void SetEventInformation(int x, 
00282                            int y, 
00283                            int ctrl=0, 
00284                            int shift=0, 
00285                            char keycode=0, 
00286                            int repeatcount=0,
00287                            const char* keysym=0)
00288     {
00289       this->LastEventPosition[0] = this->EventPosition[0];
00290       this->LastEventPosition[1] = this->EventPosition[1];
00291       this->EventPosition[0] = x;
00292       this->EventPosition[1] = y;
00293       this->ControlKey = ctrl;
00294       this->ShiftKey = shift;
00295       this->KeyCode = keycode;
00296       this->RepeatCount = repeatcount;
00297       if(keysym)
00298         {
00299         this->SetKeySym(keysym);
00300         }
00301       this->Modified();
00302     }
00304 
00306 
00308   void SetEventInformationFlipY(int x, 
00309                                 int y, 
00310                                 int ctrl=0, 
00311                                 int shift=0, 
00312                                 char keycode=0, 
00313                                 int repeatcount=0,
00314                                 const char* keysym=0)
00315     {
00316       this->SetEventInformation(x, 
00317                                 this->Size[1] - y - 1, 
00318                                 ctrl, 
00319                                 shift, 
00320                                 keycode, 
00321                                 repeatcount, 
00322                                 keysym);
00323     }
00325 
00327 
00328   void SetKeyEventInformation(int ctrl=0, 
00329                               int shift=0, 
00330                               char keycode=0, 
00331                               int repeatcount=0,
00332                               const char* keysym=0)
00333     {
00334       this->ControlKey = ctrl;
00335       this->ShiftKey = shift;
00336       this->KeyCode = keycode;
00337       this->RepeatCount = repeatcount;
00338       if(keysym)
00339         {
00340         this->SetKeySym(keysym);
00341         }
00342       this->Modified();
00343     }
00345 
00347 
00353   vtkSetVector2Macro(Size,int);
00354   vtkGetVector2Macro(Size,int);
00355   vtkSetVector2Macro(EventSize,int);
00356   vtkGetVector2Macro(EventSize,int);
00358 
00362   vtkRenderer *FindPokedRenderer(int,int);
00363 
00364 protected:
00365   vtkRenderWindowInteractor();
00366   ~vtkRenderWindowInteractor();
00367 
00368   vtkRenderWindow    *RenderWindow;
00369   vtkInteractorObserver *InteractorStyle;
00370 
00371   // Used as a helper object to pick instances of vtkProp
00372   vtkAbstractPicker          *Picker;
00373 
00374   int   Initialized;
00375   int   Enabled;
00376   int   Style;
00377   int   LightFollowCamera;
00378   int   ActorMode;
00379   float DesiredUpdateRate;
00380   float StillUpdateRate;  
00381 
00382   // Event information
00383   int   ControlKey;
00384   int   ShiftKey;
00385   char  KeyCode;
00386   int   RepeatCount;
00387   char* KeySym; 
00388   int   EventPosition[2];
00389   int   LastEventPosition[2];
00390   int   EventSize[2];
00391   int   Size[2];
00392   
00393   // These should be removed when the Set*Method methods that are
00394   // deprecated above are removed.  We don't want these inside the
00395   // check for VTK_REMOVE_LEGACY_CODE because it will change the size
00396   // of the object.
00397   unsigned long StartPickTag;
00398   unsigned long EndPickTag;
00399   unsigned long UserTag;
00400   unsigned long ExitTag;
00401   
00402   // control the fly to
00403   int NumberOfFlyFrames;
00404   float Dolly;
00405   
00406 private:
00407   vtkRenderWindowInteractor(const vtkRenderWindowInteractor&);  // Not implemented.
00408   void operator=(const vtkRenderWindowInteractor&);  // Not implemented.
00409 };
00410 
00411 #endif