14 #ifndef OSG_ANIMATIONPATH
15 #define OSG_ANIMATIONPATH 1
21 #include <osg/Matrixf>
22 #include <osg/Matrixd>
24 #include <osg/Callback>
41 _timeControlPointMap(ap._timeControlPointMap),
42 _loopMode(ap._loopMode) {}
50 _scale(1.0,1.0,1.0) {}
55 _scale(1.0,1.0,1.0) {}
60 _scale(1.0,1.0,1.0) {}
78 float one_minus_ratio = 1.0f-ratio;
81 _scale = first.
_scale*one_minus_ratio + second.
_scale*ratio;
86 double one_minus_ratio = 1.0-ratio;
89 _scale = first.
_scale*one_minus_ratio + second.
_scale*ratio;
133 if (!getInterpolatedControlPoint(time,cp))
return false;
142 if (!getInterpolatedControlPoint(time,cp))
return false;
151 if (!getInterpolatedControlPoint(time,cp))
return false;
159 if (!getInterpolatedControlPoint(time,cp))
return false;
165 virtual bool getInterpolatedControlPoint(
double time,ControlPoint& controlPoint)
const;
168 void insert(
double time,
const ControlPoint& controlPoint);
170 double getFirstTime()
const {
if (!_timeControlPointMap.empty())
return _timeControlPointMap.begin()->first;
else return 0.0;}
171 double getLastTime()
const {
if (!_timeControlPointMap.empty())
return _timeControlPointMap.rbegin()->first;
else return 0.0;}
172 double getPeriod()
const {
return getLastTime()-getFirstTime();}
194 bool empty()
const {
return _timeControlPointMap.empty(); }
196 void clear() { _timeControlPointMap.clear(); }
199 void read(std::istream& in);
202 void write(std::ostream& out)
const;
205 void write(TimeControlPointMap::const_iterator itr, std::ostream& out)
const;
222 _pivotPoint(0.0,0.0,0.0),
223 _useInverseMatrix(false),
225 _timeMultiplier(1.0),
233 _animationPath(apc._animationPath),
234 _pivotPoint(apc._pivotPoint),
235 _useInverseMatrix(apc._useInverseMatrix),
236 _timeOffset(apc._timeOffset),
237 _timeMultiplier(apc._timeMultiplier),
238 _firstTime(apc._firstTime),
239 _latestTime(apc._latestTime),
241 _pauseTime(apc._pauseTime) {}
249 _pivotPoint(0.0,0.0,0.0),
250 _useInverseMatrix(false),
251 _timeOffset(timeOffset),
252 _timeMultiplier(timeMultiplier),
279 virtual void reset();
281 void setPause(
bool pause);
287 virtual double getAnimationTime()
const;
const Vec3d & getPivotPoint() const
void postMultScale(const Vec3d &v)
AnimationPath(const AnimationPath &ap, const CopyOp ©op=CopyOp::SHALLOW_COPY)
void getMatrix(Matrixf &matrix) const
void preMultTranslate(const Vec3d &v)
bool getInverse(double time, Matrixf &matrix) const
void setTimeMultiplier(double multiplier)
const osg::Vec3d & getScale() const
LoopMode getLoopMode() const
ControlPoint(const osg::Vec3d &position, const osg::Quat &rotation, const osg::Vec3d &scale)
void postMultTranslate(const Vec3d &v)
void interpolate(double ratio, const ControlPoint &first, const ControlPoint &second)
bool getMatrix(double time, Matrixd &matrix) const
double getTimeOffset() const
AnimationPath * getAnimationPath()
void setPosition(const osg::Vec3d &position)
void postMultScale(const Vec3d &v)
double getLastTime() const
const AnimationPath * getAnimationPath() const
const osg::Quat & getRotation() const
AnimationPathCallback(AnimationPath *ap, double timeOffset=0.0, double timeMultiplier=1.0)
void interpolate(float ratio, const ControlPoint &first, const ControlPoint &second)
const TimeControlPointMap & getTimeControlPointMap() const
#define META_Object(library, name)
void preMultScale(const Vec3d &v)
std::map< double, ControlPoint > TimeControlPointMap
double getFirstTime() const
ControlPoint(const osg::Vec3d &position)
void setTimeControlPointMap(TimeControlPointMap &tcpm)
void getInverse(Matrixf &matrix) const
bool getInverse(double time, Matrixd &matrix) const
AnimationPathCallback(const AnimationPathCallback &apc, const CopyOp ©op)
void setAnimationPath(AnimationPath *path)
bool getUseInverseMatrix() const
void getMatrix(Matrixd &matrix) const
ref_ptr< AnimationPath > _animationPath
void postMultTranslate(const Vec3d &v)
ControlPoint(const osg::Vec3d &position, const osg::Quat &rotation)
void preMultTranslate(const Vec3d &v)
void setTimeOffset(double offset)
void setScale(const osg::Vec3d &scale)
TimeControlPointMap & getTimeControlPointMap()
const osg::Vec3d & getPosition() const
void setLoopMode(LoopMode lm)
TimeControlPointMap _timeControlPointMap
void setPivotPoint(const Vec3d &pivot)
void makeRotate(const Vec3f &from, const Vec3f &to)
void setUseInverseMatrix(bool useInverseMatrix)
void preMultScale(const Vec3d &v)
void getInverse(Matrixd &matrix) const
double getTimeMultiplier() const
void setRotation(const osg::Quat &rotation)
void makeRotate(const Vec3f &from, const Vec3f &to)
bool getMatrix(double time, Matrixf &matrix) const