//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 OSGGA_ANIMATION_PATH_MANIPULATOR #define OSGGA_ANIMATION_PATH_MANIPULATOR 1 #include #include #include namespace osgGA{ // // The AnimationPathManipulator is a Camera Manipulator that reads an // animation path from a file and plays it back. The file is expected // to be ascii and a succession of lines with 8 floating point values // per line. The succession of values are: // time px py pz ax ay az aw // where: // time = elapsed time in seconds from the begining of the animation // px py pz = World position in catesian coordinates // ax ay az aw = Orientation (attitude) defined as a quaternion class OSGGA_EXPORT AnimationPathManipulator : public CameraManipulator { public: AnimationPathManipulator( osg::AnimationPath* animationPath=0 ); AnimationPathManipulator( const std::string& filename ); void setAnimationPath( osg::AnimationPath* animationPath ) { _animationPath=animationPath; } osg::AnimationPath* getAnimationPath() { return _animationPath.get(); } const osg::AnimationPath* getAnimationPath() const { return _animationPath.get(); } bool valid() const { return _animationPath.valid(); } void init(const GUIEventAdapter& ea,GUIActionAdapter& us); void home(const GUIEventAdapter& ea,GUIActionAdapter& us); virtual bool handle(const GUIEventAdapter& ea,GUIActionAdapter& us); private: bool _valid; void handleFrame( double time ); osg::ref_ptr _animationPath; double _timeOffset; double _timeScale; }; } #endif