VTK  9.2.6
vtkVRInteractorStyle.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3 Program: Visualization Toolkit
4 Module: vtkVRInteractorStyle.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 =========================================================================*/
25 #ifndef vtkVRInteractorStyle_h
26 #define vtkVRInteractorStyle_h
27 
28 #include "vtkEventData.h" // for enums
29 #include "vtkInteractorStyle3D.h"
30 #include "vtkNew.h" // for vtkNew
31 #include "vtkRenderingVRModule.h" // For export macro
32 #include "vtkSmartPointer.h" // for vtkSmartPointer
33 
34 #include <map> // for std::map
35 #include <vector> // for std::vector
36 
37 class vtkCallbackCommand;
38 class vtkCell;
39 class vtkPlane;
41 class vtkSelection;
42 class vtkSphereSource;
43 class vtkTextActor3D;
47 class vtkVRMenuWidget;
48 
49 class VTKRENDERINGVR_EXPORT vtkVRInteractorStyle : public vtkInteractorStyle3D
50 {
51 public:
53  void PrintSelf(ostream& os, vtkIndent indent) override;
54 
56 
59  void OnSelect3D(vtkEventData* edata) override;
60  void OnNextPose3D(vtkEventData* edata) override;
61  void OnViewerMovement3D(vtkEventData* edata) override;
62  void OnMove3D(vtkEventData* edata) override;
63  void OnMenu3D(vtkEventData* edata) override;
64  void OnElevation3D(vtkEventData* edata) override;
66 
68 
71  void StartPick(vtkEventDataDevice3D*);
72  void EndPick(vtkEventDataDevice3D*);
73  void StartLoadCamPose(vtkEventDataDevice3D*);
74  void EndLoadCamPose(vtkEventDataDevice3D*);
75  void StartPositionProp(vtkEventDataDevice3D*);
76  void EndPositionProp(vtkEventDataDevice3D*);
77  void StartClip(vtkEventDataDevice3D*);
78  void EndClip(vtkEventDataDevice3D*);
79  void StartMovement3D(int interactionState, vtkEventDataDevice3D*);
80  void EndMovement3D(vtkEventDataDevice3D*);
82 
84 
87  void OnPan() override;
88  void OnPinch() override;
89  void OnRotate() override;
91 
93 
96  void ProbeData(vtkEventDataDevice controller);
97  void PositionProp(vtkEventData*, double* lwpos = nullptr, double* lwori = nullptr) override;
98  void Clip(vtkEventDataDevice3D*);
99  virtual void LoadNextCameraPose() = 0;
101 
106  void GroundMovement3D(vtkEventDataDevice3D*);
107 
112  void Elevation3D(vtkEventDataDevice3D*);
113 
115 
120  void MapInputToAction(vtkCommand::EventIds eid, int state);
121  void MapInputToAction(vtkCommand::EventIds eid, vtkEventDataAction action, int state);
123 
127  void AddTooltipForInput(
128  vtkEventDataDevice device, vtkEventDataDeviceInput input, const std::string& text = "");
129 
133  virtual vtkVRControlsHelper* MakeControlsHelper() = 0;
134 
136 
141  vtkSetMacro(HoverPick, bool);
142  vtkGetMacro(HoverPick, bool);
143  vtkBooleanMacro(HoverPick, bool);
145 
147 
151  vtkSetMacro(GrabWithRay, bool);
152  vtkGetMacro(GrabWithRay, bool);
153  vtkBooleanMacro(GrabWithRay, bool);
155 
157  {
159  GROUNDED_STYLE
160  };
161 
163 
167  vtkSetMacro(Style, MovementStyle);
168  vtkGetMacro(Style, MovementStyle);
170 
175  {
176  return this->InteractionState[static_cast<int>(device)];
177  }
178 
180 
183  void ShowRay(vtkEventDataDevice controller);
184  void HideRay(vtkEventDataDevice controller);
186 
188 
191  void ShowBillboard(const std::string& text);
192  void HideBillboard();
194 
199  void ShowPickSphere(double* pos, double radius, vtkProp3D*);
200 
206  void ShowPickCell(vtkCell* cell, vtkProp3D*);
207 
211  void HidePickActor();
212 
214 
217  void ToggleDrawControls();
218  void SetDrawControls(bool);
220 
224  void SetInteractor(vtkRenderWindowInteractor* iren) override;
225 
229  virtual void SetupActions(vtkRenderWindowInteractor* iren) = 0;
230 
234  vtkVRMenuWidget* GetMenu() { return this->Menu.Get(); }
235 
236 protected:
238  ~vtkVRInteractorStyle() override;
239 
243  void UpdateRay(vtkEventDataDevice controller);
244 
245  void EndPickCallback(vtkSelection* sel);
246  static void MenuCallback(
247  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
248 
252  void StartAction(int VTKIS_STATE, vtkEventDataDevice3D* edata);
253  void EndAction(int VTKIS_STATE, vtkEventDataDevice3D* edata);
254 
258  bool HardwareSelect(vtkEventDataDevice controller, bool actorPassOnly);
259 
263  void Movement3D(int interactionState, vtkEventData* edata);
264 
265  bool HoverPick = false;
266  bool GrabWithRay = true;
267 
271 
276 
277  // Device input to interaction state mapping
278  std::map<std::tuple<vtkCommand::EventIds, vtkEventDataAction>, int> InputMap;
280 
281  // Store required controllers information when performing action
282  int InteractionState[vtkEventDataNumberOfDevices];
283  std::vector<vtkSmartPointer<vtkProp3D>> InteractionProps;
284  std::vector<vtkSmartPointer<vtkPlane>> ClippingPlanes;
285 
286  // Store headset world orientation
287  double HeadsetDir[3] = { 0, 0, 0 };
288 
289  // Store movement style
291 
292 private:
294  void operator=(const vtkVRInteractorStyle&) = delete;
295 };
296 
297 #endif
pick an actor/prop given a controller position and orientation
virtual void OnRotate()
vtkNew< vtkVRHardwarePicker > HardwarePicker
abstract base class for most VTK objects
Definition: vtkObject.h:62
vtkEventDataDeviceInput
Definition: vtkEventData.h:39
std::vector< vtkSmartPointer< vtkProp3D > > InteractionProps
vtkNew< vtkVRMenuWidget > Menu
void SetInteractor(vtkRenderWindowInteractor *interactor) override
Set/Get the Interactor wrapper being controlled by this object.
std::map< std::tuple< vtkCommand::EventIds, vtkEventDataAction >, int > InputMap
extends interaction to support 3D input
data object that represents a "selection" in VTK.
Definition: vtkSelection.h:59
represents an 3D object for placement in a rendered scene
Definition: vtkProp3D.h:49
int GetInteractionState(vtkEventDataDevice device)
Return interaction state for the specified device (dolly, pick, none, etc...).
const int vtkEventDataNumberOfDevices
Definition: vtkEventData.h:36
const int vtkEventDataNumberOfInputs
Definition: vtkEventData.h:51
platform-independent render window interaction including picking and frame rate control.
vtkEventDataAction
Definition: vtkEventData.h:54
abstract class to specify cell behavior
Definition: vtkCell.h:60
create a polygonal sphere centered at the origin
supports function callbacks
virtual void OnMove3D(vtkEventData *)
Generic 3D event bindings can be overridden in subclasses.
virtual void OnSelect3D(vtkEventData *)
a simple class to control print indentation
Definition: vtkIndent.h:39
Widget representation for vtkVRMenuWidget Implementation of the popup panel representation for the vt...
perform various plane computations
Definition: vtkPlane.h:36
3D widget to display a menu in VR
std::vector< vtkSmartPointer< vtkPlane > > ClippingPlanes
vtkEventDataDevice
platform-independent event data structures
Definition: vtkEventData.h:25
An actor that displays text.
vtkNew< vtkVRMenuRepresentation > MenuRepresentation
virtual void OnMenu3D(vtkEventData *)
vtkNew< vtkActor > PickActor
virtual void OnNextPose3D(vtkEventData *)
Extended from vtkInteractorStyle3D to override command methods.
vtkNew< vtkCallbackCommand > MenuCommand
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkNew< vtkSphereSource > Sphere
virtual void OnElevation3D(vtkEventData *)
vtkNew< vtkTextActor3D > TextActor3D
virtual void OnViewerMovement3D(vtkEventData *)
vtkVRMenuWidget * GetMenu()
Return the menu to allow the user to add options to it.
Tooltip helper explaining controls Helper class to draw one tooltip per button around the controller...
virtual void OnPinch()
virtual void PositionProp(vtkEventData *, double *lwpos=nullptr, double *lwori=nullptr)