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
125class vtkTransform;
126class vtkMatrix4x4;
128
129class VTKRENDERINGOPENVR_EXPORT vtkOpenVRRenderWindowInteractor : public vtkRenderWindowInteractor3D
130{
131public:
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
245protected:
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
324private:
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.
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