VTK  9.4.20241104
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
20#ifndef vtkRenderWindowInteractor3D_h
21#define vtkRenderWindowInteractor3D_h
22
24#include "vtkRenderingCoreModule.h" // For export macro
25
26#include "vtkNew.h" // ivars
27
28VTK_ABI_NAMESPACE_BEGIN
29class vtkCamera;
30class vtkMatrix4x4;
31enum class vtkEventDataDevice;
33
34class VTKRENDERINGCORE_EXPORT vtkRenderWindowInteractor3D : public vtkRenderWindowInteractor
35{
36public:
41
43 void PrintSelf(ostream& os, vtkIndent indent) override;
44
46
55 void Enable() override;
56 void Disable() override;
58
60
65 virtual double* GetWorldEventPosition(int pointerIndex)
66 {
67 if (pointerIndex >= VTKI_MAX_POINTERS)
68 {
69 return nullptr;
70 }
71 return this->WorldEventPositions[pointerIndex];
72 }
73 virtual double* GetLastWorldEventPosition(int pointerIndex)
74 {
75 if (pointerIndex >= VTKI_MAX_POINTERS)
76 {
77 return nullptr;
78 }
79 return this->LastWorldEventPositions[pointerIndex];
80 }
81 virtual double* GetWorldEventOrientation(int pointerIndex)
82 {
83 if (pointerIndex >= VTKI_MAX_POINTERS)
84 {
85 return nullptr;
86 }
87 return this->WorldEventOrientations[pointerIndex];
88 }
89 virtual double* GetLastWorldEventOrientation(int pointerIndex)
90 {
91 if (pointerIndex >= VTKI_MAX_POINTERS)
92 {
93 return nullptr;
94 }
95 return this->LastWorldEventOrientations[pointerIndex];
96 }
97 virtual void GetWorldEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
98 virtual void GetLastWorldEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
100
102
107 virtual void SetPhysicalEventPosition(double x, double y, double z, int pointerIndex)
108 {
109 if (pointerIndex < 0 || pointerIndex >= VTKI_MAX_POINTERS)
110 {
111 return;
112 }
113 vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting PhysicalEventPosition to ("
114 << x << "," << y << "," << z << ") for pointerIndex number " << pointerIndex);
115 if (this->PhysicalEventPositions[pointerIndex][0] != x ||
116 this->PhysicalEventPositions[pointerIndex][1] != y ||
117 this->PhysicalEventPositions[pointerIndex][2] != z ||
118 this->LastPhysicalEventPositions[pointerIndex][0] != x ||
119 this->LastPhysicalEventPositions[pointerIndex][1] != y ||
120 this->LastPhysicalEventPositions[pointerIndex][2] != z)
121 {
122 this->LastPhysicalEventPositions[pointerIndex][0] =
123 this->PhysicalEventPositions[pointerIndex][0];
124 this->LastPhysicalEventPositions[pointerIndex][1] =
125 this->PhysicalEventPositions[pointerIndex][1];
126 this->LastPhysicalEventPositions[pointerIndex][2] =
127 this->PhysicalEventPositions[pointerIndex][2];
128 this->PhysicalEventPositions[pointerIndex][0] = x;
129 this->PhysicalEventPositions[pointerIndex][1] = y;
130 this->PhysicalEventPositions[pointerIndex][2] = z;
131 this->Modified();
132 }
133 }
134 virtual void SetPhysicalEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
136
138
143 virtual void GetPhysicalEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
144 virtual void GetLastPhysicalEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
145 virtual void GetStartingPhysicalEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
147
151 virtual void GetStartingPhysicalToWorldMatrix(vtkMatrix4x4* startingPhysicalToWorldMatrix);
152
164 virtual void SetStartingPhysicalToWorldMatrix(vtkMatrix4x4* startingPhysicalToWorldMatrix);
165
178
180
185 virtual void SetWorldEventPosition(double x, double y, double z, int pointerIndex)
186 {
187 if (pointerIndex < 0 || pointerIndex >= VTKI_MAX_POINTERS)
188 {
189 return;
190 }
191 vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting WorldEventPosition to ("
192 << x << "," << y << "," << z << ") for pointerIndex number " << pointerIndex);
193 if (this->WorldEventPositions[pointerIndex][0] != x ||
194 this->WorldEventPositions[pointerIndex][1] != y ||
195 this->WorldEventPositions[pointerIndex][2] != z ||
196 this->LastWorldEventPositions[pointerIndex][0] != x ||
197 this->LastWorldEventPositions[pointerIndex][1] != y ||
198 this->LastWorldEventPositions[pointerIndex][2] != z)
199 {
200 this->LastWorldEventPositions[pointerIndex][0] = this->WorldEventPositions[pointerIndex][0];
201 this->LastWorldEventPositions[pointerIndex][1] = this->WorldEventPositions[pointerIndex][1];
202 this->LastWorldEventPositions[pointerIndex][2] = this->WorldEventPositions[pointerIndex][2];
203 this->WorldEventPositions[pointerIndex][0] = x;
204 this->WorldEventPositions[pointerIndex][1] = y;
205 this->WorldEventPositions[pointerIndex][2] = z;
206 this->Modified();
207 }
208 }
209 virtual void SetWorldEventOrientation(double w, double x, double y, double z, int pointerIndex)
210 {
211 if (pointerIndex < 0 || pointerIndex >= VTKI_MAX_POINTERS)
212 {
213 return;
214 }
215 vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting WorldEventOrientation to ("
216 << w << "," << x << "," << y << "," << z << ") for pointerIndex number "
217 << pointerIndex);
218 if (this->WorldEventOrientations[pointerIndex][0] != w ||
219 this->WorldEventOrientations[pointerIndex][1] != x ||
220 this->WorldEventOrientations[pointerIndex][2] != y ||
221 this->WorldEventOrientations[pointerIndex][3] != z ||
222 this->LastWorldEventOrientations[pointerIndex][0] != w ||
223 this->LastWorldEventOrientations[pointerIndex][1] != x ||
224 this->LastWorldEventOrientations[pointerIndex][2] != y ||
225 this->LastWorldEventOrientations[pointerIndex][3] != z)
226 {
227 this->LastWorldEventOrientations[pointerIndex][0] =
228 this->WorldEventOrientations[pointerIndex][0];
229 this->LastWorldEventOrientations[pointerIndex][1] =
230 this->WorldEventOrientations[pointerIndex][1];
231 this->LastWorldEventOrientations[pointerIndex][2] =
232 this->WorldEventOrientations[pointerIndex][2];
233 this->LastWorldEventOrientations[pointerIndex][3] =
234 this->WorldEventOrientations[pointerIndex][3];
235 this->WorldEventOrientations[pointerIndex][0] = w;
236 this->WorldEventOrientations[pointerIndex][1] = x;
237 this->WorldEventOrientations[pointerIndex][2] = y;
238 this->WorldEventOrientations[pointerIndex][3] = z;
239 this->Modified();
240 }
241 }
242 virtual void SetWorldEventPose(vtkMatrix4x4* poseMatrix, int pointerIndex);
244
246
249 void RightButtonPressEvent() override;
250 void RightButtonReleaseEvent() override;
252
254
257 void MiddleButtonPressEvent() override;
260
262
267
269
272 virtual void SetPhysicalViewDirection(double, double, double) {}
273 virtual double* GetPhysicalViewDirection() { return nullptr; }
275
277
280 virtual void SetPhysicalViewUp(double, double, double) {}
281 virtual double* GetPhysicalViewUp() { return nullptr; }
283
285
288 virtual void SetPhysicalTranslation(vtkCamera*, double, double, double) {}
289 virtual double* GetPhysicalTranslation(vtkCamera*) { return nullptr; }
291
293
296 virtual void SetPhysicalScale(double) {}
297 virtual double GetPhysicalScale() { return 1.0; }
299
301
304 void SetTranslation3D(double val[3]);
305 vtkGetVector3Macro(Translation3D, double);
306 vtkGetVector3Macro(LastTranslation3D, double);
308
309protected:
312
315 double Translation3D[3];
316 double LastTranslation3D[3];
317
318 double WorldEventPositions[VTKI_MAX_POINTERS][3];
319 double LastWorldEventPositions[VTKI_MAX_POINTERS][3];
320 double PhysicalEventPositions[VTKI_MAX_POINTERS][3];
321 double LastPhysicalEventPositions[VTKI_MAX_POINTERS][3];
322 double StartingPhysicalEventPositions[VTKI_MAX_POINTERS][3];
323 double WorldEventOrientations[VTKI_MAX_POINTERS][4];
324 double LastWorldEventOrientations[VTKI_MAX_POINTERS][4];
329 vtkNew<vtkMatrix4x4> StartingPhysicalEventPoses[VTKI_MAX_POINTERS];
331
336
337private:
339 void operator=(const vtkRenderWindowInteractor3D&) = delete;
340};
341
342VTK_ABI_NAMESPACE_END
343#endif
a virtual camera for 3D rendering
Definition vtkCamera.h:151
a simple class to control print indentation
Definition vtkIndent.h:108
represent and manipulate 4x4 transformation matrices
Allocate and hold a VTK object.
Definition vtkNew.h:167
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 void SetStartingPhysicalToWorldMatrix(vtkMatrix4x4 *startingPhysicalToWorldMatrix)
Set starting physical to world matrix.
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 SetStartingPhysicalEventPose(vtkMatrix4x4 *poseMatrix, vtkEventDataDevice device)
Set starting physical event pose.
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 void GetStartingPhysicalToWorldMatrix(vtkMatrix4x4 *startingPhysicalToWorldMatrix)
Return starting physical to world matrix.
virtual double * GetLastWorldEventPosition(int pointerIndex)
With VR we know the world coordinate positions and orientations of events.
vtkNew< vtkMatrix4x4 > StartingPhysicalToWorldMatrix
Store physical to world matrix at the start of a complex gesture.
platform-independent render window interaction including picking and frame rate control.
vtkEventDataDevice
platform-independent event data structures
vtkEventDataDeviceInput
#define VTKI_MAX_POINTERS