VTK  9.3.1
vtkVRInteractorStyle.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
13#ifndef vtkVRInteractorStyle_h
14#define vtkVRInteractorStyle_h
15
16#include "vtkEventData.h" // for enums
18#include "vtkNew.h" // for vtkNew
19#include "vtkRenderingVRModule.h" // For export macro
20#include "vtkSmartPointer.h" // for vtkSmartPointer
21
22#include <map> // for std::map
23#include <vector> // for std::vector
24
25VTK_ABI_NAMESPACE_BEGIN
27class vtkCell;
28class vtkPlane;
30class vtkSelection;
31class vtkSphereSource;
32class vtkTextActor3D;
36class vtkVRMenuWidget;
37
38class VTKRENDERINGVR_EXPORT vtkVRInteractorStyle : public vtkInteractorStyle3D
39{
40public:
42 void PrintSelf(ostream& os, vtkIndent indent) override;
43
45
48 void OnSelect3D(vtkEventData* edata) override;
49 void OnNextPose3D(vtkEventData* edata) override;
50 void OnViewerMovement3D(vtkEventData* edata) override;
51 void OnMove3D(vtkEventData* edata) override;
52 void OnMenu3D(vtkEventData* edata) override;
53 void OnElevation3D(vtkEventData* edata) override;
55
57
68 void StartMovement3D(int interactionState, vtkEventDataDevice3D*);
71
73
76 void OnPan() override;
77 void OnPinch() override;
78 void OnRotate() override;
80
82
85 void ProbeData(vtkEventDataDevice controller);
86 void PositionProp(vtkEventData*, double* lwpos = nullptr, double* lwori = nullptr) override;
88 virtual void LoadNextCameraPose() = 0;
90
96
102
104
112
117 vtkEventDataDevice device, vtkEventDataDeviceInput input, const std::string& text = {});
118
123
125
130 vtkSetMacro(HoverPick, bool);
131 vtkGetMacro(HoverPick, bool);
132 vtkBooleanMacro(HoverPick, bool);
134
136
140 vtkSetMacro(GrabWithRay, bool);
141 vtkGetMacro(GrabWithRay, bool);
142 vtkBooleanMacro(GrabWithRay, bool);
144
146 {
148 GROUNDED_STYLE
149 };
150
152
156 vtkSetMacro(Style, MovementStyle);
157 vtkGetMacro(Style, MovementStyle);
159
164 {
165 return this->InteractionState[static_cast<int>(device)];
166 }
167
169
172 void ShowRay(vtkEventDataDevice controller);
173 void HideRay(vtkEventDataDevice controller);
175
177
180 void ShowBillboard(const std::string& text);
183
188 void ShowPickSphere(double* pos, double radius, vtkProp3D*);
189
196
201
203
207 void SetDrawControls(bool);
209
214
219
223 vtkVRMenuWidget* GetMenu() { return this->Menu.Get(); }
224
225protected:
228
233
235 static void MenuCallback(
236 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
237
241 void StartAction(int VTKIS_STATE, vtkEventDataDevice3D* edata);
242 void EndAction(int VTKIS_STATE, vtkEventDataDevice3D* edata);
243
247 bool HardwareSelect(vtkEventDataDevice controller, bool actorPassOnly);
248
252 void Movement3D(int interactionState, vtkEventData* edata);
253
254 bool HoverPick = false;
255 bool GrabWithRay = true;
256
260
265
266 // Device input to interaction state mapping
267 std::map<std::tuple<vtkCommand::EventIds, vtkEventDataAction>, int> InputMap;
269
270 // Store required controllers information when performing action
271 int InteractionState[vtkEventDataNumberOfDevices];
272 std::vector<vtkSmartPointer<vtkProp3D>> InteractionProps;
273 std::vector<vtkSmartPointer<vtkPlane>> ClippingPlanes;
274
275 // Store headset world orientation
276 double HeadsetDir[3] = { 0, 0, 0 };
277
278 // Store movement style
280
281 // Interaction timers
284
285 // Interaction trackpad position
286 double LastGroundMovementTrackPadPosition[2] = { 0, 0 };
287 double LastElevationTrackPadPosition[2] = { 0, 0 };
288
289private:
291 void operator=(const vtkVRInteractorStyle&) = delete;
292};
293
294VTK_ABI_NAMESPACE_END
295#endif
supports function callbacks
abstract class to specify cell behavior
Definition vtkCell.h:50
a simple class to control print indentation
Definition vtkIndent.h:29
extends interaction to support 3D input
Allocate and hold a VTK object.
Definition vtkNew.h:51
abstract base class for most VTK objects
Definition vtkObject.h:52
perform various plane computations
Definition vtkPlane.h:26
represents an 3D object for placement in a rendered scene
Definition vtkProp3D.h:39
platform-independent render window interaction including picking and frame rate control.
data object that represents a "selection" in VTK.
create a polygonal sphere centered at the origin
An actor that displays text.
Tooltip helper explaining controls Helper class to draw one tooltip per button around the controller.
pick an actor/prop given a controller position and orientation
Extended from vtkInteractorStyle3D to override command methods.
void ShowPickSphere(double *pos, double radius, vtkProp3D *)
Make the pick actor a sphere of given radius centered at given position, and show it.
void PositionProp(vtkEventData *, double *lwpos=nullptr, double *lwori=nullptr) override
Methods for interaction.
void ProbeData(vtkEventDataDevice controller)
Methods for interaction.
virtual void SetupActions(vtkRenderWindowInteractor *iren)=0
Setup default actions defined with an action path and a corresponding command.
vtkVRMenuWidget * GetMenu()
Return the menu to allow the user to add options to it.
void StartMovement3D(int interactionState, vtkEventDataDevice3D *)
Interaction mode entry points.
std::vector< vtkSmartPointer< vtkPlane > > ClippingPlanes
vtkNew< vtkTextActor3D > TextActor3D
void Clip(vtkEventDataDevice3D *)
Methods for interaction.
void ShowBillboard(const std::string &text)
Show/hide billboard with given text string.
void SetDrawControls(bool)
Control visibility of descriptive tooltips for controller/HMD models.
void OnNextPose3D(vtkEventData *edata) override
Override generic event bindings to call the corresponding action.
void EndAction(int VTKIS_STATE, vtkEventDataDevice3D *edata)
void OnSelect3D(vtkEventData *edata) override
Override generic event bindings to call the corresponding action.
virtual vtkVRControlsHelper * MakeControlsHelper()=0
Creates a new ControlsHelper suitable for use with the child class.
vtkNew< vtkCallbackCommand > MenuCommand
void Movement3D(int interactionState, vtkEventData *edata)
Update the 3D movement according to the given interaction state.
bool HardwareSelect(vtkEventDataDevice controller, bool actorPassOnly)
Pick using hardware selector.
void HidePickActor()
Hide the pick actor (sphere or polydata).
int GetInteractionState(vtkEventDataDevice device)
Return interaction state for the specified device (dolly, pick, none, etc...).
void StartPick(vtkEventDataDevice3D *)
Interaction mode entry points.
void OnMenu3D(vtkEventData *edata) override
Override generic event bindings to call the corresponding action.
void OnPinch() override
Complex gesture events binding.
void StartAction(int VTKIS_STATE, vtkEventDataDevice3D *edata)
Utility routines.
void EndPick(vtkEventDataDevice3D *)
Interaction mode entry points.
vtkNew< vtkTimerLog > LastGroundMovement3DEventTime
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void AddTooltipForInput(vtkEventDataDevice device, vtkEventDataDeviceInput input, const std::string &text={})
Define the helper text that goes with an input.
void OnElevation3D(vtkEventData *edata) override
Override generic event bindings to call the corresponding action.
void StartClip(vtkEventDataDevice3D *)
Interaction mode entry points.
vtkNew< vtkTimerLog > LastElevation3DEventTime
void EndPickCallback(vtkSelection *sel)
void MapInputToAction(vtkCommand::EventIds eid, vtkEventDataAction action, int state)
Map controller inputs to actions.
void EndClip(vtkEventDataDevice3D *)
Interaction mode entry points.
vtkNew< vtkVRMenuRepresentation > MenuRepresentation
void SetInteractor(vtkRenderWindowInteractor *iren) override
Set the Interactor wrapper being controlled by this object.
vtkNew< vtkVRHardwarePicker > HardwarePicker
void HideBillboard()
Show/hide billboard with given text string.
void ShowRay(vtkEventDataDevice controller)
Show/hide the ray for the specified controller.
~vtkVRInteractorStyle() override
void EndMovement3D(vtkEventDataDevice3D *)
Interaction mode entry points.
static void MenuCallback(vtkObject *object, unsigned long event, void *clientdata, void *calldata)
vtkNew< vtkVRMenuWidget > Menu
void EndPositionProp(vtkEventDataDevice3D *)
Interaction mode entry points.
void StartLoadCamPose(vtkEventDataDevice3D *)
Interaction mode entry points.
void OnViewerMovement3D(vtkEventData *edata) override
Override generic event bindings to call the corresponding action.
void HideRay(vtkEventDataDevice controller)
Show/hide the ray for the specified controller.
std::map< std::tuple< vtkCommand::EventIds, vtkEventDataAction >, int > InputMap
void ShowPickCell(vtkCell *cell, vtkProp3D *)
Make the pick actor a polydata built from the points and edges of the given cell, and show it.
void OnRotate() override
Complex gesture events binding.
void OnPan() override
Complex gesture events binding.
void OnMove3D(vtkEventData *edata) override
Override generic event bindings to call the corresponding action.
vtkNew< vtkActor > PickActor
std::vector< vtkSmartPointer< vtkProp3D > > InteractionProps
virtual void LoadNextCameraPose()=0
Methods for interaction.
void ToggleDrawControls()
Control visibility of descriptive tooltips for controller/HMD models.
void GroundMovement3D(vtkEventDataDevice3D *)
Move the camera on the "XY" plan (ground) using the thumbstick/trackpad position (up/down and left/ri...
void UpdateRay(vtkEventDataDevice controller)
Update and draw the ray.
void MapInputToAction(vtkCommand::EventIds eid, int state)
Map controller inputs to actions.
void Elevation3D(vtkEventDataDevice3D *)
Move the camera following the "Z" axis (elevation) using the thumbstick/trackpad position (up/down).
void EndLoadCamPose(vtkEventDataDevice3D *)
Interaction mode entry points.
void StartPositionProp(vtkEventDataDevice3D *)
Interaction mode entry points.
vtkNew< vtkSphereSource > Sphere
Widget representation for vtkVRMenuWidget Implementation of the popup panel representation for the vt...
3D widget to display a menu in VR
vtkEventDataDevice
platform-independent event data structures
const int vtkEventDataNumberOfDevices
vtkEventDataAction
vtkEventDataDeviceInput
const int vtkEventDataNumberOfInputs