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

vtkInteractorStyle.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkInteractorStyle.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 =========================================================================*/
00088 #ifndef __vtkInteractorStyle_h
00089 #define __vtkInteractorStyle_h
00090 
00091 #include "vtkInteractorObserver.h"
00092 
00093 // Motion flags
00094 
00095 #define VTKIS_START        0
00096 #define VTKIS_NONE         0
00097 
00098 #define VTKIS_ROTATE       1
00099 #define VTKIS_PAN          2
00100 #define VTKIS_SPIN         3
00101 #define VTKIS_DOLLY        4
00102 #define VTKIS_ZOOM         5
00103 #define VTKIS_USCALE       6
00104 #define VTKIS_TIMER        7
00105 #define VTKIS_FORWARDFLY   8
00106 #define VTKIS_REVERSEFLY   9
00107 
00108 #define VTKIS_ANIM_OFF 0
00109 #define VTKIS_ANIM_ON  1
00110 
00111 class vtkActor2D;
00112 class vtkActor;
00113 class vtkCallbackCommand;
00114 class vtkOutlineSource;
00115 class vtkPolyDataMapper;
00116 class vtkProp3D;
00117 class vtkProp;
00118 
00119 class VTK_RENDERING_EXPORT vtkInteractorStyle : public vtkInteractorObserver
00120 {
00121 public:
00125   static vtkInteractorStyle *New();
00126 
00127   vtkTypeRevisionMacro(vtkInteractorStyle,vtkInteractorObserver);
00128   void PrintSelf(ostream& os, vtkIndent indent);
00129 
00132   virtual void SetInteractor(vtkRenderWindowInteractor *interactor);
00133 
00139   virtual void SetEnabled(int);
00140 
00142 
00148   vtkSetClampMacro(AutoAdjustCameraClippingRange, int, 0, 1 );
00149   vtkGetMacro(AutoAdjustCameraClippingRange, int );
00150   vtkBooleanMacro(AutoAdjustCameraClippingRange, int );
00152   
00156   void FindPokedRenderer(int,int);
00157 
00159 
00160   vtkGetMacro(State,int);
00162 
00164 
00165   vtkGetMacro(UseTimers,int);
00166   vtkSetMacro(UseTimers,int);
00167   vtkBooleanMacro(UseTimers,int);
00169 
00171 
00172   vtkSetMacro(HandleObservers,int);
00173   vtkGetMacro(HandleObservers,int);
00174   vtkBooleanMacro(HandleObservers,int);
00176 
00178 
00179   virtual void OnMouseMove() {};
00180   virtual void OnLeftButtonDown() {};
00181   virtual void OnLeftButtonUp() {};
00182   virtual void OnMiddleButtonDown() {};
00183   virtual void OnMiddleButtonUp() {};
00184   virtual void OnRightButtonDown() {};
00185   virtual void OnRightButtonUp() {};
00187 
00189 
00191   virtual void OnChar();
00192   virtual void OnKeyDown() {};
00193   virtual void OnKeyUp() {};
00194   virtual void OnKeyPress() {};
00195   virtual void OnKeyRelease() {};
00197 
00199 
00200   virtual void OnExpose() {};
00201   virtual void OnConfigure() {};
00202   virtual void OnEnter() {};
00203   virtual void OnLeave() {};
00205 
00208   virtual void OnTimer();
00209 
00211 
00215   virtual void Rotate() {};
00216   virtual void Spin() {};
00217   virtual void Pan() {};
00218   virtual void Dolly() {};
00219   virtual void Zoom() {};
00220   virtual void UniformScale() {};
00222 
00224 
00225   virtual void StartState(int newstate);
00226   virtual void StopState();
00228 
00230 
00231   virtual void StartAnimate();  
00232   virtual void StopAnimate();  
00233   virtual void StartRotate();
00234   virtual void EndRotate();
00235   virtual void StartZoom();
00236   virtual void EndZoom();
00237   virtual void StartPan();
00238   virtual void EndPan();
00239   virtual void StartSpin();
00240   virtual void EndSpin();
00241   virtual void StartDolly();
00242   virtual void EndDolly();
00243   virtual void StartUniformScale();
00244   virtual void EndUniformScale();
00245   virtual void StartTimer();
00246   virtual void EndTimer();
00248 
00249 #ifndef VTK_REMOVE_LEGACY_CODE
00250 
00251 
00252   void SetLeftButtonPressMethod(void (*f)(void *), void *arg);
00253   void SetLeftButtonPressMethodArgDelete(void (*f)(void *));
00254   void SetLeftButtonReleaseMethod(void (*f)(void *), void *arg);
00255   void SetLeftButtonReleaseMethodArgDelete(void (*f)(void *));
00256   void SetMiddleButtonPressMethod(void (*f)(void *), void *arg);
00257   void SetMiddleButtonPressMethodArgDelete(void (*f)(void *));
00258   void SetMiddleButtonReleaseMethod(void (*f)(void *), void *arg);
00259   void SetMiddleButtonReleaseMethodArgDelete(void (*f)(void *));
00260   void SetRightButtonPressMethod(void (*f)(void *), void *arg);
00261   void SetRightButtonPressMethodArgDelete(void (*f)(void *));
00262   void SetRightButtonReleaseMethod(void (*f)(void *), void *arg);
00263   void SetRightButtonReleaseMethodArgDelete(void (*f)(void *));
00265 #endif
00266 
00268 
00272   virtual void HighlightProp(vtkProp *prop);
00273   virtual void HighlightActor2D(vtkActor2D *actor2D);
00274   virtual void HighlightProp3D(vtkProp3D *prop3D);
00276 
00278 
00280   vtkSetVector3Macro(PickColor,float);
00281   vtkGetVectorMacro(PickColor, float, 3);
00283 
00284 protected:
00285   vtkInteractorStyle();
00286   ~vtkInteractorStyle();
00287   
00289 
00290   static void ProcessEvents(vtkObject* object, 
00291                             unsigned long event,
00292                             void* clientdata, 
00293                             void* calldata);
00295   
00296   // Keep track of current state
00297 
00298   int State;  
00299   int AnimState;  
00300 
00301   // Should observers be handled here, should we fire timers
00302 
00303   int HandleObservers; 
00304   int UseTimers;       
00305 
00306   int AutoAdjustCameraClippingRange;
00307 
00308   // For picking and highlighting props
00309 
00310   vtkOutlineSource   *Outline;
00311   vtkPolyDataMapper  *OutlineMapper;
00312   vtkActor           *OutlineActor;
00313   vtkRenderer        *PickedRenderer;
00314   vtkProp            *CurrentProp;
00315   vtkActor2D         *PickedActor2D;
00316   int                PropPicked;      // bool: prop picked?
00317   float              PickColor[3];    // support 2D picking
00318 
00319   // These should be removed when the Set*Method methods that are
00320   // deprecated above are removed.  We don't want these inside the
00321   // check for VTK_REMOVE_LEGACY_CODE because it will change the size
00322   // of the object.
00323   unsigned long LeftButtonPressTag;
00324   unsigned long LeftButtonReleaseTag;
00325   unsigned long MiddleButtonPressTag;
00326   unsigned long MiddleButtonReleaseTag;
00327   unsigned long RightButtonPressTag;
00328   unsigned long RightButtonReleaseTag;
00329 
00330 private:
00331   vtkInteractorStyle(const vtkInteractorStyle&);  // Not implemented.
00332   void operator=(const vtkInteractorStyle&);  // Not implemented.
00333 };
00334 
00335 #endif