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=========================================================================*/
122#ifndef vtkOpenVRRenderWindowInteractor_h
123#define vtkOpenVRRenderWindowInteractor_h
124
125#include "vtkEventData.h" // for ivar
126#include "vtkNew.h" // ivars
128#include "vtkRenderingOpenVRModule.h" // For export macro
129#include <functional> // for ivar
130#include <map> // for ivar
131#include <openvr.h> // for ivar
132#include <string> // for ivar
133#include <tuple> // for ivar
134
135class vtkTransform;
136class vtkMatrix4x4;
138
139class VTKRENDERINGOPENVR_EXPORT vtkOpenVRRenderWindowInteractor : public vtkRenderWindowInteractor3D
140{
141public:
146
148 void PrintSelf(ostream& os, vtkIndent indent);
149
153 virtual void Initialize();
154
156
162 static void SetClassExitMethod(void (*f)(void*), void* arg);
163 static void SetClassExitMethodArgDelete(void (*f)(void*));
165
170 virtual void ExitCallback();
171
173
177 virtual void SetPhysicalTranslation(vtkCamera*, double, double, double);
179 virtual void SetPhysicalScale(double);
180 virtual double GetPhysicalScale();
182
188 void ProcessEvents() override;
189
190 virtual void DoOneEvent(vtkOpenVRRenderWindow* renWin, vtkRenderer* ren);
191
192 /*
193 * Return the pointer index as a device
194 */
196
197 /*
198 * Convert a device pose to pose matrices
199 * \param poseMatrixPhysical Optional output pose matrix in physical frame
200 * \param poseMatrixWorld Optional output pose matrix in world frame
201 */
202 void ConvertOpenVRPoseToMatrices(const vr::TrackedDevicePose_t& tdPose,
203 vtkMatrix4x4* poseMatrixWorld, vtkMatrix4x4* poseMatrixPhysical = nullptr);
204
205 /*
206 * Convert a device pose to a world coordinate position and orientation
207 * \param pos Output world position
208 * \param wxyz Output world orientation quaternion
209 * \param ppos Output physical position
210 * \param wdir Output world view direction (-Z)
211 */
212 void ConvertPoseToWorldCoordinates(const vr::TrackedDevicePose_t& tdPose, double pos[3],
213 double wxyz[4], double ppos[3], double wdir[3]);
215 const float poseMatrix[3][4], double pos[3], double wxyz[4], double ppos[3], double wdir[3]);
216
218
221 // void GetTouchPadPosition(vtkEventDataDevice, vtkEventDataDeviceInput, float[3]) override;
223
224 /*
225 * Return starting physical to world matrix
226 */
227 void GetStartingPhysicalToWorldMatrix(vtkMatrix4x4* startingPhysicalToWorldMatrix);
228
230
233 void AddAction(std::string path, vtkCommand::EventIds, bool isAnalog);
234 void AddAction(std::string path, bool isAnalog, std::function<void(vtkEventData*)>);
236 // add an event action
237
239
243 vtkGetMacro(ActionManifestFileName, std::string);
244 vtkSetMacro(ActionManifestFileName, std::string);
246
248
251 vtkGetMacro(ActionSetName, std::string);
252 vtkSetMacro(ActionSetName, std::string);
254
255protected:
258
260
265 static void (*ClassExitMethod)(void*);
266 static void (*ClassExitMethodArgDelete)(void*);
267 static void* ClassExitMethodArg;
269
271
275 virtual int InternalCreateTimer(int timerId, int timerType, unsigned long duration);
276 virtual int InternalDestroyTimer(int platformTimerId);
278
284 virtual void StartEventLoop();
285
290 int DeviceInputDownCount[vtkEventDataNumberOfDevices];
292
297
299 {
300 public:
301 vr::VRActionHandle_t ActionHandle;
304 bool UseFunction = false;
305 bool IsAnalog = false;
306 };
307
308 std::map<std::string, ActionData> ActionMap;
309
312
313 vr::VRActionSetHandle_t ActionsetVTK = vr::k_ulInvalidActionSetHandle;
314
316 {
317 LeftHand = 0,
320 NumberOfTrackers
321 };
322
324 {
325 vr::VRInputValueHandle_t Source = vr::k_ulInvalidInputValueHandle;
326 // vr::VRActionHandle_t ActionPose = vr::k_ulInvalidActionHandle;
327 // vr::InputPoseActionData_t LastPoseData;
328 vr::TrackedDevicePose_t LastPose;
329 };
330 TrackerActions Trackers[NumberOfTrackers];
331
333
334private:
336 void operator=(const vtkOpenVRRenderWindowInteractor&) = delete;
337};
338
339#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.
virtual double * GetPhysicalTranslation(vtkCamera *)
Set/Get the optional translation to map world coordinates into the 3D physical space (meters,...
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
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.
static vtkOpenVRRenderWindowInteractor * New()
Construct object so that light follows camera motion.
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.
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