VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkInteractorStyle.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 =========================================================================*/ 00094 #ifndef __vtkInteractorStyle_h 00095 #define __vtkInteractorStyle_h 00096 00097 #include "vtkInteractorObserver.h" 00098 00099 // Motion flags 00100 00101 #define VTKIS_START 0 00102 #define VTKIS_NONE 0 00103 00104 #define VTKIS_ROTATE 1 00105 #define VTKIS_PAN 2 00106 #define VTKIS_SPIN 3 00107 #define VTKIS_DOLLY 4 00108 #define VTKIS_ZOOM 5 00109 #define VTKIS_USCALE 6 00110 #define VTKIS_TIMER 7 00111 #define VTKIS_FORWARDFLY 8 00112 #define VTKIS_REVERSEFLY 9 00113 00114 #define VTKIS_ANIM_OFF 0 00115 #define VTKIS_ANIM_ON 1 00116 00117 class vtkActor2D; 00118 class vtkActor; 00119 class vtkCallbackCommand; 00120 class vtkEventForwarderCommand; 00121 class vtkOutlineSource; 00122 class vtkPolyDataMapper; 00123 class vtkProp3D; 00124 class vtkProp; 00125 00126 class VTK_RENDERING_EXPORT vtkInteractorStyle : public vtkInteractorObserver 00127 { 00128 public: 00132 static vtkInteractorStyle *New(); 00133 00134 vtkTypeRevisionMacro(vtkInteractorStyle,vtkInteractorObserver); 00135 void PrintSelf(ostream& os, vtkIndent indent); 00136 00139 virtual void SetInteractor(vtkRenderWindowInteractor *interactor); 00140 00146 virtual void SetEnabled(int); 00147 00149 00155 vtkSetClampMacro(AutoAdjustCameraClippingRange, int, 0, 1 ); 00156 vtkGetMacro(AutoAdjustCameraClippingRange, int ); 00157 vtkBooleanMacro(AutoAdjustCameraClippingRange, int ); 00159 00163 void FindPokedRenderer(int,int); 00164 00166 00167 vtkGetMacro(State,int); 00169 00171 00172 vtkGetMacro(UseTimers,int); 00173 vtkSetMacro(UseTimers,int); 00174 vtkBooleanMacro(UseTimers,int); 00176 00178 00182 vtkSetClampMacro(TimerDuration,unsigned long,1,100000); 00183 vtkGetMacro(TimerDuration,unsigned long); 00185 00187 00188 vtkSetMacro(HandleObservers,int); 00189 vtkGetMacro(HandleObservers,int); 00190 vtkBooleanMacro(HandleObservers,int); 00192 00194 00195 virtual void OnMouseMove() {}; 00196 virtual void OnLeftButtonDown() {}; 00197 virtual void OnLeftButtonUp() {}; 00198 virtual void OnMiddleButtonDown() {}; 00199 virtual void OnMiddleButtonUp() {}; 00200 virtual void OnRightButtonDown() {}; 00201 virtual void OnRightButtonUp() {}; 00202 virtual void OnMouseWheelForward() {}; 00203 virtual void OnMouseWheelBackward() {}; 00205 00207 00209 virtual void OnChar(); 00210 virtual void OnKeyDown() {}; 00211 virtual void OnKeyUp() {}; 00212 virtual void OnKeyPress() {}; 00213 virtual void OnKeyRelease() {}; 00215 00217 00218 virtual void OnExpose() {}; 00219 virtual void OnConfigure() {}; 00220 virtual void OnEnter() {}; 00221 virtual void OnLeave() {}; 00223 00226 virtual void OnTimer(); 00227 00229 00233 virtual void Rotate() {}; 00234 virtual void Spin() {}; 00235 virtual void Pan() {}; 00236 virtual void Dolly() {}; 00237 virtual void Zoom() {}; 00238 virtual void UniformScale() {}; 00240 00242 00243 virtual void StartState(int newstate); 00244 virtual void StopState(); 00246 00248 00249 virtual void StartAnimate(); 00250 virtual void StopAnimate(); 00251 virtual void StartRotate(); 00252 virtual void EndRotate(); 00253 virtual void StartZoom(); 00254 virtual void EndZoom(); 00255 virtual void StartPan(); 00256 virtual void EndPan(); 00257 virtual void StartSpin(); 00258 virtual void EndSpin(); 00259 virtual void StartDolly(); 00260 virtual void EndDolly(); 00261 virtual void StartUniformScale(); 00262 virtual void EndUniformScale(); 00263 virtual void StartTimer(); 00264 virtual void EndTimer(); 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,double); 00281 vtkGetVectorMacro(PickColor, double, 3); 00283 00285 00288 vtkSetMacro(MouseWheelMotionFactor, double); 00289 vtkGetMacro(MouseWheelMotionFactor, double); 00291 00292 protected: 00293 vtkInteractorStyle(); 00294 ~vtkInteractorStyle(); 00295 00297 00298 static void ProcessEvents(vtkObject* object, 00299 unsigned long event, 00300 void* clientdata, 00301 void* calldata); 00303 00304 // Keep track of current state 00305 int State; 00306 int AnimState; 00307 00308 // Should observers be handled here, should we fire timers 00309 int HandleObservers; 00310 int UseTimers; 00311 int TimerId; //keep track of the timers that are created/destroyed 00312 00313 int AutoAdjustCameraClippingRange; 00314 00315 // For picking and highlighting props 00316 vtkOutlineSource *Outline; 00317 vtkPolyDataMapper *OutlineMapper; 00318 vtkActor *OutlineActor; 00319 vtkRenderer *PickedRenderer; 00320 vtkProp *CurrentProp; 00321 vtkActor2D *PickedActor2D; 00322 int PropPicked; // bool: prop picked? 00323 double PickColor[3]; // support 2D picking 00324 double MouseWheelMotionFactor; 00325 00326 // Control the timer duration 00327 unsigned long TimerDuration; //in milliseconds 00328 00329 // Forward evets to the RenderWindowInteractor 00330 vtkEventForwarderCommand * EventForwarder; 00331 00332 private: 00333 vtkInteractorStyle(const vtkInteractorStyle&); // Not implemented. 00334 void operator=(const vtkInteractorStyle&); // Not implemented. 00335 }; 00336 00337 #endif