From 8b0a98f03c780b2d09b2eb578047a9b55d331119 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 15 Jun 2004 12:26:39 +0000 Subject: [PATCH] Added Marco's AutoTransform.cpp --- src/osgPlugins/osg/AutoTransform.cpp | 126 +++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 src/osgPlugins/osg/AutoTransform.cpp diff --git a/src/osgPlugins/osg/AutoTransform.cpp b/src/osgPlugins/osg/AutoTransform.cpp new file mode 100644 index 000000000..8711df92e --- /dev/null +++ b/src/osgPlugins/osg/AutoTransform.cpp @@ -0,0 +1,126 @@ +#include + +#include +#include +#include + +using namespace osg; +using namespace osgDB; + +// forward declare functions to use later. +bool AutoTransform_readLocalData(Object& obj, Input& fr); +bool AutoTransform_writeLocalData(const Object& obj, Output& fw); + +// register the read and write functions with the osgDB::Registry. +RegisterDotOsgWrapperProxy g_AutoTransformProxy +( + new osg::AutoTransform, + "AutoTransform", + "Object Node Transform AutoTransform Group", + &AutoTransform_readLocalData, + &AutoTransform_writeLocalData, + DotOsgWrapper::READ_AND_WRITE +); + +bool AutoTransform_readLocalData(Object& obj, Input& fr) +{ + bool iteratorAdvanced = false; + + AutoTransform& transform = static_cast(obj); + + if (fr.matchSequence("position %f %f %f")) + { + osg::Vec3 pos; + fr[1].getFloat(pos[0]); + fr[2].getFloat(pos[1]); + fr[3].getFloat(pos[2]); + + transform.setPosition(pos); + + fr += 4; + iteratorAdvanced = true; + } + + if (fr.matchSequence("rotation %f %f %f %f")) + { + osg::Quat att; + fr[1].getFloat(att[0]); + fr[2].getFloat(att[1]); + fr[3].getFloat(att[2]); + fr[4].getFloat(att[3]); + + transform.setRotation(att); + + fr += 5; + iteratorAdvanced = true; + } + + if (fr.matchSequence("scale %f %f %f")) + { + osg::Vec3 scale; + fr[1].getFloat(scale[0]); + fr[2].getFloat(scale[1]); + fr[3].getFloat(scale[2]); + + transform.setScale(scale); + + fr += 4; + iteratorAdvanced = true; + } + + if (fr.matchSequence("pivotPoint %f %f %f")) + { + osg::Vec3 pivot; + fr[1].getFloat(pivot[0]); + fr[2].getFloat(pivot[1]); + fr[3].getFloat(pivot[2]); + + transform.setPivotPoint(pivot); + + fr += 4; + iteratorAdvanced = true; + } + + if (fr.matchSequence("autoUpdateEyeMovementTolerance %f")) + { + float f; + fr[1].getFloat(f); + transform.setAutoUpdateEyeMovementTolerance(f); + fr += 2; + iteratorAdvanced = true; + } + + if (fr.matchSequence("autoRotateToScreen %w")) + { + std::string w(fr[1].getStr()); + transform.setAutoRotateToScreen(w == "TRUE"); + fr += 2; + iteratorAdvanced = true; + } + + if (fr.matchSequence("autoScaleToScreen %w")) + { + std::string w(fr[1].getStr()); + transform.setAutoScaleToScreen(w == "TRUE"); + fr += 2; + iteratorAdvanced = true; + } + + return iteratorAdvanced; +} + + +bool AutoTransform_writeLocalData(const Object& obj, Output& fw) +{ + const AutoTransform& transform = static_cast(obj); + + fw.indent()<<"position "<