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

📄 io_doftransform.cpp

📁 最新osg包
💻 CPP
字号:
#include "osgSim/DOFTransform"#include <osg/io_utils>#include "osgDB/Registry"#include "osgDB/Input"#include "osgDB/Output"using namespace osg;using namespace osgSim;using namespace osgDB;using namespace std;// forward declare functions to use later.bool DOFTransform_readLocalData(Object& obj, Input& fr);bool DOFTransform_writeLocalData(const Object& obj, Output& fw);// register the read and write functions with the osgDB::Registry.RegisterDotOsgWrapperProxy g_DOFTransformProxy(    new osgSim::DOFTransform,    "DOFTransform",    "Object Node Transform DOFTransform Group",    &DOFTransform_readLocalData,    &DOFTransform_writeLocalData,    DotOsgWrapper::READ_AND_WRITE);bool DOFTransform_readLocalData(Object& obj, Input& fr){    bool iteratorAdvanced = false;    DOFTransform& dof = static_cast<DOFTransform&>(obj);    if (fr.matchSequence("PutMatrix {"))    {        fr += 2; // skip over "putMatrix {"        iteratorAdvanced = true;            bool matched = true;        for(int k=0;k<16 && matched;++k)        {            matched = fr[k].isFloat();        }        if (matched)        {            osg::Matrix matrix;            int k=0;            double v;            for(int i=0;i<4;++i)            {                for(int j=0;j<4;++j)                {                    fr[k].getFloat(v);                    matrix(i,j)=v;                    k++;                }            }                        dof.setPutMatrix(matrix);            dof.setInversePutMatrix(Matrix::inverse(matrix));        }                fr.advanceToEndOfCurrentBlock();    }#define ReadVec3(A,B) {  \    if (fr[0].matchWord(B) && \        fr[1].getFloat(vec3[0]) && \        fr[2].getFloat(vec3[1]) && \        fr[3].getFloat(vec3[2])) \    { \        dof.A(vec3); \        fr+=4; \        iteratorAdvanced = true; \    } \}     Vec3 vec3;        ReadVec3(setMinHPR,"minHPR")    ReadVec3(setMaxHPR,"maxHPR")    ReadVec3(setIncrementHPR,"incrementHPR")    ReadVec3(setCurrentHPR,"currentHPR")        ReadVec3(setMinTranslate,"minTranslate")    ReadVec3(setMaxTranslate,"maxTranslate")    ReadVec3(setIncrementTranslate,"incrementTranslate")    ReadVec3(setCurrentTranslate,"currentTranslate")        ReadVec3(setMinScale,"minScale")    ReadVec3(setMaxScale,"maxScale")    ReadVec3(setIncrementScale,"incrementScale")    ReadVec3(setCurrentScale,"currentScale")    if (fr[0].matchWord("multOrder"))    {        if (fr[1].matchWord("PRH")) dof.setHPRMultOrder(DOFTransform::PRH);        else if(fr[1].matchWord("PHR")) dof.setHPRMultOrder(DOFTransform::PHR);        else if(fr[1].matchWord("HPR")) dof.setHPRMultOrder(DOFTransform::HPR);        else if(fr[1].matchWord("HRP")) dof.setHPRMultOrder(DOFTransform::HRP);        else if(fr[1].matchWord("RHP")) dof.setHPRMultOrder(DOFTransform::RHP);        else if(fr[1].matchWord("RPH")) dof.setHPRMultOrder(DOFTransform::RPH);    }        if (fr.matchSequence("limitationFlags %i"))    {        unsigned int flags;        fr[1].getUInt(flags);        dof.setLimitationFlags(flags);            fr += 2;        iteratorAdvanced = true;            }        if (fr[0].matchWord("animationOn"))    {            if (fr[1].matchWord("TRUE")) dof.setAnimationOn(true);        else if (fr[1].matchWord("FALSE")) dof.setAnimationOn(false);            fr += 2;        iteratorAdvanced = true;            }    #undef ReadVec3    return iteratorAdvanced;}bool DOFTransform_writeLocalData(const Object& obj, Output& fw){    const DOFTransform& transform = static_cast<const DOFTransform&>(obj);    const Matrix& matrix = transform.getPutMatrix();    fw.indent()<<"PutMatrix {"<<std::endl;    fw.moveIn();    fw.indent() << matrix(0,0) << " " << matrix(0,1) << " " << matrix(0,2) << " " << matrix(0,3) << std::endl;    fw.indent() << matrix(1,0) << " " << matrix(1,1) << " " << matrix(1,2) << " " << matrix(1,3) << std::endl;    fw.indent() << matrix(2,0) << " " << matrix(2,1) << " " << matrix(2,2) << " " << matrix(2,3) << std::endl;    fw.indent() << matrix(3,0) << " " << matrix(3,1) << " " << matrix(3,2) << " " << matrix(3,3) << std::endl;    fw.indent() << "}" << std::endl;    fw.moveOut();    fw.indent()<<"minHPR             "<<transform.getMinHPR()<<std::endl;    fw.indent()<<"maxHPR             "<<transform.getMaxHPR()<<std::endl;    fw.indent()<<"incrementHPR       "<<transform.getIncrementHPR()<<std::endl;    fw.indent()<<"currentHPR         "<<transform.getCurrentHPR()<<std::endl;    fw.indent()<<"minTranslate       "<<transform.getMinTranslate()<<std::endl;    fw.indent()<<"maxTranslate       "<<transform.getMaxTranslate()<<std::endl;    fw.indent()<<"incrementTranslate "<<transform.getIncrementTranslate()<<std::endl;    fw.indent()<<"currentTranslate   "<<transform.getCurrentTranslate()<<std::endl;    fw.indent()<<"minScale           "<<transform.getMinScale()<<std::endl;    fw.indent()<<"maxScale           "<<transform.getMaxScale()<<std::endl;    fw.indent()<<"incrementScale     "<<transform.getIncrementScale()<<std::endl;    fw.indent()<<"currentScale       "<<transform.getCurrentScale()<<std::endl;    const char* mOrderStr[] = {"PRH", "PHR", "HPR", "HRP", "RPH", "RHP"};    fw.indent()<<"multOrder          "<<mOrderStr[transform.getHPRMultOrder()]<<std::endl;    fw.indent()<<"limitationFlags    0x"<<hex<<transform.getLimitationFlags()<<dec<<std::endl;    fw.indent()<<"animationOn        ";    if (transform.getAnimationOn()) fw<<"TRUE"<<std::endl;    else fw<<"FALSE"<<std::endl;    return true;}

⌨️ 快捷键说明

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