VTK  9.3.0
vtkRenderWindowInteractor3D.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
17#ifndef vtkRenderWindowInteractor3D_h
18#define vtkRenderWindowInteractor3D_h
19
21#include "vtkRenderingCoreModule.h" // For export macro
22
23#include "vtkNew.h" // ivars
24
25VTK_ABI_NAMESPACE_BEGIN
26class vtkCamera;
27class vtkMatrix4x4;
28enum class vtkEventDataDevice;
30
31class VTKRENDERINGCORE_EXPORT vtkRenderWindowInteractor3D : public vtkRenderWindowInteractor
32{
33public:
38
40 void PrintSelf(ostream& os, vtkIndent indent) override;
41
43
52 void Enable() override;
53 void Disable() override;
55
57
62 virtual double* GetWorldEventPosition(int pointerIndex)
63 {
64 if (pointerIndex >= VTKI_MAX_POINTERS)
65 {
66 return nullptr;
67 }
68 return this->WorldEventPositions[pointerIndex];
69 }
70 virtual double* GetLastWorldEventPosition(int pointerIndex)
71 {
72 if (pointerIndex >= VTKI_MAX_POINTERS)
73 {
74 return nullptr;
75 }
76 return this->LastWorldEventPositions[pointerIndex];
77 }
78 virtual double* GetWorldEventOrientation(int pointerIndex)
79 {
80 if (pointerIndex >= VTKI_MAX_POINTERS)
81 {
82 return nullptr;
83 }
84 return this->WorldEventOrientations[pointerIndex];
85 }
86 virtual double* GetLastWorldEventOrientation(int pointerIndex)
87 {
88 if (pointerIndex >= VTKI_MAX_POINTERS)
89 {
90 return nullptr;
91 }
92 return this->LastWorldEventOrientations[pointerIndex];
93 }
94 virtual void GetWorldEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
95 virtual void GetLastWorldEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
97
99
104 virtual void SetPhysicalEventPosition(double x, double y, double z, int pointerIndex)
105 {
106 if (pointerIndex < 0 || pointerIndex >= VTKI_MAX_POINTERS)
107 {
108 return;
109 }
110 vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting PhysicalEventPosition to ("
111 << x << "," << y << "," << z << ") for pointerIndex number " << pointerIndex);
112 if (this->PhysicalEventPositions[pointerIndex][0] != x ||
113 this->PhysicalEventPositions[pointerIndex][1] != y ||
114 this->PhysicalEventPositions[pointerIndex][2] != z ||
115 this->LastPhysicalEventPositions[pointerIndex][0] != x ||
116 this->LastPhysicalEventPositions[pointerIndex][1] != y ||
117 this->LastPhysicalEventPositions[pointerIndex][2] != z)
118 {
119 this->LastPhysicalEventPositions[pointerIndex][0] =
120 this->PhysicalEventPositions[pointerIndex][0];
121 this->LastPhysicalEventPositions[pointerIndex][1] =
122 this->PhysicalEventPositions[pointerIndex][1];
123 this->LastPhysicalEventPositions[pointerIndex][2] =
124 this->PhysicalEventPositions[pointerIndex][2];
125 this->PhysicalEventPositions[pointerIndex][0] = x;
126 this->PhysicalEventPositions[pointerIndex][1] = y;
127 this->PhysicalEventPositions[pointerIndex][2] = z;
128 this->Modified();
129 }
130 }
131 virtual void SetPhysicalEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
133
135
140 virtual void GetPhysicalEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
141 virtual void GetLastPhysicalEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
142 virtual void GetStartingPhysicalEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
144
146
151 virtual void SetWorldEventPosition(double x, double y, double z, int pointerIndex)
152 {
153 if (pointerIndex < 0 || pointerIndex >= VTKI_MAX_POINTERS)
154 {
155 return;
156 }
157 vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting WorldEventPosition to ("
158 << x << "," << y << "," << z << ") for pointerIndex number " << pointerIndex);
159 if (this->WorldEventPositions[pointerIndex][0] != x ||
160 this->WorldEventPositions[pointerIndex][1] != y ||
161 this->WorldEventPositions[pointerIndex][2] != z ||
162 this->LastWorldEventPositions[pointerIndex][0] != x ||
163 this->LastWorldEventPositions[pointerIndex][1] != y ||
164 this->LastWorldEventPositions[pointerIndex][2] != z)
165 {
166 this->LastWorldEventPositions[pointerIndex][0] = this->WorldEventPositions[pointerIndex][0];
167 this->LastWorldEventPositions[pointerIndex][1] = this->WorldEventPositions[pointerIndex][1];
168 this->LastWorldEventPositions[pointerIndex][2] = this->WorldEventPositions[pointerIndex][2];
169 this->WorldEventPositions[pointerIndex][0] = x;
170 this->WorldEventPositions[pointerIndex][1] = y;
171 this->WorldEventPositions[pointerIndex][2] = z;
172 this->Modified();
173 }
174 }
175 virtual void SetWorldEventOrientation(double w, double x, double y, double z, int pointerIndex)
176 {
177 if (pointerIndex < 0 || pointerIndex >= VTKI_MAX_POINTERS)
178 {
179 return;
180 }
181 vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting WorldEventOrientation to ("
182 << w << "," << x << "," << y << "," << z << ") for pointerIndex number "
183 << pointerIndex);
184 if (this->WorldEventOrientations[pointerIndex][0] != w ||
185 this->WorldEventOrientations[pointerIndex][1] != x ||
186 this->WorldEventOrientations[pointerIndex][2] != y ||
187 this->WorldEventOrientations[pointerIndex][3] != z ||
188 this->LastWorldEventOrientations[pointerIndex][0] != w ||
189 this->LastWorldEventOrientations[pointerIndex][1] != x ||
190 this->LastWorldEventOrientations[pointerIndex][2] != y ||
191 this->LastWorldEventOrientations[pointerIndex][3] != z)
192 {
193 this->LastWorldEventOrientations[pointerIndex][0] =
194 this->WorldEventOrientations[pointerIndex][0];
195 this->LastWorldEventOrientations[pointerIndex][1] =
196 this->WorldEventOrientations[pointerIndex][1];
197 this->LastWorldEventOrientations[pointerIndex][2] =
198 this->WorldEventOrientations[pointerIndex][2];
199 this->LastWorldEventOrientations[pointerIndex][3] =
200 this->WorldEventOrientations[pointerIndex][3];
201 this->WorldEventOrientations[pointerIndex][0] = w;
202 this->WorldEventOrientations[pointerIndex][1] = x;
203 this->WorldEventOrientations[pointerIndex][2] = y;
204 this->WorldEventOrientations[pointerIndex][3] = z;
205 this->Modified();
206 }
207 }
208 virtual void SetWorldEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
210
212
215 void RightButtonPressEvent() override;
216 void RightButtonReleaseEvent() override;
218
220
223 void MiddleButtonPressEvent() override;
226
228
233
235
238 virtual void SetPhysicalViewDirection(double, double, double){};
239 virtual double* GetPhysicalViewDirection() { return nullptr; };
241
243
246 virtual void SetPhysicalViewUp(double, double, double){};
247 virtual double* GetPhysicalViewUp() { return nullptr; };
249
251
254 virtual void SetPhysicalTranslation(vtkCamera*, double, double, double) {}
255 virtual double* GetPhysicalTranslation(vtkCamera*) { return nullptr; }
257
259
262 virtual void SetPhysicalScale(double) {}
263 virtual double GetPhysicalScale() { return 1.0; }
265
267
270 void SetTranslation3D(double val[3]);
271 vtkGetVector3Macro(Translation3D, double);
272 vtkGetVector3Macro(LastTranslation3D, double);
274
275protected:
278
281 double Translation3D[3];
282 double LastTranslation3D[3];
283
284 double WorldEventPositions[VTKI_MAX_POINTERS][3];
285 double LastWorldEventPositions[VTKI_MAX_POINTERS][3];
286 double PhysicalEventPositions[VTKI_MAX_POINTERS][3];
287 double LastPhysicalEventPositions[VTKI_MAX_POINTERS][3];
288 double StartingPhysicalEventPositions[VTKI_MAX_POINTERS][3];
289 double WorldEventOrientations[VTKI_MAX_POINTERS][4];
290 double LastWorldEventOrientations[VTKI_MAX_POINTERS][4];
295 vtkNew<vtkMatrix4x4> StartingPhysicalEventPoses[VTKI_MAX_POINTERS];
297
298private:
300 void operator=(const vtkRenderWindowInteractor3D&) = delete;
301};
302
303VTK_ABI_NAMESPACE_END
304#endif
a virtual camera for 3D rendering
Definition vtkCamera.h:41
a simple class to control print indentation
Definition vtkIndent.h:29
represent and manipulate 4x4 transformation matrices
Allocate and hold a VTK object.
Definition vtkNew.h:51
const char * GetClassName() const
Return the class name as a string.
virtual void Modified()
Update the modification time for this object.
adds support for 3D events to vtkRenderWindowInteractor.
void Disable() override
Enable/Disable interactions.
virtual double * GetPhysicalTranslation(vtkCamera *)
Set/get position of the physical coordinate system origin in world coordinates.
virtual void SetPhysicalViewUp(double, double, double)
Set/get the direction of the physical coordinate system +Y axis in world coordinates.
virtual void SetPhysicalViewDirection(double, double, double)
Set/get the direction of the physical coordinate system -Z axis in world coordinates.
virtual void GetPhysicalEventPose(vtkMatrix4x4 *poseMatrix, int pointerIndex)
With VR we know the physical/room coordinate positions and orientations of events.
void RightButtonPressEvent() override
Override to set pointers down.
void SetTranslation3D(double val[3])
Set/get the translation for pan/swipe gestures, update LastTranslation.
virtual void SetWorldEventPosition(double x, double y, double z, int pointerIndex)
With VR we know the world coordinate positions and orientations of events.
virtual void GetTouchPadPosition(vtkEventDataDevice, vtkEventDataDeviceInput, float[3])
Get the latest touchpad or joystick position for a device.
virtual double GetPhysicalScale()
Set/get the physical scale (world / physical distance ratio)
void RecognizeGesture(vtkCommand::EventIds) override
virtual void SetWorldEventOrientation(double w, double x, double y, double z, int pointerIndex)
With VR we know the world coordinate positions and orientations of events.
virtual double * GetPhysicalViewUp()
Set/get the direction of the physical coordinate system +Y axis in world coordinates.
void RightButtonReleaseEvent() override
Override to set pointers down.
virtual void SetWorldEventPose(vtkMatrix4x4 *poseMatrix, int pointerIndex)
With VR we know the world coordinate positions and orientations of events.
~vtkRenderWindowInteractor3D() override
virtual void SetPhysicalEventPosition(double x, double y, double z, int pointerIndex)
With VR we know the physical/room coordinate positions and orientations of events.
virtual void GetLastWorldEventPose(vtkMatrix4x4 *poseMatrix, int pointerIndex)
With VR we know the world coordinate positions and orientations of events.
virtual double * GetLastWorldEventOrientation(int pointerIndex)
With VR we know the world coordinate positions and orientations of events.
virtual void SetPhysicalScale(double)
Set/get the physical scale (world / physical distance ratio)
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void SetPhysicalTranslation(vtkCamera *, double, double, double)
Set/get position of the physical coordinate system origin in world coordinates.
virtual double * GetWorldEventOrientation(int pointerIndex)
With VR we know the world coordinate positions and orientations of events.
virtual double * GetPhysicalViewDirection()
Set/get the direction of the physical coordinate system -Z axis in world coordinates.
virtual void GetWorldEventPose(vtkMatrix4x4 *poseMatrix, int pointerIndex)
With VR we know the world coordinate positions and orientations of events.
void MiddleButtonPressEvent() override
Override to set pointers down.
virtual double * GetWorldEventPosition(int pointerIndex)
With VR we know the world coordinate positions and orientations of events.
static vtkRenderWindowInteractor3D * New()
Construct object so that light follows camera motion.
void MiddleButtonReleaseEvent() override
Override to set pointers down.
virtual void GetLastPhysicalEventPose(vtkMatrix4x4 *poseMatrix, int pointerIndex)
With VR we know the physical/room coordinate positions and orientations of events.
virtual void SetPhysicalEventPose(vtkMatrix4x4 *poseMatrix, int pointerIndex)
With VR we know the physical/room coordinate positions and orientations of events.
virtual void GetStartingPhysicalEventPose(vtkMatrix4x4 *poseMatrix, int pointerIndex)
With VR we know the physical/room coordinate positions and orientations of events.
void Enable() override
Enable/Disable interactions.
virtual double * GetLastWorldEventPosition(int pointerIndex)
With VR we know the world coordinate positions and orientations of events.
platform-independent render window interaction including picking and frame rate control.
vtkEventDataDevice
platform-independent event data structures
vtkEventDataDeviceInput
#define VTKI_MAX_POINTERS