DART 6.12.2
Loading...
Searching...
No Matches
DefaultEventHandler.hpp
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011-2021, The DART development contributors
3 * All rights reserved.
4 *
5 * The list of contributors can be found at:
6 * https://github.com/dartsim/dart/blob/master/LICENSE
7 *
8 * This file is provided under the following "BSD-style" License:
9 * Redistribution and use in source and binary forms, with or
10 * without modification, are permitted provided that the following
11 * conditions are met:
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#ifndef DART_GUI_OSG_DEFAULTEVENTHANDLER_HPP_
34#define DART_GUI_OSG_DEFAULTEVENTHANDLER_HPP_
35
36#include <array>
37#include <memory>
38#include <vector>
39
40#include <Eigen/Core>
41#include <osgGA/GUIEventHandler>
42
46
47namespace dart {
48
49namespace dynamics {
50class Shape;
51class ShapeFrame;
52class Entity;
53} // namespace dynamics
54
55namespace gui {
56namespace osg {
57
59{
61 std::shared_ptr<dart::dynamics::Shape> shape;
62 Eigen::Vector3d position;
63 Eigen::Vector3d normal;
64};
65
66class Viewer;
67
77
87
98
99class MouseEventHandler;
100
102class DefaultEventHandler : public ::osgGA::GUIEventHandler,
103 public virtual dart::common::Subject,
104 public virtual dart::common::Observer
105{
106public:
108 explicit DefaultEventHandler(Viewer* _viewer);
109
111 virtual ~DefaultEventHandler();
112
115
117 int getModKeyMask() const;
118
120 double getWindowCursorX() const;
121
123 double getWindowCursorY() const;
124
136 Eigen::Vector3d getDeltaCursor(
137 const Eigen::Vector3d& _fromPosition,
138 ConstraintType _constraint = UNCONSTRAINED,
139 const Eigen::Vector3d& _constraintVector
140 = Eigen::Vector3d::UnitZ()) const;
141
146 Eigen::Vector3d& near, Eigen::Vector3d& far, double distance = 1.0) const;
147
149 const std::vector<PickInfo>& getButtonPicks(
150 MouseButton button, MouseButtonEvent event) const;
151
154 const std::vector<PickInfo>& getMovePicks() const;
155
158
160 void suppressMovePicks();
161
164
166 void activateMovePicks();
167
170 void pick(
171 std::vector<PickInfo>& infoVector, const ::osgGA::GUIEventAdapter& ea);
172
178
181 const std::set<MouseEventHandler*>& getMouseEventHandlers() const;
182
184 bool handle(
185 const ::osgGA::GUIEventAdapter& ea, ::osgGA::GUIActionAdapter&) override;
186
187protected:
190
192 void eventPick(const ::osgGA::GUIEventAdapter& ea);
193
195 void clearButtonEvents();
196
198 const dart::common::Subject* _subject) override;
199
202
204 std::set<MouseEventHandler*> mMouseEventHandlers;
205
208
211
213 std::vector<PickInfo> mMovePicks;
214
217
219 std::vector<PickInfo> mTempPicks;
220
223
226 Eigen::Vector2d mLastCursorPosition;
227
230};
232
233} // namespace osg
234} // namespace gui
235} // namespace dart
236
237#endif // DART_GUI_OSG_DEFAULTEVENTHANDLER_HPP_
#define DART_DECLARE_CLASS_WITH_VIRTUAL_BASE_END
Definition ClassWithVirtualBase.hpp:44
#define DART_DECLARE_CLASS_WITH_VIRTUAL_BASE_BEGIN
Definition ClassWithVirtualBase.hpp:43
The Observer class should be inherited by any class that wants to respond in a customized way to the ...
Definition Observer.hpp:52
The Subject class is a base class for any object that wants to report when it gets destroyed.
Definition Subject.hpp:58
Definition ShapeFrame.hpp:192
Definition DefaultEventHandler.hpp:105
std::vector< PickInfo > mMovePicks
The objects that were under the cursor during the last move.
Definition DefaultEventHandler.hpp:213
int getModKeyMask() const
Returns the last modkey mask.
Definition DefaultEventHandler.cpp:80
void clearButtonEvents()
Clear out the current button events.
Definition DefaultEventHandler.cpp:426
double getWindowCursorX() const
Get the last x value of the cursor in Window coordinates.
Definition DefaultEventHandler.cpp:86
void activateMovePicks()
Activate pick detection for mouse movements (on by default)
Definition DefaultEventHandler.cpp:208
void pick(std::vector< PickInfo > &infoVector, const ::osgGA::GUIEventAdapter &ea)
Detect picks TODO(MXG): Consider putting this functionality in a more accessible place.
Definition DefaultEventHandler.cpp:214
std::set< MouseEventHandler * > mMouseEventHandlers
Set of MouseEventHandlers that are tied to this DefaultEventHandler.
Definition DefaultEventHandler.hpp:204
void triggerMouseEventHandlers()
Calls update on all MouseEventHandlers.
Definition DefaultEventHandler.cpp:378
bool mSuppressMovePicks
Suppress pick detection for moves.
Definition DefaultEventHandler.hpp:216
void suppressButtonPicks(MouseButton button, MouseButtonEvent event)
Suppress pick detection for the specified button event.
Definition DefaultEventHandler.cpp:182
const std::vector< PickInfo > & getButtonPicks(MouseButton button, MouseButtonEvent event) const
Get the most recent picks for the specified button and event type.
Definition DefaultEventHandler.cpp:166
bool handle(const ::osgGA::GUIEventAdapter &ea, ::osgGA::GUIActionAdapter &) override
Handle incoming user input.
Definition DefaultEventHandler.cpp:307
void suppressMovePicks()
Suppress pick detection for mouse movements.
Definition DefaultEventHandler.cpp:192
std::vector< PickInfo > mTempPicks
Cache for pick data.
Definition DefaultEventHandler.hpp:219
void activateButtonPicks(MouseButton button, MouseButtonEvent event)
Activate pick detection for the specified button event (on by default)
Definition DefaultEventHandler.cpp:198
Eigen::Vector3d getDeltaCursor(const Eigen::Vector3d &_fromPosition, ConstraintType _constraint=UNCONSTRAINED, const Eigen::Vector3d &_constraintVector=Eigen::Vector3d::UnitZ()) const
Get the change change in the cursor position with respect to some previous location in the world (_fr...
Definition DefaultEventHandler.cpp:98
MouseButtonEvent getButtonEvent(MouseButton button) const
Returns the last event performed by a mouse button.
Definition DefaultEventHandler.cpp:74
Eigen::Vector2d mLastCursorPosition
X/Y values of the cursor (in the window coordinates) during the last mouse event.
Definition DefaultEventHandler.hpp:226
void getNearAndFarPointUnderCursor(Eigen::Vector3d &near, Eigen::Vector3d &far, double distance=1.0) const
Get two points that are under the current cursor position.
Definition DefaultEventHandler.cpp:148
void eventPick(const ::osgGA::GUIEventAdapter &ea)
Gather current picks and assign them to the latest event.
Definition DefaultEventHandler.cpp:387
void handleDestructionNotification(const dart::common::Subject *_subject) override
Called by receiveDestructionNotification().
Definition DefaultEventHandler.cpp:433
void addMouseEventHandler(MouseEventHandler *handler)
Add a MouseEventHandler that will get invoked whenever a mouse event occurs.
Definition DefaultEventHandler.cpp:245
virtual ~DefaultEventHandler()
Destructor.
Definition DefaultEventHandler.cpp:68
const std::vector< PickInfo > & getMovePicks() const
Get the most recent picks for a mouse movement (click-and-drag actions do not qualify as movements)
Definition DefaultEventHandler.cpp:176
std::vector< PickInfo > mButtonPicks[NUM_MOUSE_BUTTONS][BUTTON_NOTHING]
The objects that were under the cursor during the last button event.
Definition DefaultEventHandler.hpp:207
bool mSuppressButtonPicks[NUM_MOUSE_BUTTONS][BUTTON_NOTHING]
Suppress pick detection.
Definition DefaultEventHandler.hpp:210
double getWindowCursorY() const
Get the last y value of the cursor in Window coordinates.
Definition DefaultEventHandler.cpp:92
MouseButtonEvent mLastButtonEvent[NUM_MOUSE_BUTTONS]
The last mouse event that was registered by the event handler.
Definition DefaultEventHandler.hpp:222
Viewer * mViewer
dart::gui::osg::Viewer that this event handler is tied to
Definition DefaultEventHandler.hpp:201
const std::set< MouseEventHandler * > & getMouseEventHandlers() const
Get the list of MouseEventHandlers that are currently held by this DefaultEventHandler.
Definition DefaultEventHandler.cpp:253
int mLastModKeyMask
Storage for the last modkey mask.
Definition DefaultEventHandler.hpp:229
Definition MouseEventHandler.hpp:50
Definition Viewer.hpp:111
MouseButton
Definition DefaultEventHandler.hpp:69
@ MIDDLE_MOUSE
Definition DefaultEventHandler.hpp:73
@ RIGHT_MOUSE
Definition DefaultEventHandler.hpp:72
@ NUM_MOUSE_BUTTONS
Definition DefaultEventHandler.hpp:75
@ LEFT_MOUSE
Definition DefaultEventHandler.hpp:71
ConstraintType
Definition DefaultEventHandler.hpp:89
@ PLANE_CONSTRAINT
Definition DefaultEventHandler.hpp:93
@ CUSTOM_CONSTRAINT
Definition DefaultEventHandler.hpp:94
@ UNCONSTRAINED
Definition DefaultEventHandler.hpp:91
@ LINE_CONSTRAINT
Definition DefaultEventHandler.hpp:92
@ NUM_CONSTRAINT_TYPES
Definition DefaultEventHandler.hpp:96
MouseButtonEvent
Definition DefaultEventHandler.hpp:79
@ BUTTON_DRAG
Definition DefaultEventHandler.hpp:82
@ BUTTON_RELEASE
Definition DefaultEventHandler.hpp:83
@ BUTTON_PUSH
Definition DefaultEventHandler.hpp:81
@ BUTTON_NOTHING
Definition DefaultEventHandler.hpp:84
Definition BulletCollisionDetector.cpp:60
Definition DefaultEventHandler.hpp:59
dart::dynamics::ShapeFrame * frame
Definition DefaultEventHandler.hpp:60
Eigen::Vector3d normal
Definition DefaultEventHandler.hpp:63
std::shared_ptr< dart::dynamics::Shape > shape
Definition DefaultEventHandler.hpp:61
Eigen::Vector3d position
Definition DefaultEventHandler.hpp:62