00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef SG_ROTATE_TRANSFORM_HXX
00023 #define SG_ROTATE_TRANSFORM_HXX
00024
00025 #include <osg/Transform>
00026 #include <simgear/math/SGMath.hxx>
00027
00028 class SGRotateTransform : public osg::Transform {
00029 public:
00030 SGRotateTransform();
00031 SGRotateTransform(const SGRotateTransform&,
00032 const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY);
00033
00034 META_Node(simgear, SGRotateTransform);
00035
00036 void setCenter(const SGVec3f& center)
00037 { setCenter(toVec3d(center)); }
00038 void setCenter(const SGVec3d& center)
00039 { _center = center; dirtyBound(); }
00040 const SGVec3d& getCenter() const
00041 { return _center; }
00042
00043 void setAxis(const SGVec3f& axis)
00044 { setAxis(toVec3d(axis)); }
00045 void setAxis(const SGVec3d& axis)
00046 { _axis = axis; dirtyBound(); }
00047 const SGVec3d& getAxis() const
00048 { return _axis; }
00049
00050 void setAngleRad(double angle)
00051 { _angleRad = angle; }
00052 double getAngleRad() const
00053 { return _angleRad; }
00054
00055 void setAngleDeg(double angle)
00056 { _angleRad = SGMiscd::deg2rad(angle); }
00057 double getAngleDeg() const
00058 { return SGMiscd::rad2deg(_angleRad); }
00059
00060 virtual bool computeLocalToWorldMatrix(osg::Matrix& matrix,
00061 osg::NodeVisitor* nv) const;
00062 virtual bool computeWorldToLocalMatrix(osg::Matrix& matrix,
00063 osg::NodeVisitor* nv) const;
00064
00065 virtual osg::BoundingSphere computeBound() const;
00066
00067 private:
00068 SGVec3d _center;
00069 SGVec3d _axis;
00070 double _angleRad;
00071 };
00072
00073 #endif