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=========================================================================*/
23#ifndef vtkOpenVRRenderWindowInteractor_h
24#define vtkOpenVRRenderWindowInteractor_h
25
26#include "vtkEventData.h" // for ivar
27#include "vtkNew.h" // ivars
29#include "vtkRenderingOpenVRModule.h" // For export macro
30#include <functional> // for ivar
31#include <map> // for ivar
32#include <openvr.h> // for ivar
33#include <string> // for ivar
34#include <tuple> // for ivar
35
36class vtkTransform;
37class vtkMatrix4x4;
39
40class VTKRENDERINGOPENVR_EXPORT vtkOpenVRRenderWindowInteractor : public vtkRenderWindowInteractor3D
41{
42public:
47
49 void PrintSelf(ostream& os, vtkIndent indent);
50
54 virtual void Initialize();
55
57
63 static void SetClassExitMethod(void (*f)(void*), void* arg);
64 static void SetClassExitMethodArgDelete(void (*f)(void*));
66
71 virtual void ExitCallback();
72
74
78 virtual void SetPhysicalTranslation(vtkCamera*, double, double, double);
80 virtual void SetPhysicalScale(double);
81 virtual double GetPhysicalScale();
83
89 void ProcessEvents() override;
90
91 virtual void DoOneEvent(vtkOpenVRRenderWindow* renWin, vtkRenderer* ren);
92
93 /*
94 * Return the pointer index as a device
95 */
97
98 /*
99 * Convert a device pose to pose matrices
100 * \param poseMatrixPhysical Optional output pose matrix in physical frame
101 * \param poseMatrixWorld Optional output pose matrix in world frame
102 */
103 void ConvertOpenVRPoseToMatrices(const vr::TrackedDevicePose_t& tdPose,
104 vtkMatrix4x4* poseMatrixWorld, vtkMatrix4x4* poseMatrixPhysical = nullptr);
105
106 /*
107 * Convert a device pose to a world coordinate position and orientation
108 * \param pos Output world position
109 * \param wxyz Output world orientation quaternion
110 * \param ppos Output physical position
111 * \param wdir Output world view direction (-Z)
112 */
113 void ConvertPoseToWorldCoordinates(const vr::TrackedDevicePose_t& tdPose, double pos[3],
114 double wxyz[4], double ppos[3], double wdir[3]);
116 const float poseMatrix[3][4], double pos[3], double wxyz[4], double ppos[3], double wdir[3]);
117
119
122 // void GetTouchPadPosition(vtkEventDataDevice, vtkEventDataDeviceInput, float[3]) override;
124
125 /*
126 * Return starting physical to world matrix
127 */
128 void GetStartingPhysicalToWorldMatrix(vtkMatrix4x4* startingPhysicalToWorldMatrix);
129
131
134 void AddAction(std::string path, vtkCommand::EventIds, bool isAnalog);
135 void AddAction(std::string path, bool isAnalog, std::function<void(vtkEventData*)>);
137 // add an event action
138
140
144 vtkGetMacro(ActionManifestFileName, std::string);
145 vtkSetMacro(ActionManifestFileName, std::string);
147
149
152 vtkGetMacro(ActionSetName, std::string);
153 vtkSetMacro(ActionSetName, std::string);
155
156protected:
159
161
166 static void (*ClassExitMethod)(void*);
167 static void (*ClassExitMethodArgDelete)(void*);
168 static void* ClassExitMethodArg;
170
172
176 virtual int InternalCreateTimer(int timerId, int timerType, unsigned long duration);
177 virtual int InternalDestroyTimer(int platformTimerId);
179
185 virtual void StartEventLoop();
186
191 int DeviceInputDownCount[vtkEventDataNumberOfDevices];
193
198
200 {
201 public:
202 vr::VRActionHandle_t ActionHandle;
204 std::function<void(vtkEventData*)> Function;
205 bool UseFunction = false;
206 bool IsAnalog = false;
207 };
208
209 std::map<std::string, ActionData> ActionMap;
210
212 std::string ActionSetName;
213
214 vr::VRActionSetHandle_t ActionsetVTK = vr::k_ulInvalidActionSetHandle;
215
217 {
218 LeftHand = 0,
221 NumberOfTrackers
222 };
223
225 {
226 vr::VRInputValueHandle_t Source = vr::k_ulInvalidInputValueHandle;
227 // vr::VRActionHandle_t ActionPose = vr::k_ulInvalidActionHandle;
228 // vr::InputPoseActionData_t LastPoseData;
229 vr::TrackedDevicePose_t LastPose;
230 };
231 TrackerActions Trackers[NumberOfTrackers];
232
234
235private:
237 void operator=(const vtkOpenVRRenderWindowInteractor&) = delete;
238};
239
240#endif
a virtual camera for 3D rendering
Definition vtkCamera.h:46
a simple class to control print indentation
Definition vtkIndent.h:34
represent and manipulate 4x4 transformation matrices
Allocate and hold a VTK object.
Definition vtkNew.h:56
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:64
describes linear transformations via a 4x4 matrix
vtkEventDataDevice
platform-independent event data structures
const int vtkEventDataNumberOfDevices