VTK  9.1.0
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 =========================================================================*/
112 #ifndef vtkOpenVRRenderWindowInteractor_h
113 #define vtkOpenVRRenderWindowInteractor_h
114 
115 #include "vtkEventData.h" // for ivar
116 #include "vtkNew.h" // ivars
118 #include "vtkRenderingOpenVRModule.h" // For export macro
119 #include <functional> // for ivar
120 #include <map> // for ivar
121 #include <openvr.h> // for ivar
122 #include <string> // for ivar
123 #include <tuple> // for ivar
124 
125 class vtkTransform;
126 class vtkMatrix4x4;
128 
129 class VTKRENDERINGOPENVR_EXPORT vtkOpenVRRenderWindowInteractor : public vtkRenderWindowInteractor3D
130 {
131 public:
136 
138  void PrintSelf(ostream& os, vtkIndent indent);
139 
143  virtual void Initialize();
144 
146 
152  static void SetClassExitMethod(void (*f)(void*), void* arg);
153  static void SetClassExitMethodArgDelete(void (*f)(void*));
155 
160  virtual void ExitCallback();
161 
163 
167  virtual void SetPhysicalTranslation(vtkCamera*, double, double, double);
169  virtual void SetPhysicalScale(double);
170  virtual double GetPhysicalScale();
172 
178  void ProcessEvents() override;
179 
180  virtual void DoOneEvent(vtkOpenVRRenderWindow* renWin, vtkRenderer* ren);
181 
182  /*
183  * Return the pointer index as a device
184  */
186 
187  /*
188  * Convert a device pose to pose matrices
189  * \param poseMatrixPhysical Optional output pose matrix in physical frame
190  * \param poseMatrixWorld Optional output pose matrix in world frame
191  */
192  void ConvertOpenVRPoseToMatrices(const vr::TrackedDevicePose_t& tdPose,
193  vtkMatrix4x4* poseMatrixWorld, vtkMatrix4x4* poseMatrixPhysical = nullptr);
194 
195  /*
196  * Convert a device pose to a world coordinate position and orientation
197  * \param pos Output world position
198  * \param wxyz Output world orientation quaternion
199  * \param ppos Output physical position
200  * \param wdir Output world view direction (-Z)
201  */
202  void ConvertPoseToWorldCoordinates(const vr::TrackedDevicePose_t& tdPose, double pos[3],
203  double wxyz[4], double ppos[3], double wdir[3]);
205  const float poseMatrix[3][4], double pos[3], double wxyz[4], double ppos[3], double wdir[3]);
206 
208 
211  // void GetTouchPadPosition(vtkEventDataDevice, vtkEventDataDeviceInput, float[3]) override;
213 
214  /*
215  * Return starting physical to world matrix
216  */
217  void GetStartingPhysicalToWorldMatrix(vtkMatrix4x4* startingPhysicalToWorldMatrix);
218 
220 
223  void AddAction(std::string path, vtkCommand::EventIds, bool isAnalog);
224  void AddAction(std::string path, bool isAnalog, std::function<void(vtkEventData*)>);
226  // add an event action
227 
229 
233  vtkGetMacro(ActionManifestFileName, std::string);
234  vtkSetMacro(ActionManifestFileName, std::string);
236 
238 
241  vtkGetMacro(ActionSetName, std::string);
242  vtkSetMacro(ActionSetName, std::string);
244 
245 protected:
248 
250 
255  static void (*ClassExitMethod)(void*);
256  static void (*ClassExitMethodArgDelete)(void*);
257  static void* ClassExitMethodArg;
259 
261 
265  virtual int InternalCreateTimer(int timerId, int timerType, unsigned long duration);
266  virtual int InternalDestroyTimer(int platformTimerId);
268 
274  virtual void StartEventLoop();
275 
280  int DeviceInputDownCount[vtkEventDataNumberOfDevices];
282 
287 
289  {
290  public:
291  vr::VRActionHandle_t ActionHandle;
294  bool UseFunction = false;
295  bool IsAnalog = false;
296  };
297 
298  std::map<std::string, ActionData> ActionMap;
299 
302 
303  vr::VRActionSetHandle_t ActionsetVTK = vr::k_ulInvalidActionSetHandle;
304 
306  {
307  LeftHand = 0,
310  NumberOfTrackers
311  };
312 
314  {
315  vr::VRInputValueHandle_t Source = vr::k_ulInvalidInputValueHandle;
316  // vr::VRActionHandle_t ActionPose = vr::k_ulInvalidActionHandle;
317  // vr::InputPoseActionData_t LastPoseData;
318  vr::TrackedDevicePose_t LastPose;
319  };
320  TrackerActions Trackers[NumberOfTrackers];
321 
323 
324 private:
326  void operator=(const vtkOpenVRRenderWindowInteractor&) = delete;
327 };
328 
329 #endif
a virtual camera for 3D rendering
Definition: vtkCamera.h:155
a simple class to control print indentation
Definition: vtkIndent.h:113
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:145
implements OpenVR specific functions required by vtkRenderWindowInteractor.
void AddAction(std::string path, bool isAnalog, std::function< void(vtkEventData *)>)
Assign an event or std::function to an event path.
static void SetClassExitMethodArgDelete(void(*f)(void *))
Methods to set the default exit method for the class.
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
virtual double * GetPhysicalTranslation(vtkCamera *)
Set/Get the optional translation to map world coordinates into the 3D physical space (meters,...
virtual int InternalDestroyTimer(int platformTimerId)
Win32-specific internal timer methods.
void ConvertOpenVRPoseToMatrices(const vr::TrackedDevicePose_t &tdPose, vtkMatrix4x4 *poseMatrixWorld, vtkMatrix4x4 *poseMatrixPhysical=nullptr)
void ConvertPoseToWorldCoordinates(const vr::TrackedDevicePose_t &tdPose, double pos[3], double wxyz[4], double ppos[3], double wdir[3])
virtual int InternalCreateTimer(int timerId, int timerType, unsigned long duration)
Win32-specific internal timer methods.
vtkEventDataDevice GetPointerDevice()
virtual void RecognizeComplexGesture(vtkEventDataDevice3D *edata)
std::map< std::string, ActionData > ActionMap
virtual void StartEventLoop()
This will start up the event loop and never return.
static void SetClassExitMethod(void(*f)(void *), void *arg)
Methods to set the default exit method for the class.
virtual void SetPhysicalScale(double)
Set/Get the optional translation to map world coordinates into the 3D physical space (meters,...
virtual void Initialize()
Initialize the event handler.
void AddAction(std::string path, vtkCommand::EventIds, bool isAnalog)
Assign an event or std::function to an event path.
virtual void ExitCallback()
These methods correspond to the Exit, User and Pick callbacks.
static vtkOpenVRRenderWindowInteractor * New()
Construct object so that light follows camera motion.
void ConvertPoseMatrixToWorldCoordinates(const float poseMatrix[3][4], double pos[3], double wxyz[4], double ppos[3], double wdir[3])
static void * ClassExitMethodArg
Class variables so an exit method can be defined for this class (used to set different exit methods f...
void ProcessEvents() override
Run the event loop and return.
void GetStartingPhysicalToWorldMatrix(vtkMatrix4x4 *startingPhysicalToWorldMatrix)
Get the latest touchpad or joystick position for a device.
virtual double GetPhysicalScale()
Set/Get the optional translation to map world coordinates into the 3D physical space (meters,...
vtkNew< vtkMatrix4x4 > StartingPhysicalToWorldMatrix
Store physical to world matrix at the start of a multi-touch gesture.
void HandleGripEvents(vtkEventData *ed)
virtual void SetPhysicalTranslation(vtkCamera *, double, double, double)
Set/Get the optional translation to map world coordinates into the 3D physical space (meters,...
virtual void DoOneEvent(vtkOpenVRRenderWindow *renWin, vtkRenderer *ren)
OpenVR rendering window.
adds support for 3D events to vtkRenderWindowInteractor.
abstract specification for renderers
Definition: vtkRenderer.h:173
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:164
@ function
Definition: vtkX3D.h:255
@ string
Definition: vtkX3D.h:496
vtkEventDataDevice
platform-independent event data structures
Definition: vtkEventData.h:26
const int vtkEventDataNumberOfDevices
Definition: vtkEventData.h:36