OpenSceneGraph/include/osg/MatrixTransform
Robert Osfield f36bc69c58 Made the more of the OSG's referenced object desctructors protected to ensure
that they arn't created on the stack inappropriately.

Split the implemention of Matrix up so that it is a simple no referenced counted
class and can be safefly created on the stack.  To support referenced counting a
seperate subclass now exists, this is RefMatrix which inherits from both Matrix and
Object.
2003-01-10 09:25:42 +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();
Matrix _matrix;
mutable Matrix _inverse;
mutable bool _inverseDirty;
};
}
#endif