Integrated Ulrich Hertlien's osg::Sequence node, and osgsequence demo, and

support for osg::Sequence in the pfb loader.
This commit is contained in:
Robert Osfield
2002-08-03 18:11:21 +00:00
parent c253d3558b
commit 6a04fc3dee
19 changed files with 894 additions and 18 deletions

View File

@@ -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
View 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