⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 autotransform.cpp

📁 最新osg包
💻 CPP
字号:
#include <osg/AutoTransform>#include <osg/io_utils>#include <osgDB/Registry>#include <osgDB/Input>#include <osgDB/Output>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<AutoTransform&>(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("minimumScale %f"))    {        float scale;        fr[1].getFloat(scale);                transform.setMinimumScale(scale);        fr += 2;        iteratorAdvanced = true;    }    if (fr.matchSequence("maximumScale %f"))    {        float scale;        fr[1].getFloat(scale);                transform.setMaximumScale(scale);        fr += 2;        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.setAutoRotateMode((w == "TRUE") ? osg::AutoTransform::ROTATE_TO_SCREEN : osg::AutoTransform::NO_ROTATION);        fr += 2;        iteratorAdvanced = true;    }    if (fr.matchSequence("autoRotateMode %w"))    {        std::string w(fr[1].getStr());                if (w=="ROTATE_TO_SCREEN") transform.setAutoRotateMode(osg::AutoTransform::ROTATE_TO_SCREEN);                else if (w=="ROTATE_TO_CAMERA") transform.setAutoRotateMode(osg::AutoTransform::ROTATE_TO_CAMERA);                else if (w=="NO_ROTATION") transform.setAutoRotateMode(osg::AutoTransform::NO_ROTATION);                        fr += 2;        iteratorAdvanced = true;    }    if (fr.matchSequence("autoScaleToScreen %w"))    {        std::string w(fr[1].getStr());        transform.setAutoScaleToScreen(w == "TRUE");        fr += 2;        iteratorAdvanced = true;    }    if (fr.matchSequence("autoScaleTransistionWidthRatio %f") ||         fr.matchSequence("autoScaleTransitionWidthRatio %f"))    {        float ratio;        fr[1].getFloat(ratio);                transform.setAutoScaleTransitionWidthRatio(ratio);        fr += 2;        iteratorAdvanced = true;    }    return iteratorAdvanced;}bool AutoTransform_writeLocalData(const Object& obj, Output& fw){    const AutoTransform& transform = static_cast<const AutoTransform&>(obj);    fw.indent()<<"position "<<transform.getPosition()<<std::endl;    fw.indent()<<"rotation "<<transform.getRotation()<<std::endl;    fw.indent()<<"scale "<<transform.getScale()<<std::endl;    if (transform.getMinimumScale()>0.0) fw.indent()<<"minimumScale "<<transform.getMinimumScale()<<std::endl;    if (transform.getMaximumScale()<FLT_MAX) fw.indent()<<"maximumScale "<<transform.getMaximumScale()<<std::endl;            fw.indent()<<"pivotPoint "<<transform.getPivotPoint()<<std::endl;    fw.indent()<<"autoUpdateEyeMovementTolerance "<<transform.getAutoUpdateEyeMovementTolerance()<<std::endl;    fw.indent()<<"autoRotateMode ";    switch(transform.getAutoRotateMode())    {      case(osg::AutoTransform::ROTATE_TO_SCREEN): fw<<"ROTATE_TO_SCREEN"<<std::endl; break;      case(osg::AutoTransform::ROTATE_TO_CAMERA): fw<<"ROTATE_TO_CAMERA"<<std::endl; break;      case(osg::AutoTransform::NO_ROTATION):      default: fw<<"NO_ROTATION"<<std::endl; break;    }    fw.indent()<<"autoScaleToScreen "<<(transform.getAutoScaleToScreen()?"TRUE":"FALSE")<<std::endl;        if (transform.getAutoScaleTransitionWidthRatio()!=0.25)     {            fw.indent()<<"autoScaleTransitionWidthRatio "<<transform.getAutoScaleTransitionWidthRatio()<<std::endl;    }        return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -