OpenSceneGraph/src/osgPlugins/osg/Transform.cpp
Robert Osfield c52207b637 Added new Transform::ReferenceType enum ABSOLUTE_RF_INHERIT_VIEWPOINT to support
internal RTT cameras that wish to use the main cameras view/eye point for LOD and other
distance based tests.
2007-02-07 16:32:14 +00:00

97 lines
2.6 KiB
C++

#include "osg/Transform"
#include "osg/MatrixTransform"
#include "osgDB/Registry"
#include "osgDB/Input"
#include "osgDB/Output"
#include "osg/Notify"
using namespace osg;
using namespace osgDB;
// forward declare functions to use later.
bool Transform_readLocalData(Object& obj, Input& fr);
bool Transform_writeLocalData(const Object& obj, Output& fw);
// register the read and write functions with the osgDB::Registry.
RegisterDotOsgWrapperProxy g_TransformProxy
(
new osg::Transform,
"Transform",
"Object Node Transform Group",
&Transform_readLocalData,
&Transform_writeLocalData,
DotOsgWrapper::READ_AND_WRITE
);
bool Transform_readLocalData(Object& obj, Input& fr)
{
bool iteratorAdvanced = false;
Transform& transform = static_cast<Transform&>(obj);
if (fr[0].matchWord("Type"))
{
if (fr[1].matchWord("DYNAMIC"))
{
transform.setDataVariance(osg::Object::DYNAMIC);
fr +=2 ;
iteratorAdvanced = true;
}
else if (fr[1].matchWord("STATIC"))
{
transform.setDataVariance(osg::Object::STATIC);
fr +=2 ;
iteratorAdvanced = true;
}
}
if (fr[0].matchWord("referenceFrame"))
{
if (fr[1].matchWord("RELATIVE_TO_ABSOLUTE") || fr[1].matchWord("ABSOLUTE") || fr[1].matchWord("ABSOLUTE_RF"))
{
transform.setReferenceFrame(Transform::ABSOLUTE_RF);
fr += 2;
iteratorAdvanced = true;
}
if (fr[1].matchWord("RELATIVE_TO_ABSOLUTE") || fr[1].matchWord("ABSOLUTE_RF_INHERIT_VIEWPOINT") )
{
transform.setReferenceFrame(Transform::ABSOLUTE_RF_INHERIT_VIEWPOINT);
fr += 2;
iteratorAdvanced = true;
}
if (fr[1].matchWord("RELATIVE_TO_PARENTS") || fr[1].matchWord("RELATIVE") || fr[1].matchWord("RELATIVE_RF"))
{
transform.setReferenceFrame(Transform::RELATIVE_RF);
fr += 2;
iteratorAdvanced = true;
}
}
return iteratorAdvanced;
}
bool Transform_writeLocalData(const Object& obj, Output& fw)
{
const Transform& transform = static_cast<const Transform&>(obj);
fw.indent() << "referenceFrame ";
switch (transform.getReferenceFrame())
{
case Transform::ABSOLUTE_RF:
fw << "ABSOLUTE\n";
break;
case Transform::ABSOLUTE_RF_INHERIT_VIEWPOINT:
fw << "ABSOLUTE_RF_INHERIT_VIEWPOINT\n";
break;
case Transform::RELATIVE_RF:
default:
fw << "RELATIVE\n";
};
return true;
}