Integrated Ulrich Hertlien's osg::Sequence node, and osgsequence demo, and
support for osg::Sequence in the pfb loader.
This commit is contained in:
@@ -23,6 +23,7 @@ class Switch;
|
||||
class Impostor;
|
||||
class EarthSky;
|
||||
class OccluderNode;
|
||||
class Sequence;
|
||||
|
||||
/** Visitor for type safe operations on osg::Node's.
|
||||
Based on GOF's Visitor pattern. The NodeVisitor
|
||||
@@ -177,6 +178,7 @@ class SG_EXPORT NodeVisitor : public Referenced
|
||||
virtual void apply(Projection& node) { apply((Group&)node); }
|
||||
virtual void apply(Transform& node) { apply((Group&)node); }
|
||||
virtual void apply(Switch& node) { apply((Group&)node); }
|
||||
virtual void apply(Sequence& node) { apply((Switch&)node); }
|
||||
virtual void apply(LOD& node) { apply((Group&)node); }
|
||||
virtual void apply(Impostor& node) { apply((LOD&)node); }
|
||||
virtual void apply(EarthSky& node) { apply((Group&)node); }
|
||||
|
||||
95
include/osg/Sequence
Normal file
95
include/osg/Sequence
Normal file
@@ -0,0 +1,95 @@
|
||||
// -*-c++-*-
|
||||
|
||||
//C++ header - Open Scene Graph - Copyright (C) 1998-2002 Robert Osfield
|
||||
//Distributed under the terms of the GNU Library General Public License (LGPL)
|
||||
//as published by the Free Software Foundation.
|
||||
|
||||
#ifndef OSG_SEQUENCE
|
||||
#define OSG_SEQUENCE 1
|
||||
|
||||
#include <osg/Switch>
|
||||
|
||||
namespace osg {
|
||||
|
||||
/** Sequence is a Group node which allows automatic, time based
|
||||
switching between children.
|
||||
*/
|
||||
class SG_EXPORT Sequence : public Switch
|
||||
{
|
||||
public :
|
||||
|
||||
Sequence();
|
||||
|
||||
/** Copy constructor using CopyOp to manage deep vs shallow copy.*/
|
||||
Sequence(const Sequence&, const CopyOp& copyop=CopyOp::SHALLOW_COPY);
|
||||
|
||||
META_Node(osg, Sequence);
|
||||
|
||||
virtual void traverse(NodeVisitor& nv);
|
||||
|
||||
/** Set time in seconds for child */
|
||||
void setTime(int frame, float t);
|
||||
|
||||
/** Get time for child */
|
||||
const float getTime(int frame) const;
|
||||
|
||||
/** Interval modes */
|
||||
enum LoopMode {
|
||||
LOOP,
|
||||
SWING
|
||||
};
|
||||
|
||||
/** Set sequence mode & interval. */
|
||||
void setInterval(LoopMode mode, int begin, int end);
|
||||
|
||||
/** Get sequence mode & interval. */
|
||||
inline void getInterval(LoopMode& mode, int& begin, int& end) const {
|
||||
mode = _loopMode;
|
||||
begin = _begin;
|
||||
end = _end;
|
||||
}
|
||||
|
||||
/** Set duration: speed-up & number of repeats */
|
||||
void setDuration(float speed, int nreps = -1);
|
||||
|
||||
/** Get duration */
|
||||
inline void getDuration(float& speed, int& nreps) const {
|
||||
speed = _speed;
|
||||
nreps = _nreps;
|
||||
}
|
||||
|
||||
/** Sequence modes */
|
||||
enum SequenceMode {
|
||||
START,
|
||||
STOP,
|
||||
PAUSE,
|
||||
RESUME
|
||||
};
|
||||
|
||||
/** Set sequence mode. Start/stop & pause/resume. */
|
||||
void setMode(SequenceMode mode);
|
||||
|
||||
/** Get sequence mode. */
|
||||
inline SequenceMode getMode() const { return _mode; }
|
||||
|
||||
protected :
|
||||
|
||||
virtual ~Sequence() {}
|
||||
|
||||
float _last;
|
||||
std::vector<float> _frameTime;
|
||||
|
||||
int _step;
|
||||
|
||||
LoopMode _loopMode;
|
||||
int _begin, _end;
|
||||
|
||||
float _speed;
|
||||
int _nreps, _nrepsremain;
|
||||
|
||||
SequenceMode _mode;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user