VTK  9.4.20250106
vtkZSpaceSDKManager.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
32#ifndef vtkZSpaceSDKManager_h
33#define vtkZSpaceSDKManager_h
34
35#include "vtkNew.h" // for vtkNew
36#include "vtkObject.h"
37#include "vtkRenderingZSpaceModule.h" // for export macro
38
39#include <vector> // for std::vector
40
41VTK_ABI_NAMESPACE_BEGIN
42
43class vtkRenderWindow;
44class vtkCamera;
45class vtkMatrix4x4;
46class vtkTransform;
47class vtkPVZSpaceView;
48
49class VTKRENDERINGZSPACE_EXPORT vtkZSpaceSDKManager : public vtkObject
50{
51public:
53 void PrintSelf(ostream& os, vtkIndent indent) override;
54
61
66 virtual void InitializeZSpace() = 0;
67
72 virtual void UpdateViewport() = 0;
73
77 virtual void UpdateTrackers() = 0;
78
83
87 virtual void UpdateButtonState() = 0;
88
93 virtual void CalculateFrustumFit(
94 const double bounds[6], double position[3], double viewUp[3]) = 0;
95
97
101 virtual void BeginFrame() = 0;
102 virtual void EndFrame() = 0;
104
109 virtual void ShutDown(){};
110
112
116 virtual void EnableGraphicsBinding(){};
117 virtual void SubmitFrame(unsigned int vtkNotUsed(leftText), unsigned int vtkNotUsed(rightText)){};
118 virtual void GetPerEyeImageResolution(int* vtkNotUsed(width), int* vtkNotUsed(height)){};
119 virtual void SetStereoDisplayEnabled(bool vtkNotUsed(enabled)){};
120 virtual bool GetStereoDisplayEnabled() { return false; };
122
124 {
125 QUAD_BUFFER_STEREO = 0,
126 STEREO_DISPLAY_API = 1
127 };
128
129 virtual StereoDisplayMode GetStereoDisplayMode() { return QUAD_BUFFER_STEREO; };
130
132
136 virtual void SetRenderWindow(vtkRenderWindow* renderWindow);
138
143 void Update();
144
149 vtkGetMacro(WindowX, int);
150
155 vtkGetMacro(WindowY, int);
156
160 vtkGetMacro(WindowWidth, int);
161
165 vtkGetMacro(WindowHeight, int);
166
170 vtkGetMacro(StylusTargets, int);
171
175 vtkGetMacro(HeadTargets, int);
176
180 vtkGetMacro(SecondaryTargets, int);
181
183
186 vtkGetMacro(InterPupillaryDistance, float);
187 vtkSetClampMacro(InterPupillaryDistance, float, 0.f, 1.f);
189
193 void SetClippingRange(const float nearPlane, const float farPlane);
194
198 vtkGetMacro(ViewerScale, float);
199
203 vtkGetMacro(NearPlane, float);
204
208 vtkGetMacro(FarPlane, float);
209
214 vtkGetObjectMacro(CenterEyeViewMatrix, vtkMatrix4x4);
215
221
226 vtkGetObjectMacro(CenterEyeProjectionMatrix, vtkMatrix4x4);
227
233
239 vtkGetObjectMacro(StylusMatrixColMajor, vtkMatrix4x4);
240
246 vtkGetObjectMacro(StylusMatrixRowMajor, vtkMatrix4x4);
247
252 vtkGetObjectMacro(StylusTransformRowMajor, vtkTransform);
253
255 {
256 MiddleButton = 0,
257 RightButton = 1,
258 LeftButton = 2,
259 NumberOfButtons = 3
260 };
261
263 {
264 Down = 0,
265 Pressed = 1,
266 Up = 2,
267 None = 3,
268 NumberOfStates = 4
269 };
270
272
275 vtkGetMacro(LeftButtonState, int);
276 vtkSetEnumMacro(LeftButtonState, ButtonState);
278
280
283 vtkGetMacro(MiddleButtonState, int);
284 vtkSetEnumMacro(MiddleButtonState, ButtonState);
286
288
291 vtkGetMacro(RightButtonState, int);
292 vtkSetEnumMacro(RightButtonState, ButtonState);
294
295protected:
298
299 vtkRenderWindow* RenderWindow = nullptr;
300
307
308 // In column major format, used by openGL
310
311 // In row major format, used by VTK
314
315 int WindowX = 0;
316 int WindowY = 0;
317 int WindowWidth = 0;
318 int WindowHeight = 0;
319
320 // Store the type for each detected display devices
321 std::vector<std::string> Displays;
322 // The number of stylus
323 int StylusTargets = 0;
324 // The number of glasses
325 int HeadTargets = 0;
326 // Additional targets
327 int SecondaryTargets = 0;
328
329 // Inter pupillary distance in meters
330 float InterPupillaryDistance = 0.056f;
331 float ViewerScale = 1.f;
332 // Camera near plane
333 float NearPlane = 0.0001f;
334 // Camera far plane
335 float FarPlane = 1000.f;
336
337 // For interactions, store the state of each buttons
338 ButtonState LeftButtonState = None;
339 ButtonState MiddleButtonState = None;
340 ButtonState RightButtonState = None;
341 // Store buttons state to iterate over them
342 ButtonState* ButtonsState[NumberOfButtons] = { &MiddleButtonState, &RightButtonState,
343 &LeftButtonState };
344
345private:
347 void operator=(const vtkZSpaceSDKManager&) = delete;
348};
349
350VTK_ABI_NAMESPACE_END
351
352#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
abstract base class for most VTK objects
Definition vtkObject.h:162
create a window for renderers to draw into
describes linear transformations via a 4x4 matrix
Abstract zSpace SDK manager class.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkNew< vtkMatrix4x4 > LeftEyeProjectionMatrix
virtual void EndFrame()=0
Notify the zSpace SDK for the beginning/end of a frame (vtkZSpaceCoreCompatibility only)
virtual void SetRenderWindow(vtkRenderWindow *renderWindow)
Set the render windwow the manager makes viewport computations from.
vtkNew< vtkMatrix4x4 > RightEyeProjectionMatrix
virtual void InitializeZSpace()=0
Initialize the zSpace SDK and check for zSpace devices : the display, the stylus and the head tracker...
vtkSetEnumMacro(RightButtonState, ButtonState)
Get/Set the state of the right button of the stylus.
virtual void SubmitFrame(unsigned int vtkNotUsed(leftText), unsigned int vtkNotUsed(rightText))
These functions are overriden by vtkZSpaceCoreCompatibility (specific to zSpace Inspire).
vtkMatrix4x4 * GetStereoViewMatrix(bool leftEye)
Get the zSpace view matrix for the right or left eye in row major format (VTK format)
void Update()
Update the viewport, the trackers and the camera matrix by calling the zSpace SDK.
~vtkZSpaceSDKManager() override
vtkNew< vtkMatrix4x4 > CenterEyeProjectionMatrix
virtual void ShutDown()
Shutdown the zSpace SDK (clean its internal state).
vtkNew< vtkMatrix4x4 > StylusMatrixRowMajor
vtkNew< vtkMatrix4x4 > StylusMatrixColMajor
virtual StereoDisplayMode GetStereoDisplayMode()
vtkNew< vtkMatrix4x4 > LeftEyeViewMatrix
virtual void UpdateButtonState()=0
Update the stylus buttons state.
virtual void UpdateTrackers()=0
Update the position of the stylus and head trackers.
vtkSetEnumMacro(LeftButtonState, ButtonState)
Get/Set the state of the left button of the stylus.
virtual void EnableGraphicsBinding()
These functions are overriden by vtkZSpaceCoreCompatibility (specific to zSpace Inspire).
virtual void UpdateViewport()=0
Update the zSpace viewport position and size based on the position and size of the application window...
virtual bool GetStereoDisplayEnabled()
These functions are overriden by vtkZSpaceCoreCompatibility (specific to zSpace Inspire).
void SetClippingRange(const float nearPlane, const float farPlane)
Set the near and far plane.
vtkMatrix4x4 * GetStereoProjectionMatrix(bool leftEye)
Get the zSpace projection matrix for the right or left eye in row major format (VTK format)
virtual void BeginFrame()=0
Notify the zSpace SDK for the beginning/end of a frame (vtkZSpaceCoreCompatibility only)
virtual void CalculateFrustumFit(const double bounds[6], double position[3], double viewUp[3])=0
Let zSpace compute the viewer scale, camera position and camera view up from the input bounds.
vtkNew< vtkMatrix4x4 > RightEyeViewMatrix
virtual void SetStereoDisplayEnabled(bool vtkNotUsed(enabled))
These functions are overriden by vtkZSpaceCoreCompatibility (specific to zSpace Inspire).
vtkSetEnumMacro(MiddleButtonState, ButtonState)
Get/Set the state of the middle button of the stylus.
virtual void GetPerEyeImageResolution(int *vtkNotUsed(width), int *vtkNotUsed(height))
These functions are overriden by vtkZSpaceCoreCompatibility (specific to zSpace Inspire).
vtkNew< vtkTransform > StylusTransformRowMajor
std::vector< std::string > Displays
static vtkZSpaceSDKManager * GetInstance()
Return the singleton instance (with no reference counting) of a vtkZSpaceCoreSDKManager or vtkZSpaceC...
virtual void UpdateViewAndProjectionMatrix()=0
Update the zSpace view and projection matrix for each eye.
vtkNew< vtkMatrix4x4 > CenterEyeViewMatrix
@ None
!< For HCURL