OpenSceneGraph 3.6.5
SlideEventHandler
Go to the documentation of this file.
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2018 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version. The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * OpenSceneGraph Public License for more details.
12*/
13
14#ifndef SLIDEEVENTHANDLER
15#define SLIDEEVENTHANDLER 1
16
17#include <osg/Switch>
18#include <osg/Timer>
19#include <osg/ValueObject>
20#include <osg/ImageSequence>
21
22#include <osgGA/GUIEventHandler>
23#include <osgViewer/Viewer>
24
27
28namespace osgPresentation
29{
30
31// forward declare
32class SlideEventHandler;
33
44
45struct JumpData : public osg::Object
46{
48 relativeJump(true),
49 slideNum(0),
50 layerNum(0) {}
51
52 JumpData(bool in_relativeJump, int in_slideNum, int in_layerNum):
53 relativeJump(in_relativeJump),
54 slideNum(in_slideNum),
55 layerNum(in_layerNum) {}
56
57 JumpData(const std::string& in_slideName, const std::string& in_layerName):
58 relativeJump(true),
59 slideNum(0),
60 layerNum(0),
61 slideName(in_slideName),
62 layerName(in_layerName) {}
63
65 osg::Object(rhs, copyop),
67 slideNum(rhs.slideNum),
68 layerNum(rhs.layerNum),
70 layerName(rhs.layerName) {}
71
73 {
74 if (&rhs==this) return *this;
76 slideNum = rhs.slideNum;
77 layerNum = rhs.layerNum;
78 slideName = rhs.slideName;
79 layerName = rhs.layerName;
80 return *this;
81 }
82
84
85 bool requiresJump() const
86 {
87 if (!slideName.empty() || !layerName.empty()) return true;
88 return relativeJump ? (slideNum!=0 || layerNum!=0) : true;
89 }
90
91 bool jump(SlideEventHandler* seh) const;
92
93 void setRelativeJump(bool flag) { relativeJump = flag; }
94 bool getRelativeJump() const { return relativeJump; }
95
96 void setSlideNum(int num) { slideNum = num; }
97 int getSlideNum() const { return slideNum; }
98
99 void setLayerNum(int num) { layerNum = num; }
100 int getLayerNum() const { return layerNum; }
101
102 void setSlideName(const std::string& name) { slideName = name; }
103 const std::string& getSlideName() const { return slideName; }
104
105 void setLayerName(const std::string& name) { layerName = name; }
106 const std::string& getLayerName() const { return layerName; }
107
111
112 std::string slideName;
113 std::string layerName;
114};
115
116
118{
120 eye(0.0, -1.0, 0.0),
121 center(0.0, 0.0, 0.0),
122 up(0.0, 0.0, 1.0) {}
123
124 HomePosition(const osg::Vec3& in_eye, const osg::Vec3& in_center, const osg::Vec3& in_up):
125 eye(in_eye),
126 center(in_center),
127 up(in_up) {}
128
130 osg::Object(rhs, copyop),
131 eye(rhs.eye),
132 center(rhs.center),
133 up(rhs.up) {}
134
136 {
137 if (&rhs==this) return *this;
138 eye = rhs.eye;
139 center = rhs.center;
140 up = rhs.up;
141 return *this;
142 }
143
145
146 void setEye(const osg::Vec3d& e) { eye = e; }
147 const osg::Vec3d& getEye() const { return eye; }
148
149 void setCenter(const osg::Vec3d& c) { center = c; }
150 const osg::Vec3d& getCenter() const { return center; }
151
152 void setUp(const osg::Vec3d& u) { up = u; }
153 const osg::Vec3d& getUp() const { return up; }
154
158};
159
161{
162 KeyPosition(unsigned int key=0, float x=FLT_MAX, float y=FLT_MAX, bool forward_to_devices = false):
163 _key((osgGA::GUIEventAdapter::KeySymbol)key),
164 _x(x),
165 _y(y),
166 _forwardToDevices(forward_to_devices) {}
167
169 osg::Object(rhs, copyop),
170 _key(rhs._key),
171 _x(rhs._x),
172 _y(rhs._y),
174
176
178 {
179 if (&rhs==this) return *this;
180 _key = rhs._key;
181 _x = rhs._x;
182 _y = rhs._y;
184 return *this;
185 }
186
187 void set(unsigned int key=0, float x=FLT_MAX, float y=FLT_MAX, bool forward_to_devices = false)
188 {
190 _x = x;
191 _y = y;
192 _forwardToDevices = forward_to_devices;
193 }
194
195 void setKey(int key) { _key = static_cast<osgGA::GUIEventAdapter::KeySymbol>(key); }
196 int getKey() const { return _key; }
197
198 void setX(float x) { _x = x; }
199 float getX() const { return _x; }
200
201 void setY(float y) { _y = y; }
202 float getY() const { return _y; }
203
204 void setForwardToDevices(bool flag) { _forwardToDevices = flag; }
205 bool getForwardToDevices() const { return _forwardToDevices; }
206
207
209 float _x;
210 float _y;
212};
213
214struct LayerCallback : public virtual osg::Referenced
215{
216 virtual void operator() (osg::Node* node) const = 0;
217};
218
220{
222 LayerAttributes(double in_duration):_duration(in_duration) {}
223
224 void setDuration(double duration) { _duration = duration; }
225 double getDuration() const { return _duration; }
226
227 typedef std::vector<KeyPosition> Keys;
228 typedef std::vector<std::string> RunStrings;
229
230 void setKeys(const Keys& keys) { _keys = keys; }
231 const Keys& getKeys() const { return _keys; }
232
233 void addKey(const KeyPosition& kp) { _keys.push_back(kp); }
234
235 void setRunStrings(const RunStrings& runStrings) { _runStrings = runStrings; }
236 const RunStrings& getRunStrings() const { return _runStrings; }
237
238 void addRunString(const std::string& runString) { _runStrings.push_back(runString); }
239
240 void setJump(const JumpData& jumpData) { _jumpData = jumpData; }
241 const JumpData& getJumpData() const { return _jumpData; }
242
243 double _duration;
247
250
253
254 typedef std::list< osg::ref_ptr<LayerCallback> > LayerCallbacks;
257};
258
265
266
268{
269 template<class T, class U>
270 inline bool operator() (const T& lhs,const U& rhs) const
271 {
272 return *lhs < *rhs;
273 }
274};
275
277{
278 inline bool operator < (const ObjectOperator& rhs) const { return ptr() < rhs.ptr(); }
279
280 virtual void* ptr() const = 0;
281
282 virtual void enter(SlideEventHandler*) = 0;
283 virtual void frame(SlideEventHandler*) {} ;
284 virtual void maintain(SlideEventHandler*) = 0;
285 virtual void leave(SlideEventHandler*) = 0;
286 virtual void setPause(SlideEventHandler*, bool pause) = 0;
287 virtual void reset(SlideEventHandler*) = 0;
288
289 virtual ~ObjectOperator() {}
290};
291
327
329{
330public:
331
333
335
337
339
340 void set(osg::Node* model);
341
343
344 virtual void getUsage(osg::ApplicationUsage& usage) const;
345
347
349
350
356
357 void compileSlide(unsigned int slideNum);
358 void releaseSlide(unsigned int slideNum);
359
360 unsigned int getNumSlides();
361
362 int getActiveSlide() const { return _activeSlide; }
363 int getActiveLayer() const { return _activeLayer; }
364
365 osg::Switch* getSlide(int slideNum);
366 osg::Node* getLayer(int slideNum, int layerNum);
367
368 bool selectSlide(int slideNum,int layerNum=FIRST_POSITION);
369 bool selectLayer(int layerNum);
370
373
374 bool nextSlide();
376
377 bool nextLayer();
379
380 bool home();
381
382 void setAutoSteppingActive(bool flag = true) { _autoSteppingActive = flag; }
384
385 void setTimeDelayBetweenSlides(double dt) { _timePerSlide = dt; }
386 double getTimeDelayBetweenSlides() const { return _timePerSlide; }
387
388 double getDuration(const osg::Node* node) const;
389
391
394
397
398 void setLoopPresentation(bool loop) { _loopPresentation = loop; }
399 bool getLoopPresentation() const { return _loopPresentation; }
400
401
402 void dispatchEvent(const KeyPosition& keyPosition);
404
406
407 void setRequestReload(bool flag);
408 bool getRequestReload() const { return _requestReload; }
409
410 double getReferenceTime() const { return _referenceTime; }
411
412 virtual bool checkNeedToDoFrame();
413
414protected:
415
417
419
420 void updateAlpha(bool, bool, float x, float y);
421 void updateLight(float x, float y);
422
424
425
427
430
433
436
443 bool _pause;
444 bool _hold;
445
449
451
453
457
459
462
464
466
468};
469
470}
471
472#endif
The core osg library provides the basic scene graph classes such as Nodes, State and Drawables,...
Definition AlphaFunc:19
Vec3f Vec3
Definition Vec3:21
unsigned long long Timer_t
Definition Timer:24
The 'GA' in osgGA stands for 'GUI Abstraction'; the osgGA namespace provides facilities to help devel...
Definition Callback:21
std::deque< std::string > FilePathList
list of directories to search through which searching for files.
Definition Callbacks:28
The osgPresentation library is a NodeKit that extends the core scene graph to support 3D scene graph ...
Definition AnimationMaterial:26
Operation
Operations related to click to run/load/key events.
Definition SlideEventHandler:36
@ JUMP
Definition SlideEventHandler:40
@ FORWARD_TOUCH_EVENT
Definition SlideEventHandler:42
@ FORWARD_MOUSE_EVENT
Definition SlideEventHandler:41
@ EVENT
Definition SlideEventHandler:39
@ LOAD
Definition SlideEventHandler:38
@ RUN
Definition SlideEventHandler:37
Definition ApplicationUsage:26
Copy Op(erator) used to control whether shallow or deep copy is used during copy construction and clo...
Definition CopyOp:41
@ SHALLOW_COPY
Definition CopyOp:47
Base class for all internal nodes in the scene graph.
Definition Node:72
TraversalMode
Definition NodeVisitor:86
@ TRAVERSE_ACTIVE_CHILDREN
Definition NodeVisitor:90
Base class/standard interface for objects which require IO support, cloning and reference counting.
Definition Object:61
Object()
Construct an object.
Definition Object:69
Smart pointer for observed objects, that automatically set pointers to them to null when they are del...
Definition observer_ptr:39
Smart pointer for handling referenced counted objects.
Definition ref_ptr:32
Base class for providing reference counted objects.
Definition Referenced:44
Switch is a Group node that allows switching between children.
Definition Switch:27
General purpose double triple for use as vertices, vectors and normals.
Definition Vec3d:30
Base Event class.
Definition Event:27
virtual void event(osg::NodeVisitor *nv, osg::Drawable *drawable)
Event traversal drawable callback method.
Definition GUIActionAdapter:62
Event class for storing Keyboard, mouse and window events.
Definition GUIEventAdapter:82
KeySymbol
Definition GUIEventAdapter:113
GUIEventHandler provides a basic interface for any class which wants to handle a GUI Events.
Definition GUIEventHandler:50
Definition SlideEventHandler:46
JumpData(bool in_relativeJump, int in_slideNum, int in_layerNum)
Definition SlideEventHandler:52
int getSlideNum() const
Definition SlideEventHandler:97
bool relativeJump
Definition SlideEventHandler:108
void setLayerNum(int num)
Definition SlideEventHandler:99
bool getRelativeJump() const
Definition SlideEventHandler:94
JumpData(const std::string &in_slideName, const std::string &in_layerName)
Definition SlideEventHandler:57
const std::string & getLayerName() const
Definition SlideEventHandler:106
std::string slideName
Definition SlideEventHandler:112
bool jump(SlideEventHandler *seh) const
const std::string & getSlideName() const
Definition SlideEventHandler:103
void setSlideNum(int num)
Definition SlideEventHandler:96
int layerNum
Definition SlideEventHandler:110
void setRelativeJump(bool flag)
Definition SlideEventHandler:93
std::string layerName
Definition SlideEventHandler:113
META_Object(osgPresentation, JumpData)
int slideNum
Definition SlideEventHandler:109
bool requiresJump() const
Definition SlideEventHandler:85
JumpData()
Definition SlideEventHandler:47
int getLayerNum() const
Definition SlideEventHandler:100
JumpData & operator=(const JumpData &rhs)
Definition SlideEventHandler:72
void setSlideName(const std::string &name)
Definition SlideEventHandler:102
JumpData(const JumpData &rhs, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
Definition SlideEventHandler:64
void setLayerName(const std::string &name)
Definition SlideEventHandler:105
osg::Vec3d eye
Definition SlideEventHandler:155
HomePosition & operator=(const HomePosition &rhs)
Definition SlideEventHandler:135
META_Object(osgPresentation, HomePosition)
void setCenter(const osg::Vec3d &c)
Definition SlideEventHandler:149
osg::Vec3d up
Definition SlideEventHandler:157
const osg::Vec3d & getEye() const
Definition SlideEventHandler:147
const osg::Vec3d & getUp() const
Definition SlideEventHandler:153
osg::Vec3d center
Definition SlideEventHandler:156
void setUp(const osg::Vec3d &u)
Definition SlideEventHandler:152
HomePosition(const osg::Vec3 &in_eye, const osg::Vec3 &in_center, const osg::Vec3 &in_up)
Definition SlideEventHandler:124
void setEye(const osg::Vec3d &e)
Definition SlideEventHandler:146
const osg::Vec3d & getCenter() const
Definition SlideEventHandler:150
HomePosition(const HomePosition &rhs, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
Definition SlideEventHandler:129
HomePosition()
Definition SlideEventHandler:119
Definition SlideEventHandler:161
float _x
Definition SlideEventHandler:209
int getKey() const
Definition SlideEventHandler:196
bool getForwardToDevices() const
Definition SlideEventHandler:205
KeyPosition(const KeyPosition &rhs, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
Definition SlideEventHandler:168
float _y
Definition SlideEventHandler:210
void setX(float x)
Definition SlideEventHandler:198
META_Object(osgPresentation, KeyPosition)
float getY() const
Definition SlideEventHandler:202
KeyPosition & operator=(const KeyPosition &rhs)
Definition SlideEventHandler:177
void set(unsigned int key=0, float x=FLT_MAX, float y=FLT_MAX, bool forward_to_devices=false)
Definition SlideEventHandler:187
osgGA::GUIEventAdapter::KeySymbol _key
Definition SlideEventHandler:208
void setKey(int key)
Definition SlideEventHandler:195
bool _forwardToDevices
Definition SlideEventHandler:211
void setForwardToDevices(bool flag)
Definition SlideEventHandler:204
void setY(float y)
Definition SlideEventHandler:201
KeyPosition(unsigned int key=0, float x=FLT_MAX, float y=FLT_MAX, bool forward_to_devices=false)
Definition SlideEventHandler:162
float getX() const
Definition SlideEventHandler:199
Definition SlideEventHandler:215
virtual void operator()(osg::Node *node) const =0
std::vector< KeyPosition > Keys
Definition SlideEventHandler:227
void addRunString(const std::string &runString)
Definition SlideEventHandler:238
LayerCallbacks _enterLayerCallbacks
Definition SlideEventHandler:255
void addLeaveCallback(LayerCallback *lc)
Definition SlideEventHandler:249
void setJump(const JumpData &jumpData)
Definition SlideEventHandler:240
std::vector< std::string > RunStrings
Definition SlideEventHandler:228
RunStrings _runStrings
Definition SlideEventHandler:245
double _duration
Definition SlideEventHandler:243
void callEnterCallbacks(osg::Node *node)
LayerCallbacks _leaveLayerCallbacks
Definition SlideEventHandler:256
const Keys & getKeys() const
Definition SlideEventHandler:231
void addKey(const KeyPosition &kp)
Definition SlideEventHandler:233
LayerAttributes()
Definition SlideEventHandler:221
std::list< osg::ref_ptr< LayerCallback > > LayerCallbacks
Definition SlideEventHandler:254
JumpData _jumpData
Definition SlideEventHandler:246
const RunStrings & getRunStrings() const
Definition SlideEventHandler:236
Keys _keys
Definition SlideEventHandler:244
const JumpData & getJumpData() const
Definition SlideEventHandler:241
void setDuration(double duration)
Definition SlideEventHandler:224
double getDuration() const
Definition SlideEventHandler:225
void setKeys(const Keys &keys)
Definition SlideEventHandler:230
void setRunStrings(const RunStrings &runStrings)
Definition SlideEventHandler:235
void addEnterCallback(LayerCallback *lc)
Definition SlideEventHandler:248
void callLeaveCallbacks(osg::Node *node)
LayerAttributes(double in_duration)
Definition SlideEventHandler:222
FilePathData(const osgDB::FilePathList &fpl)
Definition SlideEventHandler:261
osgDB::FilePathList filePathList
Definition SlideEventHandler:263
Definition SlideEventHandler:268
bool operator()(const T &lhs, const U &rhs) const
Definition SlideEventHandler:270
Definition SlideEventHandler:277
virtual ~ObjectOperator()
Definition SlideEventHandler:289
virtual void * ptr() const =0
virtual void leave(SlideEventHandler *)=0
virtual void setPause(SlideEventHandler *, bool pause)=0
bool operator<(const ObjectOperator &rhs) const
Definition SlideEventHandler:278
virtual void frame(SlideEventHandler *)
Definition SlideEventHandler:283
virtual void maintain(SlideEventHandler *)=0
virtual void enter(SlideEventHandler *)=0
virtual void reset(SlideEventHandler *)=0
Definition SlideEventHandler:293
bool getPause() const
Definition SlideEventHandler:305
void collect(osg::Node *incomingNode, osg::NodeVisitor::TraversalMode tm=osg::NodeVisitor::TRAVERSE_ACTIVE_CHILDREN)
void processMaintained(SlideEventHandler *seh)
void setPause(SlideEventHandler *seh, bool pause)
bool _pause
Definition SlideEventHandler:317
void frame(SlideEventHandler *)
void reset(SlideEventHandler *seh)
OperatorList _current
Definition SlideEventHandler:320
std::set< osg::ref_ptr< ObjectOperator >, dereference_less > OperatorList
Definition SlideEventHandler:309
OperatorList _maintained
Definition SlideEventHandler:324
void process(SlideEventHandler *seh)
void processOutgoing(SlideEventHandler *seh)
OperatorList _incoming
Definition SlideEventHandler:323
void processIncoming(SlideEventHandler *seh)
OperatorList _outgoing
Definition SlideEventHandler:322
OperatorList _previous
Definition SlideEventHandler:319
Definition SlideEventHandler:329
SlideEventHandler(osgViewer::Viewer *viewer=0)
void updateLight(float x, float y)
void dispatchEvent(osgGA::Event *event)
osg::Switch * getSlide(int slideNum)
bool _updateOpacityActive
Definition SlideEventHandler:447
bool _loopPresentation
Definition SlideEventHandler:442
double _timeLastKeyPresses
Definition SlideEventHandler:461
int _activeLayer
Definition SlideEventHandler:435
SlideEventHandler(const SlideEventHandler &seh, const osg::CopyOp &copyop)
void dispatchEvent(const KeyPosition &keyPosition)
bool getReleaseAndCompileOnEachNewSlide() const
Definition SlideEventHandler:393
double _timePerSlide
Definition SlideEventHandler:440
osg::Timer_t _tickAtLastSlideOrLayerChange
Definition SlideEventHandler:456
double _minimumTimeBetweenKeyPresses
Definition SlideEventHandler:460
osg::Timer_t _tickAtFirstSlideOrLayerChange
Definition SlideEventHandler:455
float _previousX
Definition SlideEventHandler:448
bool getRequestReload() const
Definition SlideEventHandler:408
bool _firstTraversal
Definition SlideEventHandler:437
double getCurrentTimeDelayBetweenSlides() const
double getDuration(const osg::Node *node) const
bool selectSlide(int slideNum, int layerNum=FIRST_POSITION)
virtual bool handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &)
Deprecated, Handle events, return true if handled, false otherwise.
int _activeSlide
Definition SlideEventHandler:432
float _timeDelayOnNewSlideWithMovies
Definition SlideEventHandler:458
bool _updateLightActive
Definition SlideEventHandler:446
osg::ref_ptr< CompileSlideCallback > _compileSlideCallback
Definition SlideEventHandler:465
int _activePresentation
Definition SlideEventHandler:429
int getActiveLayer() const
Definition SlideEventHandler:363
bool getLoopPresentation() const
Definition SlideEventHandler:399
void setLoopPresentation(bool loop)
Definition SlideEventHandler:398
int getActiveSlide() const
Definition SlideEventHandler:362
void releaseSlide(unsigned int slideNum)
osgViewer::Viewer * getViewer()
Definition SlideEventHandler:346
bool _releaseAndCompileOnEachNewSlide
Definition SlideEventHandler:452
~SlideEventHandler()
Definition SlideEventHandler:416
void forwardEventToDevices(osgGA::Event *event)
bool _hold
Definition SlideEventHandler:444
double getReferenceTime() const
Definition SlideEventHandler:410
osg::Node * getLayer(int slideNum, int layerNum)
bool getAutoSteppingActive() const
Definition SlideEventHandler:383
osg::observer_ptr< osg::Switch > _presentationSwitch
Definition SlideEventHandler:431
static SlideEventHandler * instance()
WhichPosition
Definition SlideEventHandler:352
@ FIRST_POSITION
Definition SlideEventHandler:353
@ LAST_POSITION
Definition SlideEventHandler:354
bool _autoSteppingActive
Definition SlideEventHandler:441
osg::observer_ptr< osgViewer::Viewer > _viewer
Definition SlideEventHandler:426
void compileSlide(unsigned int slideNum)
META_Object(osgPresentation, SlideEventHandler)
void updateAlpha(bool, bool, float x, float y)
float _previousY
Definition SlideEventHandler:448
void set(osg::Node *model)
bool _firstSlideOrLayerChange
Definition SlideEventHandler:454
void setReleaseAndCompileOnEachNewSlide(bool flag)
Definition SlideEventHandler:392
bool _requestReload
Definition SlideEventHandler:467
void setAutoSteppingActive(bool flag=true)
Definition SlideEventHandler:382
void setTimeDelayOnNewSlideWithMovies(float t)
Definition SlideEventHandler:395
double getTimeDelayBetweenSlides() const
Definition SlideEventHandler:386
virtual void getUsage(osg::ApplicationUsage &usage) const
Get the user interface usage of this event handler, i.e.
osg::observer_ptr< osg::Switch > _showSwitch
Definition SlideEventHandler:428
float getTimeDelayOnNewSlideWithMovies() const
Definition SlideEventHandler:396
ActiveOperators _activeOperators
Definition SlideEventHandler:463
bool _pause
Definition SlideEventHandler:443
double _previousTime
Definition SlideEventHandler:439
double _referenceTime
Definition SlideEventHandler:438
bool home(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa)
osg::observer_ptr< osg::Switch > _slideSwitch
Definition SlideEventHandler:434
bool _cursorOn
Definition SlideEventHandler:450
osg::Switch * getPresentationSwitch()
Definition SlideEventHandler:348
void setTimeDelayBetweenSlides(double dt)
Definition SlideEventHandler:385
Viewer holds a single view on to a single scene.
Definition Viewer:28
#define OSGPRESENTATION_EXPORT
Definition Export:38

osg logo
Generated at Sun Jul 27 2025 00:00:00 for the OpenSceneGraph by doxygen 1.14.0.