VTK  9.0.1
vtkEventData.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkEventData.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 =========================================================================*/
19 #ifndef vtkEventData_h
20 #define vtkEventData_h
21 
22 #include "vtkCommand.h"
23 
24 // enumeration of possible devices
26 {
27  Unknown = -1,
33 };
34 
36 
37 // enumeration of possible device inputs
39 {
40  Unknown = -1,
41  Trigger,
42  TrackPad,
43  Joystick,
44  Grip,
47 };
48 
50 
51 // enumeration of actions that can happen
53 {
54  Unknown = -1,
55  Press,
56  Release,
57  Touch,
58  Untouch,
60 };
61 
64 
66 {
67 public:
69 
70  int GetType() const { return this->Type; }
71 
72  // are two events equivalent
73  bool operator==(const vtkEventData& a) const
74  {
75  return this->Type == a.Type && this->Equivalent(&a);
76  }
77 
78  // some convenience downcasts
79  virtual vtkEventDataForDevice* GetAsEventDataForDevice() { return nullptr; }
80  virtual vtkEventDataDevice3D* GetAsEventDataDevice3D() { return nullptr; }
81 
82 protected:
84  ~vtkEventData() override {}
85 
86  // subclasses override this to define their
87  // definition of equivalent
88  virtual bool Equivalent(const vtkEventData* ed) const = 0;
89 
90  int Type;
91 
92 private:
93  vtkEventData(const vtkEventData& c) = delete;
94 };
95 
96 // a subclass for events that may have one or more of
97 // device, input, and action
99 {
100 public:
103  {
105  ret->InitializeObjectBase();
106  return ret;
107  }
108 
109  vtkEventDataDevice GetDevice() const { return this->Device; }
110  vtkEventDataDeviceInput GetInput() const { return this->Input; }
111  vtkEventDataAction GetAction() const { return this->Action; }
112 
113  void SetDevice(vtkEventDataDevice v) { this->Device = v; }
114  void SetInput(vtkEventDataDeviceInput v) { this->Input = v; }
115  void SetAction(vtkEventDataAction v) { this->Action = v; }
116 
117  vtkEventDataForDevice* GetAsEventDataForDevice() override { return this; }
118 
119 protected:
123 
124  bool Equivalent(const vtkEventData* e) const override
125  {
126  const vtkEventDataForDevice* edd = static_cast<const vtkEventDataForDevice*>(e);
127  return this->Device == edd->Device && this->Input == edd->Input && this->Action == edd->Action;
128  }
129 
131  {
132  this->Device = vtkEventDataDevice::Unknown;
133  this->Input = vtkEventDataDeviceInput::Unknown;
134  this->Action = vtkEventDataAction::Unknown;
135  }
137 
138 private:
139  vtkEventDataForDevice(const vtkEventData& c) = delete;
140  void operator=(const vtkEventDataForDevice&) = delete;
141 };
142 
143 // a subclass for events that have a 3D world position
144 // direction and orientation.
146 {
147 public:
149 
150  vtkEventDataDevice3D* GetAsEventDataDevice3D() override { return this; }
151 
152  void GetWorldPosition(double v[3]) const
153  {
154  v[0] = this->WorldPosition[0];
155  v[1] = this->WorldPosition[1];
156  v[2] = this->WorldPosition[2];
157  }
158  const double* GetWorldPosition() const VTK_SIZEHINT(3) { return this->WorldPosition; }
159  void SetWorldPosition(const double p[3])
160  {
161  this->WorldPosition[0] = p[0];
162  this->WorldPosition[1] = p[1];
163  this->WorldPosition[2] = p[2];
164  }
165 
166  void GetWorldDirection(double v[3]) const
167  {
168  v[0] = this->WorldDirection[0];
169  v[1] = this->WorldDirection[1];
170  v[2] = this->WorldDirection[2];
171  }
172  const double* GetWorldDirection() const VTK_SIZEHINT(3) { return this->WorldDirection; }
173  void SetWorldDirection(const double p[3])
174  {
175  this->WorldDirection[0] = p[0];
176  this->WorldDirection[1] = p[1];
177  this->WorldDirection[2] = p[2];
178  }
179 
180  void GetWorldOrientation(double v[4]) const
181  {
182  v[0] = this->WorldOrientation[0];
183  v[1] = this->WorldOrientation[1];
184  v[2] = this->WorldOrientation[2];
185  v[3] = this->WorldOrientation[3];
186  }
187  const double* GetWorldOrientation() const VTK_SIZEHINT(4) { return this->WorldOrientation; }
188  void SetWorldOrientation(const double p[4])
189  {
190  this->WorldOrientation[0] = p[0];
191  this->WorldOrientation[1] = p[1];
192  this->WorldOrientation[2] = p[2];
193  this->WorldOrientation[3] = p[3];
194  }
195 
196  void GetTrackPadPosition(double v[2]) const
197  {
198  v[0] = this->TrackPadPosition[0];
199  v[1] = this->TrackPadPosition[1];
200  }
201  const double* GetTrackPadPosition() const VTK_SIZEHINT(2) { return this->TrackPadPosition; }
202  void SetTrackPadPosition(const double p[2])
203  {
204  this->TrackPadPosition[0] = p[0];
205  this->TrackPadPosition[1] = p[1];
206  }
207  void SetTrackPadPosition(double x, double y)
208  {
209  this->TrackPadPosition[0] = x;
210  this->TrackPadPosition[1] = y;
211  }
212 
213 protected:
214  double WorldPosition[3];
215  double WorldOrientation[4];
216  double WorldDirection[3];
217  double TrackPadPosition[2];
218 
220  ~vtkEventDataDevice3D() override {}
221 
222 private:
223  vtkEventDataDevice3D(const vtkEventDataDevice3D& c) = delete;
224  void operator=(const vtkEventDataDevice3D&) = delete;
225 };
226 
227 // subclass for button event 3d
229 {
230 public:
233  {
235  ret->InitializeObjectBase();
236  return ret;
237  }
238 
239 protected:
241  ~vtkEventDataButton3D() override {}
242 
243 private:
244  vtkEventDataButton3D(const vtkEventDataButton3D& c) = delete;
245  void operator=(const vtkEventDataButton3D&) = delete;
246 };
247 
248 // subclass for move event 3d
250 {
251 public:
254  {
256  ret->InitializeObjectBase();
257  return ret;
258  }
259 
260 protected:
262  ~vtkEventDataMove3D() override {}
263 
264 private:
265  vtkEventDataMove3D(const vtkEventDataMove3D& c) = delete;
266  void operator=(const vtkEventDataMove3D&) = delete;
267 };
268 
269 #endif
270 
271 // VTK-HeaderTest-Exclude: vtkEventData.h
vtkEventDataDevice3D::GetWorldPosition
void GetWorldPosition(double v[3]) const
Definition: vtkEventData.h:152
vtkEventDataForDevice::GetAsEventDataForDevice
vtkEventDataForDevice * GetAsEventDataForDevice() override
Definition: vtkEventData.h:117
vtkEventDataForDevice::vtkEventDataForDevice
vtkEventDataForDevice()
Definition: vtkEventData.h:130
vtkEventData::GetType
int GetType() const
Definition: vtkEventData.h:70
vtkEventDataDevice::LeftController
@ LeftController
vtkEventDataDevice::GenericTracker
@ GenericTracker
vtkEventDataForDevice::Action
vtkEventDataAction Action
Definition: vtkEventData.h:122
vtkEventDataDevice3D::~vtkEventDataDevice3D
~vtkEventDataDevice3D() override
Definition: vtkEventData.h:220
vtkEventData
Definition: vtkEventData.h:65
vtkEventDataDeviceInput
vtkEventDataDeviceInput
Definition: vtkEventData.h:38
vtkEventDataDevice3D
Definition: vtkEventData.h:145
vtkEventDataDeviceInput::Trigger
@ Trigger
vtkEventDataDevice3D::SetTrackPadPosition
void SetTrackPadPosition(double x, double y)
Definition: vtkEventData.h:207
vtkEventDataForDevice::GetDevice
vtkEventDataDevice GetDevice() const
Definition: vtkEventData.h:109
vtkEventData::vtkEventData
vtkEventData()
Definition: vtkEventData.h:83
vtkEventDataMove3D
Definition: vtkEventData.h:249
vtkEventDataDevice::RightController
@ RightController
vtkEventDataAction::Touch
@ Touch
vtkEventDataDeviceInput::ApplicationMenu
@ ApplicationMenu
vtkEventDataDevice3D::SetTrackPadPosition
void SetTrackPadPosition(const double p[2])
Definition: vtkEventData.h:202
vtkEventDataDevice3D::GetWorldDirection
const double * GetWorldDirection() const
Definition: vtkEventData.h:172
vtkEventDataDevice3D::SetWorldOrientation
void SetWorldOrientation(const double p[4])
Definition: vtkEventData.h:188
vtkEventDataNumberOfInputs
const int vtkEventDataNumberOfInputs
Definition: vtkEventData.h:49
vtkCommand::Move3DEvent
@ Move3DEvent
Definition: vtkCommand.h:454
vtkCommand.h
vtkEventData::GetAsEventDataForDevice
virtual vtkEventDataForDevice * GetAsEventDataForDevice()
Definition: vtkEventData.h:79
vtkEventDataDevice3D::WorldPosition
double WorldPosition[3]
Definition: vtkEventData.h:214
vtkObjectBase::InitializeObjectBase
void InitializeObjectBase()
vtkEventDataAction::Release
@ Release
vtkEventDataDevice::HeadMountedDisplay
@ HeadMountedDisplay
vtkEventDataForDevice
Definition: vtkEventData.h:98
vtkEventDataDeviceInput::NumberOfInputs
@ NumberOfInputs
vtkEventDataDevice3D::GetWorldDirection
void GetWorldDirection(double v[3]) const
Definition: vtkEventData.h:166
vtkEventDataMove3D::New
static vtkEventDataMove3D * New()
Definition: vtkEventData.h:253
vtkEventDataAction
vtkEventDataAction
Definition: vtkEventData.h:52
vtkEventDataDeviceInput::Unknown
@ Unknown
vtkEventDataDevice3D::WorldDirection
double WorldDirection[3]
Definition: vtkEventData.h:216
vtkCommand::Button3DEvent
@ Button3DEvent
Definition: vtkCommand.h:454
VTK_SIZEHINT
#define VTK_SIZEHINT(...)
Definition: vtkWrappingHints.h:45
vtkEventDataDevice3D::GetWorldPosition
const double * GetWorldPosition() const
Definition: vtkEventData.h:158
vtkEventDataNumberOfDevices
const int vtkEventDataNumberOfDevices
Definition: vtkEventData.h:35
vtkEventDataDeviceInput::TrackPad
@ TrackPad
vtkEventDataDevice3D::vtkEventDataDevice3D
vtkEventDataDevice3D()
Definition: vtkEventData.h:219
vtkObjectBase
abstract base class for most VTK objects
Definition: vtkObjectBase.h:63
vtkEventDataButton3D::vtkEventDataButton3D
vtkEventDataButton3D()
Definition: vtkEventData.h:240
vtkEventDataButton3D::~vtkEventDataButton3D
~vtkEventDataButton3D() override
Definition: vtkEventData.h:241
vtkEventDataForDevice::New
static vtkEventDataForDevice * New()
Definition: vtkEventData.h:102
vtkEventDataForDevice::SetInput
void SetInput(vtkEventDataDeviceInput v)
Definition: vtkEventData.h:114
vtkEventData::GetAsEventDataDevice3D
virtual vtkEventDataDevice3D * GetAsEventDataDevice3D()
Definition: vtkEventData.h:80
vtkEventData::Type
int Type
Definition: vtkEventData.h:90
vtkEventDataDevice3D::GetTrackPadPosition
void GetTrackPadPosition(double v[2]) const
Definition: vtkEventData.h:196
vtkEventDataMove3D::vtkEventDataMove3D
vtkEventDataMove3D()
Definition: vtkEventData.h:261
vtkEventDataForDevice::Device
vtkEventDataDevice Device
Definition: vtkEventData.h:120
vtkEventDataForDevice::~vtkEventDataForDevice
~vtkEventDataForDevice() override
Definition: vtkEventData.h:136
vtkEventDataForDevice::Input
vtkEventDataDeviceInput Input
Definition: vtkEventData.h:121
vtkEventDataDevice::NumberOfDevices
@ NumberOfDevices
vtkEventDataForDevice::GetAction
vtkEventDataAction GetAction() const
Definition: vtkEventData.h:111
vtkEventDataDevice3D::GetWorldOrientation
void GetWorldOrientation(double v[4]) const
Definition: vtkEventData.h:180
vtkEventDataMove3D::~vtkEventDataMove3D
~vtkEventDataMove3D() override
Definition: vtkEventData.h:262
vtkEventData::Equivalent
virtual bool Equivalent(const vtkEventData *ed) const =0
vtkEventDataForDevice::SetDevice
void SetDevice(vtkEventDataDevice v)
Definition: vtkEventData.h:113
vtkEventDataAction::Unknown
@ Unknown
vtkEventData::vtkBaseTypeMacro
vtkBaseTypeMacro(vtkEventData, vtkObjectBase)
vtkEventDataDevice
vtkEventDataDevice
platform-independent event data structures
Definition: vtkEventData.h:25
vtkEventDataDevice3D::GetWorldOrientation
const double * GetWorldOrientation() const
Definition: vtkEventData.h:187
vtkEventDataAction::Press
@ Press
vtkEventDataForDevice::Equivalent
bool Equivalent(const vtkEventData *e) const override
Definition: vtkEventData.h:124
vtkEventDataDevice3D::TrackPadPosition
double TrackPadPosition[2]
Definition: vtkEventData.h:217
vtkEventDataDevice3D::SetWorldPosition
void SetWorldPosition(const double p[3])
Definition: vtkEventData.h:159
vtkEventDataDeviceInput::Joystick
@ Joystick
vtkEventDataForDevice::GetInput
vtkEventDataDeviceInput GetInput() const
Definition: vtkEventData.h:110
vtkEventDataButton3D
Definition: vtkEventData.h:228
vtkEventDataButton3D::New
static vtkEventDataButton3D * New()
Definition: vtkEventData.h:232
vtkEventDataForDevice::SetAction
void SetAction(vtkEventDataAction v)
Definition: vtkEventData.h:115
vtkEventDataAction::Untouch
@ Untouch
vtkEventDataAction::NumberOfActions
@ NumberOfActions
vtkEventDataDevice3D::GetTrackPadPosition
const double * GetTrackPadPosition() const
Definition: vtkEventData.h:201
vtkEventDataDevice3D::GetAsEventDataDevice3D
vtkEventDataDevice3D * GetAsEventDataDevice3D() override
Definition: vtkEventData.h:150
vtkEventData::~vtkEventData
~vtkEventData() override
Definition: vtkEventData.h:84
vtkEventDataDeviceInput::Grip
@ Grip
vtkEventDataDevice3D::WorldOrientation
double WorldOrientation[4]
Definition: vtkEventData.h:215
vtkEventData::operator==
bool operator==(const vtkEventData &a) const
Definition: vtkEventData.h:73
vtkEventDataDevice::Unknown
@ Unknown
vtkEventDataDevice3D::SetWorldDirection
void SetWorldDirection(const double p[3])
Definition: vtkEventData.h:173