VTK  9.1.0
vtkInteractorStyle.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkInteractorStyle.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
151 #ifndef vtkInteractorStyle_h
152 #define vtkInteractorStyle_h
153 
154 #include "vtkInteractorObserver.h"
155 #include "vtkRenderingCoreModule.h" // For export macro
156 
157 // Motion flags
158 
159 #define VTKIS_START 0
160 #define VTKIS_NONE 0
161 
162 #define VTKIS_ROTATE 1
163 #define VTKIS_PAN 2
164 #define VTKIS_SPIN 3
165 #define VTKIS_DOLLY 4
166 #define VTKIS_ZOOM 5
167 #define VTKIS_USCALE 6
168 #define VTKIS_TIMER 7
169 #define VTKIS_FORWARDFLY 8
170 #define VTKIS_REVERSEFLY 9
171 #define VTKIS_TWO_POINTER 10
172 #define VTKIS_CLIP 11
173 #define VTKIS_PICK 12 // perform a pick at the last location
174 #define VTKIS_LOAD_CAMERA_POSE 13 // iterate through saved camera poses
175 #define VTKIS_POSITION_PROP 14 // adjust the position, orientation of a prop
176 #define VTKIS_EXIT 15 // call exit callback
177 #define VTKIS_TOGGLE_DRAW_CONTROLS 16 // draw device controls helpers
178 #define VTKIS_MENU 17 // invoke an application menu
179 #define VTKIS_GESTURE 18 // touch interaction in progress
180 #define VTKIS_ENV_ROTATE 19 // rotate the renderer environment texture
181 
182 #define VTKIS_ANIM_OFF 0
183 #define VTKIS_ANIM_ON 1
184 
185 class vtkActor2D;
186 class vtkActor;
187 class vtkCallbackCommand;
188 class vtkEventData;
190 class vtkOutlineSource;
191 class vtkPolyDataMapper;
192 class vtkProp3D;
193 class vtkProp;
194 class vtkStringArray;
196 
197 class VTKRENDERINGCORE_EXPORT vtkInteractorStyle : public vtkInteractorObserver
198 {
199 public:
206 
208  void PrintSelf(ostream& os, vtkIndent indent) override;
209 
214  void SetInteractor(vtkRenderWindowInteractor* interactor) override;
215 
223  void SetEnabled(int) override;
224 
226 
234  vtkSetClampMacro(AutoAdjustCameraClippingRange, vtkTypeBool, 0, 1);
235  vtkGetMacro(AutoAdjustCameraClippingRange, vtkTypeBool);
236  vtkBooleanMacro(AutoAdjustCameraClippingRange, vtkTypeBool);
238 
244  void FindPokedRenderer(int, int);
245 
247 
250  vtkGetMacro(State, int);
252 
254 
257  vtkGetMacro(UseTimers, vtkTypeBool);
258  vtkSetMacro(UseTimers, vtkTypeBool);
259  vtkBooleanMacro(UseTimers, vtkTypeBool);
261 
263 
269  vtkSetClampMacro(TimerDuration, unsigned long, 1, 100000);
270  vtkGetMacro(TimerDuration, unsigned long);
272 
274 
277  vtkSetMacro(HandleObservers, vtkTypeBool);
278  vtkGetMacro(HandleObservers, vtkTypeBool);
279  vtkBooleanMacro(HandleObservers, vtkTypeBool);
281 
285  virtual void OnMouseMove() {}
286  virtual void OnLeftButtonDown() {}
287  virtual void OnLeftButtonUp() {}
288  virtual void OnMiddleButtonDown() {}
289  virtual void OnMiddleButtonUp() {}
290  virtual void OnRightButtonDown() {}
291  virtual void OnRightButtonUp() {}
292  virtual void OnLeftButtonDoubleClick() {}
293  virtual void OnMiddleButtonDoubleClick() {}
294  virtual void OnRightButtonDoubleClick() {}
295  virtual void OnMouseWheelForward() {}
296  virtual void OnMouseWheelBackward() {}
297  virtual void OnMouseWheelLeft() {}
298  virtual void OnMouseWheelRight() {}
299  virtual void OnFourthButtonDown() {}
300  virtual void OnFourthButtonUp() {}
301  virtual void OnFifthButtonDown() {}
302  virtual void OnFifthButtonUp() {}
303 
307  virtual void OnMove3D(vtkEventData*) {}
308  virtual void OnButton3D(vtkEventData*) {}
309  virtual void OnPick3D(vtkEventData*) {}
310  virtual void OnClip3D(vtkEventData*) {}
311  virtual void OnSelect3D(vtkEventData*) {}
312  virtual void OnMenu3D(vtkEventData*) {}
313  virtual void OnNextPose3D(vtkEventData*) {}
314  virtual void OnPositionProp3D(vtkEventData*) {}
316 
321  void OnChar() override;
322 
323  // OnKeyDown is triggered by pressing any key (identical to OnKeyPress()).
324  // An empty implementation is provided. The behavior of this function should
325  // be specified in the subclass.
326  virtual void OnKeyDown() {}
327 
328  // OnKeyUp is triggered by releaseing any key (identical to OnKeyRelease()).
329  // An empty implementation is provided. The behavior of this function should
330  // be specified in the subclass.
331  virtual void OnKeyUp() {}
332 
333  // OnKeyPress is triggered by pressing any key (identical to OnKeyDown()).
334  // An empty implementation is provided. The behavior of this function should
335  // be specified in the subclass.
336  virtual void OnKeyPress() {}
337 
338  // OnKeyRelease is triggered by pressing any key (identical to OnKeyUp()).
339  // An empty implementation is provided. The behavior of this function should
340  // be specified in the subclass.
341  virtual void OnKeyRelease() {}
342 
346  virtual void OnExpose() {}
347  virtual void OnConfigure() {}
348  virtual void OnEnter() {}
349  virtual void OnLeave() {}
350 
355  virtual void OnTimer();
356 
363  virtual void Rotate() {}
364  virtual void Spin() {}
365  virtual void Pan() {}
366  virtual void Dolly() {}
367  virtual void Zoom() {}
368  virtual void UniformScale() {}
369  virtual void EnvironmentRotate() {}
370 
374  virtual void OnStartSwipe() {}
375  virtual void OnSwipe() {}
376  virtual void OnEndSwipe() {}
377  virtual void OnStartPinch() {}
378  virtual void OnPinch() {}
379  virtual void OnEndPinch() {}
380  virtual void OnStartRotate() {}
381  virtual void OnRotate() {}
382  virtual void OnEndRotate() {}
383  virtual void OnStartPan() {}
384  virtual void OnPan() {}
385  virtual void OnEndPan() {}
386  virtual void OnTap() {}
387  virtual void OnLongTap() {}
388 
390 
393  virtual void StartState(int newstate);
394  virtual void StopState();
396 
398 
401  virtual void StartAnimate();
402  virtual void StopAnimate();
403  virtual void StartRotate();
404  virtual void EndRotate();
405  virtual void StartZoom();
406  virtual void EndZoom();
407  virtual void StartPan();
408  virtual void EndPan();
409  virtual void StartSpin();
410  virtual void EndSpin();
411  virtual void StartDolly();
412  virtual void EndDolly();
413  virtual void StartUniformScale();
414  virtual void EndUniformScale();
415  virtual void StartTimer();
416  virtual void EndTimer();
417  virtual void StartTwoPointer();
418  virtual void EndTwoPointer();
419  virtual void StartGesture();
420  virtual void EndGesture();
421  virtual void StartEnvRotate();
422  virtual void EndEnvRotate();
424 
431  virtual void OnDropLocation(double* vtkNotUsed(position)) {}
432 
438  virtual void OnDropFiles(vtkStringArray* vtkNotUsed(filePaths)) {}
439 
441 
447  virtual void HighlightProp(vtkProp* prop);
448  virtual void HighlightActor2D(vtkActor2D* actor2D);
449  virtual void HighlightProp3D(vtkProp3D* prop3D);
451 
453 
457  vtkSetVector3Macro(PickColor, double);
458  vtkGetVectorMacro(PickColor, double, 3);
460 
462 
467  vtkSetMacro(MouseWheelMotionFactor, double);
468  vtkGetMacro(MouseWheelMotionFactor, double);
470 
472 
476  vtkGetObjectMacro(TDxStyle, vtkTDxInteractorStyle);
477  virtual void SetTDxStyle(vtkTDxInteractorStyle* tdxStyle);
479 
483  void DelegateTDxEvent(unsigned long event, void* calldata);
484 
485 protected:
488 
492  static void ProcessEvents(
493  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
494 
495  // Keep track of current state
496  int State;
498 
499  // Should observers be handled here, should we fire timers
502  int TimerId; // keep track of the timers that are created/destroyed
503 
505 
506  // For picking and highlighting props
513  int PropPicked; // bool: prop picked?
514  double PickColor[3]; // support 2D picking
516 
517  // Control the timer duration
518  unsigned long TimerDuration; // in milliseconds
519 
520  // Forward events to the RenderWindowInteractor
522 
524 
525 private:
526  vtkInteractorStyle(const vtkInteractorStyle&) = delete;
527  void operator=(const vtkInteractorStyle&) = delete;
528 };
529 
530 #endif
a actor that draws 2D data
Definition: vtkActor2D.h:149
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:155
supports function callbacks
a simple event forwarder command
a simple class to control print indentation
Definition: vtkIndent.h:113
an abstract superclass for classes observing events invoked by vtkRenderWindowInteractor
provide event-driven interface to the rendering window (defines trackball mode)
virtual void StopAnimate()
Interaction mode entry points used internally.
vtkPolyDataMapper * OutlineMapper
virtual void OnFifthButtonUp()
virtual void OnMove3D(vtkEventData *)
Generic 3D event bindings can be overridden in subclasses.
virtual void OnMouseWheelBackward()
virtual void OnLeftButtonDoubleClick()
virtual void OnMiddleButtonDown()
virtual void OnLongTap()
virtual void OnEnter()
void SetEnabled(int) override
Turn on/off this interactor.
virtual void StartEnvRotate()
Interaction mode entry points used internally.
virtual void HighlightProp(vtkProp *prop)
When picking successfully selects an actor, this method highlights the picked prop appropriately.
virtual void EndUniformScale()
Interaction mode entry points used internally.
virtual void OnStartSwipe()
gesture based events
virtual void StartPan()
Interaction mode entry points used internally.
vtkEventForwarderCommand * EventForwarder
virtual void StartTimer()
Interaction mode entry points used internally.
virtual void OnRightButtonDown()
virtual void OnDropLocation(double *vtkNotUsed(position))
When the mouse location is updated while dragging files.
virtual void Rotate()
These methods for the different interactions in different modes are overridden in subclasses to perfo...
void DelegateTDxEvent(unsigned long event, void *calldata)
Called by the callback to process 3DConnexion device events.
virtual void EndDolly()
Interaction mode entry points used internally.
virtual void OnKeyPress()
virtual void OnEndPan()
virtual void HighlightProp3D(vtkProp3D *prop3D)
When picking successfully selects an actor, this method highlights the picked prop appropriately.
virtual void UniformScale()
virtual void OnExpose()
These are more esoteric events, but are useful in some cases.
virtual void OnRightButtonUp()
virtual void OnStartPinch()
virtual void StartGesture()
Interaction mode entry points used internally.
virtual void OnKeyUp()
virtual void OnEndPinch()
virtual void OnKeyDown()
virtual void OnStartRotate()
virtual void OnMouseWheelRight()
virtual void OnConfigure()
virtual void OnPinch()
virtual void OnLeftButtonDown()
virtual void EndPan()
Interaction mode entry points used internally.
unsigned long TimerDuration
virtual void OnRotate()
virtual void OnMouseWheelForward()
virtual void OnDropFiles(vtkStringArray *vtkNotUsed(filePaths))
When files are dropped on the render window.
static void ProcessEvents(vtkObject *object, unsigned long event, void *clientdata, void *calldata)
Main process event method.
virtual void OnFourthButtonUp()
virtual void HighlightActor2D(vtkActor2D *actor2D)
When picking successfully selects an actor, this method highlights the picked prop appropriately.
virtual void OnMiddleButtonUp()
virtual void EndGesture()
Interaction mode entry points used internally.
void SetInteractor(vtkRenderWindowInteractor *interactor) override
Set/Get the Interactor wrapper being controlled by this object.
virtual void OnMenu3D(vtkEventData *)
virtual void StartState(int newstate)
utility routines used by state changes
virtual void OnPick3D(vtkEventData *)
virtual void EnvironmentRotate()
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void OnRightButtonDoubleClick()
virtual void OnFifthButtonDown()
virtual void EndTwoPointer()
Interaction mode entry points used internally.
virtual void OnTimer()
OnTimer calls Rotate, Rotate etc which should be overridden by style subclasses.
virtual void OnLeave()
virtual void OnPositionProp3D(vtkEventData *)
virtual void StartUniformScale()
Interaction mode entry points used internally.
static vtkInteractorStyle * New()
This class must be supplied with a vtkRenderWindowInteractor wrapper or parent.
virtual void OnStartPan()
vtkOutlineSource * Outline
virtual void SetTDxStyle(vtkTDxInteractorStyle *tdxStyle)
3Dconnexion device interactor style.
virtual void OnEndSwipe()
virtual void OnViewerMovement3D(vtkEventData *)
vtkRenderer * PickedRenderer
virtual void OnEndRotate()
virtual void OnClip3D(vtkEventData *)
virtual void StartZoom()
Interaction mode entry points used internally.
virtual void OnMouseWheelLeft()
virtual void StartSpin()
Interaction mode entry points used internally.
virtual void OnMouseMove()
Generic event bindings can be overridden in subclasses.
virtual void EndEnvRotate()
Interaction mode entry points used internally.
virtual void OnKeyRelease()
void FindPokedRenderer(int, int)
When an event occurs, we must determine which Renderer the event occurred within, since one RenderWin...
virtual void StopState()
utility routines used by state changes
virtual void EndSpin()
Interaction mode entry points used internally.
virtual void EndTimer()
Interaction mode entry points used internally.
virtual void EndZoom()
Interaction mode entry points used internally.
virtual void OnLeftButtonUp()
virtual void OnNextPose3D(vtkEventData *)
virtual void StartTwoPointer()
Interaction mode entry points used internally.
virtual void OnButton3D(vtkEventData *)
vtkActor2D * PickedActor2D
virtual void StartDolly()
Interaction mode entry points used internally.
~vtkInteractorStyle() override
virtual void OnSwipe()
virtual void StartRotate()
Interaction mode entry points used internally.
virtual void StartAnimate()
Interaction mode entry points used internally.
virtual void OnMiddleButtonDoubleClick()
virtual void OnSelect3D(vtkEventData *)
vtkTDxInteractorStyle * TDxStyle
virtual void OnFourthButtonDown()
void OnChar() override
OnChar is triggered when an ASCII key is pressed.
virtual void EndRotate()
Interaction mode entry points used internally.
vtkTypeBool AutoAdjustCameraClippingRange
abstract base class for most VTK objects
Definition: vtkObject.h:73
create wireframe outline around bounding box
map vtkPolyData to graphics primitives
represents an 3D object for placement in a rendered scene
Definition: vtkProp3D.h:93
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:67
platform-independent render window interaction including picking and frame rate control.
abstract specification for renderers
Definition: vtkRenderer.h:173
a vtkAbstractArray subclass for strings
provide 3DConnexion device event-driven interface to the rendering window
@ position
Definition: vtkX3D.h:267
int vtkTypeBool
Definition: vtkABI.h:69