OpenSceneGraph/include/osg/MatrixTransform
Robert Osfield fe64942c54 Added a AnimationPathCallback which can update both a MatrixTransform and a
PositionAttitudeTransform, removed the equivialnt callbacks once found in these
transform classes.

Changed the NodeCallback class so its derived from osg::Object instead of
osg::Referenced to allow it to be saved out in the .osg format.

Added support for Update and Cull callbacks into the .osg file format.

Added support for AnimationPathCallback into the .osg file format.
2003-01-02 20:10:04 +00:00

73 lines
2.1 KiB
Plaintext

//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 OSG_MATRIXTRANSFORM
#define OSG_MATRIXTRANSFORM 1
#include <osg/Transform>
#include <osg/AnimationPath>
namespace osg {
/** MatrixTransform - is a subclass of Transform which has an osg::Matrix
* which represent a 4x4 transformation of its children from local cordinates
* into the Transform's parent coordinates.
*/
class SG_EXPORT MatrixTransform : public Transform
{
public :
MatrixTransform();
/** Copy constructor using CopyOp to manage deep vs shallow copy.*/
MatrixTransform(const MatrixTransform&,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
MatrixTransform(const Matrix& matix);
META_Node(osg, MatrixTransform);
/** Set the transform's matrix.*/
void setMatrix(const Matrix& mat) { (*_matrix) = mat; _inverseDirty=true; dirtyBound(); }
/** Get the matrix. */
inline const Matrix& getMatrix() const { return *_matrix; }
/** pre multiply the transforms matrix.*/
void preMult(const Matrix& mat) { _matrix->preMult(mat); _inverseDirty=true; dirtyBound(); }
/** post multiply the transforms matrix.*/
void postMult(const Matrix& mat) { _matrix->postMult(mat); _inverseDirty=true; dirtyBound(); }
/** Get the inverse matrix. */
inline const Matrix& getInverseMatrix() const
{
if (_inverseDirty)
{
_inverse->invert(*_matrix);
_inverseDirty = false;
}
return *_inverse;
}
virtual bool computeLocalToWorldMatrix(Matrix& matrix,NodeVisitor*) const;
virtual bool computeWorldToLocalMatrix(Matrix& matrix,NodeVisitor*) const;
protected :
virtual ~MatrixTransform();
ref_ptr<Matrix> _matrix;
mutable ref_ptr<Matrix> _inverse;
mutable bool _inverseDirty;
};
}
#endif