VTK  9.3.20240418
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 
41 VTK_ABI_NAMESPACE_BEGIN
42 
43 class vtkRenderWindow;
44 class vtkCamera;
45 class vtkMatrix4x4;
46 class vtkTransform;
47 class vtkPVZSpaceView;
48 
49 class VTKRENDERINGZSPACE_EXPORT vtkZSpaceSDKManager : public vtkObject
50 {
51 public:
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 
82  virtual void UpdateViewAndProjectionMatrix() = 0;
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 
295 protected:
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 
345 private:
346  vtkZSpaceSDKManager(const vtkZSpaceSDKManager&) = delete;
347  void operator=(const vtkZSpaceSDKManager&) = delete;
348 };
349 
350 VTK_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
Definition: vtkMatrix4x4.h:141
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
Definition: vtkTransform.h:160
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
static vtkZSpaceSDKManager * GetInstance()
Return the singleton instance (with no reference counting) of a vtkZSpaceCoreSDKManager or vtkZSpaceC...
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).
void Update()
Update the viewport, the trackers and the camera matrix by calling the zSpace SDK.
vtkMatrix4x4 * GetStereoViewMatrix(bool leftEye)
Get the zSpace view matrix for the right or left eye in row major format (VTK format)
~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...
vtkMatrix4x4 * GetStereoProjectionMatrix(bool leftEye)
Get the zSpace projection matrix for the right or left eye in row major format (VTK format)
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.
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
virtual void UpdateViewAndProjectionMatrix()=0
Update the zSpace view and projection matrix for each eye.
vtkNew< vtkMatrix4x4 > CenterEyeViewMatrix
@ height
Definition: vtkX3D.h:254
@ enabled
Definition: vtkX3D.h:259
@ position
Definition: vtkX3D.h:261