StackedRotateAxisElement 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /* -*-c++-*-
  2. * Copyright (C) 2009 Cedric Pinson <cedric.pinson@plopbyte.net>
  3. *
  4. * This library is open source and may be redistributed and/or modified under
  5. * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
  6. * (at your option) any later version. The full license is in LICENSE file
  7. * included with this distribution, and on the openscenegraph.org website.
  8. *
  9. * This library is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * OpenSceneGraph Public License for more details.
  13. */
  14. #ifndef OSGANIMATION_STACKED_ROTATE_AXIS_ELEMENT
  15. #define OSGANIMATION_STACKED_ROTATE_AXIS_ELEMENT 1
  16. #include <osgAnimation/Export>
  17. #include <osgAnimation/StackedTransformElement>
  18. #include <osgAnimation/Target>
  19. #include <osg/Vec3>
  20. namespace osgAnimation
  21. {
  22. class OSGANIMATION_EXPORT StackedRotateAxisElement : public StackedTransformElement
  23. {
  24. public:
  25. META_Object(osgAnimation, StackedRotateAxisElement);
  26. StackedRotateAxisElement();
  27. StackedRotateAxisElement(const StackedRotateAxisElement&, const osg::CopyOp&);
  28. StackedRotateAxisElement(const std::string& name, const osg::Vec3& axis, double angle);
  29. StackedRotateAxisElement(const osg::Vec3& axis, double angle);
  30. void applyToMatrix(osg::Matrix& matrix) const;
  31. osg::Matrix getAsMatrix() const;
  32. bool isIdentity() const { return (_angle == 0); }
  33. void update(float t = 0.0);
  34. const osg::Vec3& getAxis() const;
  35. double getAngle() const;
  36. void setAxis(const osg::Vec3&);
  37. void setAngle(double);
  38. virtual Target* getOrCreateTarget();
  39. virtual Target* getTarget() {return _target.get();}
  40. virtual const Target* getTarget() const {return _target.get();}
  41. protected:
  42. osg::Vec3 _axis;
  43. double _angle;
  44. osg::ref_ptr<FloatTarget> _target;
  45. };
  46. }
  47. #endif