#include using namespace osg; Transform::Transform() { _type = DYNAMIC; _mode = MODEL; _matrix = new Matrix; _inverse = new Matrix; _inverseDirty = false; } Transform::Transform(const Transform& transform,const CopyOp& copyop): Group(transform,copyop), _type(transform._type), _mode(transform._mode), _computeTransformCallback(_computeTransformCallback), _matrix(new Matrix(*transform._matrix)), _inverse(new Matrix(*transform._inverse)), _inverseDirty(transform._inverseDirty) { } Transform::Transform(const Matrix& mat ) { _type = DYNAMIC; _mode = MODEL; _matrix = new Matrix(mat); _inverse = new Matrix(); _inverseDirty = false; } Transform::~Transform() { } const bool Transform::computeBound() const { if (!Group::computeBound()) return false; // note, NULL pointer for NodeVisitor, so compute's need // to handle this case gracefully, normally this should not be a problem. Matrix l2w; if (_mode!=PROJECTION && getLocalToWorldMatrix(l2w,NULL)) { Vec3 xdash = _bsphere._center; xdash.x() += _bsphere._radius; xdash = xdash*l2w; Vec3 ydash = _bsphere._center; ydash.y() += _bsphere._radius; ydash = ydash*l2w; Vec3 zdash = _bsphere._center; zdash.y() += _bsphere._radius; zdash = zdash*l2w; _bsphere._center = _bsphere._center*l2w; xdash -= _bsphere._center; float len_xdash = xdash.length(); ydash -= _bsphere._center; float len_ydash = ydash.length(); zdash -= _bsphere._center; float len_zdash = zdash.length(); _bsphere._radius = len_xdash; if (_bsphere._radius