VTK  9.0.1
vtkOpenVRRenderWindowInteractor.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkOpenVRRenderWindowInteractor.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 =========================================================================*/
23 #ifndef vtkOpenVRRenderWindowInteractor_h
24 #define vtkOpenVRRenderWindowInteractor_h
25 
27 #include "vtkRenderingOpenVRModule.h" // For export macro
28 
29 #include "vtkNew.h" // ivars
30 #include "vtkOpenVRRenderWindow.h" // ivars
31 
32 class vtkTransform;
33 class vtkMatrix4x4;
34 
35 class VTKRENDERINGOPENVR_EXPORT vtkOpenVRRenderWindowInteractor : public vtkRenderWindowInteractor3D
36 {
37 public:
42 
44  void PrintSelf(ostream& os, vtkIndent indent);
45 
49  virtual void Initialize();
50 
52 
58  static void SetClassExitMethod(void (*f)(void*), void* arg);
59  static void SetClassExitMethodArgDelete(void (*f)(void*));
61 
66  virtual void ExitCallback();
67 
69 
73  virtual void SetPhysicalTranslation(vtkCamera*, double, double, double);
74  virtual double* GetPhysicalTranslation(vtkCamera*);
75  virtual void SetPhysicalScale(double);
76  virtual double GetPhysicalScale();
78 
84  void ProcessEvents() override;
85 
86  virtual void DoOneEvent(vtkOpenVRRenderWindow* renWin, vtkRenderer* ren);
87 
88  /*
89  * Return the pointer index as a device
90  */
91  vtkEventDataDevice GetPointerDevice();
92 
93  /*
94  * Convert a device pose to pose matrices
95  * \param poseMatrixPhysical Optional output pose matrix in physical frame
96  * \param poseMatrixWorld Optional output pose matrix in world frame
97  */
98  void ConvertOpenVRPoseToMatrices(const vr::TrackedDevicePose_t& tdPose,
99  vtkMatrix4x4* poseMatrixWorld, vtkMatrix4x4* poseMatrixPhysical = nullptr);
100 
101  /*
102  * Convert a device pose to a world coordinate position and orientation
103  * \param pos Output world position
104  * \param wxyz Output world orientation quaternion
105  * \param ppos Output physical position
106  * \param wdir Output world view direction (-Z)
107  */
108  void ConvertPoseToWorldCoordinates(const vr::TrackedDevicePose_t& tdPose, double pos[3],
109  double wxyz[4], double ppos[3], double wdir[3]);
110 
112 
117 
118  /*
119  * Return starting physical to world matrix
120  */
121  void GetStartingPhysicalToWorldMatrix(vtkMatrix4x4* startingPhysicalToWorldMatrix);
122 
123 protected:
126 
128 
133  static void (*ClassExitMethod)(void*);
134  static void (*ClassExitMethodArgDelete)(void*);
135  static void* ClassExitMethodArg;
137 
139 
143  virtual int InternalCreateTimer(int timerId, int timerType, unsigned long duration);
144  virtual int InternalDestroyTimer(int platformTimerId);
146 
152  virtual void StartEventLoop();
153 
158  int DeviceInputDown[VTKI_MAX_POINTERS][2];
159  int DeviceInputDownCount[2];
160  virtual void RecognizeComplexGesture(vtkEventDataDevice3D* edata);
161 
166 
167 private:
169  void operator=(const vtkOpenVRRenderWindowInteractor&) = delete;
170 };
171 
172 #endif
virtual void SetPhysicalTranslation(vtkCamera *, double, double, double)
Set/Get the optional scale translation to map world coordinates into the 3D physical space (meters...
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:35
implements OpenVR specific functions required by vtkRenderWindowInteractor.
vtkEventDataDeviceInput
Definition: vtkEventData.h:38
virtual int InternalDestroyTimer(int platformTimerId)
Internal methods for creating and destroying timers that must be implemented by subclasses.
virtual int InternalCreateTimer(int timerId, int timerType, unsigned long duration)
Internal methods for creating and destroying timers that must be implemented by subclasses.
adds support for 3D events to vtkRenderWindowInteractor.
static void * ClassExitMethodArg
Class variables so an exit method can be defined for this class (used to set different exit methods f...
abstract specification for renderers
Definition: vtkRenderer.h:58
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:54
virtual double * GetPhysicalTranslation(vtkCamera *)
Set/Get the optional scale translation to map world coordinates into the 3D physical space (meters...
virtual void Initialize()
Prepare for handling events and set the Enabled flag to true.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
a simple class to control print indentation
Definition: vtkIndent.h:33
virtual void ExitCallback()
These methods correspond to the Exit, User and Pick callbacks.
a virtual camera for 3D rendering
Definition: vtkCamera.h:45
virtual void StartEventLoop()
Run the event loop (does not return until TerminateApp is called).
virtual double GetPhysicalScale()
Set/Get the optional scale translation to map world coordinates into the 3D physical space (meters...
vtkEventDataDevice
platform-independent event data structures
Definition: vtkEventData.h:25
virtual void ProcessEvents()
Run the event loop and return.
vtkNew< vtkMatrix4x4 > StartingPhysicalToWorldMatrix
Store physical to world matrix at the start of a multi-touch gesture.
virtual void SetPhysicalScale(double)
Set/Get the optional scale translation to map world coordinates into the 3D physical space (meters...
virtual void GetTouchPadPosition(vtkEventDataDevice, vtkEventDataDeviceInput, float[3])
Get the latest touchpad or joystick position for a device.
OpenVR rendering window.
#define VTKI_MAX_POINTERS
static vtkRenderWindowInteractor3D * New()
Construct object so that light follows camera motion.