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