VTK  9.0.1
vtkOpenVRInteractorStyle.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3 Program: Visualization Toolkit
4 Module: vtkOpenVRInteractorStyle.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 =========================================================================*/
20 #ifndef vtkOpenVRInteractorStyle_h
21 #define vtkOpenVRInteractorStyle_h
22 
23 #include "vtkRenderingOpenVRModule.h" // For export macro
24 
25 #include "vtkEventData.h" // for enums
26 #include "vtkInteractorStyle3D.h"
27 #include "vtkNew.h" // for ivars
28 #include "vtkOpenVRRenderWindow.h" // for enums
29 
30 class vtkCell;
31 class vtkPlane;
36 class vtkTextActor3D;
37 class vtkSelection;
38 class vtkSphereSource;
39 
40 class VTKRENDERINGOPENVR_EXPORT vtkOpenVRInteractorStyle : public vtkInteractorStyle3D
41 {
42 public:
43  static vtkOpenVRInteractorStyle* New();
45  void PrintSelf(ostream& os, vtkIndent indent) override;
46 
48 
51  void OnButton3D(vtkEventData* edata) override;
52  void OnMove3D(vtkEventData* edata) override;
54 
56 
59  virtual void StartPick(vtkEventDataDevice3D*);
60  virtual void EndPick(vtkEventDataDevice3D*);
61  virtual void StartLoadCamPose(vtkEventDataDevice3D*);
62  virtual void EndLoadCamPose(vtkEventDataDevice3D*);
63  virtual void StartPositionProp(vtkEventDataDevice3D*);
64  virtual void EndPositionProp(vtkEventDataDevice3D*);
65  virtual void StartClip(vtkEventDataDevice3D*);
66  virtual void EndClip(vtkEventDataDevice3D*);
67  virtual void StartDolly3D(vtkEventDataDevice3D*);
68  virtual void EndDolly3D(vtkEventDataDevice3D*);
70 
72 
75  void OnPan() override;
76  void OnPinch() override;
77  void OnRotate() override;
79 
81 
84  void ProbeData(vtkEventDataDevice controller);
85  void LoadNextCameraPose();
86  virtual void PositionProp(vtkEventData*);
87  virtual void Clip(vtkEventDataDevice3D*);
89 
91 
96  void MapInputToAction(vtkEventDataDevice device, vtkEventDataDeviceInput input, int state);
98 
100 
103  void AddTooltipForInput(
104  vtkEventDataDevice device, vtkEventDataDeviceInput input, const std::string& text);
106 
108 
113  vtkSetMacro(HoverPick, bool);
114  vtkGetMacro(HoverPick, bool);
115  vtkBooleanMacro(HoverPick, bool);
117 
119 
122  vtkSetMacro(GrabWithRay, bool);
123  vtkGetMacro(GrabWithRay, bool);
124  vtkBooleanMacro(GrabWithRay, bool);
126 
128  {
129  return this->InteractionState[static_cast<int>(device)];
130  }
131 
132  void ShowRay(vtkEventDataDevice controller);
133  void HideRay(vtkEventDataDevice controller);
134 
135  void ShowBillboard(const std::string& text);
136  void HideBillboard();
137 
138  void ShowPickSphere(double* pos, double radius, vtkProp3D*);
139  void ShowPickCell(vtkCell* cell, vtkProp3D*);
140  void HidePickActor();
141 
142  void ToggleDrawControls();
143  void SetDrawControls(bool);
144 
145  void SetInteractor(vtkRenderWindowInteractor* iren) override;
146 
147  // allow the user to add options to the menu
148  vtkOpenVRMenuWidget* GetMenu() { return this->Menu.Get(); }
149 
150 protected:
152  ~vtkOpenVRInteractorStyle() override;
153 
154  void EndPickCallback(vtkSelection* sel);
155 
156  // Ray drawing
157  void UpdateRay(vtkEventDataDevice controller);
158 
162  static void MenuCallback(
163  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
164 
168 
169  // device input to interaction state mapping
172 
173  // Utility routines
174  void StartAction(int VTKIS_STATE, vtkEventDataDevice3D* edata);
175  void EndAction(int VTKIS_STATE, vtkEventDataDevice3D* edata);
176 
177  // Pick using hardware selector
178  bool HardwareSelect(vtkEventDataDevice controller, bool actorPassOnly);
179 
180  bool HoverPick;
182 
186  int InteractionState[vtkEventDataNumberOfDevices];
189 
191 
195  void AddTooltipForInput(vtkEventDataDevice device, vtkEventDataDeviceInput input);
196 
197 private:
198  vtkOpenVRInteractorStyle(const vtkOpenVRInteractorStyle&) = delete; // Not implemented.
199  void operator=(const vtkOpenVRInteractorStyle&) = delete; // Not implemented.
200 };
201 
202 #endif
virtual void OnRotate()
pick an actor/prop given a controller position and orientation
abstract base class for most VTK objects
Definition: vtkObject.h:53
vtkEventDataDeviceInput
Definition: vtkEventData.h:38
3D widget to display a menu in VR
virtual void OnButton3D(vtkEventData *)
vtkNew< vtkOpenVRMenuWidget > Menu
virtual void PositionProp(vtkEventData *)
void SetInteractor(vtkRenderWindowInteractor *interactor) override
Set/Get the Interactor wrapper being controlled by this object.
Widget representation for vtkOpenVRPanelWidget Implementation of the popup panel representation for t...
extends interaction to support 3D input
data object that represents a "selection" in VTK.
Definition: vtkSelection.h:57
int GetInteractionState(vtkEventDataDevice device)
vtkNew< vtkOpenVRHardwarePicker > HardwarePicker
represents an 3D object for placement in a rendered scene
Definition: vtkProp3D.h:43
const int vtkEventDataNumberOfDevices
Definition: vtkEventData.h:35
extended from vtkInteractorStyle3D to override command methods
const int vtkEventDataNumberOfInputs
Definition: vtkEventData.h:49
platform-independent render window interaction including picking and frame rate control.
abstract class to specify cell behavior
Definition: vtkCell.h:56
create a polygonal sphere centered at the origin
supports function callbacks
virtual void OnMove3D(vtkEventData *)
Generic 3D event bindings can be overridden in subclasses.
vtkNew< vtkSphereSource > Sphere
a simple class to control print indentation
Definition: vtkIndent.h:33
perform various plane computations
Definition: vtkPlane.h:31
vtkNew< vtkOpenVRMenuRepresentation > MenuRepresentation
vtkEventDataDevice
platform-independent event data structures
Definition: vtkEventData.h:25
An actor that displays text.
static vtkInteractorStyle3D * New()
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkNew< vtkTextActor3D > TextActor3D
Tooltip helper explaining controls Helper class to draw one tooltip per button around the controller...
virtual void OnPinch()
vtkOpenVRMenuWidget * GetMenu()