#include "SGTranslateTransform.hxx"
-static inline void
-set_translation (osg::Matrix &matrix, double position_m, const SGVec3d &axis)
-{
- SGVec3d xyz = axis * position_m;
- matrix.makeIdentity();
- matrix(3, 0) = xyz[0];
- matrix(3, 1) = xyz[1];
- matrix(3, 2) = xyz[2];
-}
-
SGTranslateTransform::SGTranslateTransform() :
_axis(0, 0, 0),
_value(0)
osg::NodeVisitor* nv) const
{
if (_referenceFrame == RELATIVE_RF) {
- osg::Matrix tmp;
- set_translation(tmp, _value, _axis);
- matrix.preMult(tmp);
+ matrix.preMultTranslate(toOsg(_value*_axis));
} else {
- osg::Matrix tmp;
- set_translation(tmp, _value, _axis);
- matrix = tmp;
+ matrix.setTrans(toOsg(_value*_axis));
}
return true;
}
osg::NodeVisitor* nv) const
{
if (_referenceFrame == RELATIVE_RF) {
- osg::Matrix tmp;
- set_translation(tmp, -_value, _axis);
- matrix.postMult(tmp);
+ matrix.postMultTranslate(toOsg(-_value*_axis));
} else {
- osg::Matrix tmp;
- set_translation(tmp, -_value, _axis);
- matrix = tmp;
+ matrix.setTrans(toOsg(-_value*_axis));
}
return true;
}
SGTranslateTransform::computeBound() const
{
osg::BoundingSphere bs = osg::Group::computeBound();
- bs._center += _axis.osg()*_value;
+ bs._center += toOsg(_axis)*_value;
return bs;
}
bool TranslateTransform_readLocalData(osg::Object& obj, osgDB::Input& fr)
{
- SGTranslateTransform& trans = static_cast<SGTranslateTransform&>(trans);
+ SGTranslateTransform& trans = static_cast<SGTranslateTransform&>(obj);
if (fr[0].matchWord("axis")) {
++fr;
- SGVec3d axis;
- if (fr.readSequence(axis.osg()))
+ osg::Vec3d axis;
+ if (fr.readSequence(axis))
fr += 3;
else
return false;
- trans.setAxis(axis);
+ trans.setAxis(toSG(axis));
}
if (fr[0].matchWord("value")) {
++fr;