io_particleprocessor.cpp

来自「最新osg包」· C++ 代码 · 共 153 行

CPP
153
字号
#include <osgParticle/ParticleProcessor>#include <osgParticle/ParticleSystem>#include <iostream>#include <osg/ref_ptr>#include <osgDB/Registry>#include <osgDB/Input>#include <osgDB/Output>extern bool  read_particle(osgDB::Input &fr, osgParticle::Particle &P);extern void  write_particle(const osgParticle::Particle &P, osgDB::Output &fw);bool  ParticleProcessor_readLocalData(osg::Object &obj, osgDB::Input &fr);bool  ParticleProcessor_writeLocalData(const osg::Object &obj, osgDB::Output &fw);osgDB::RegisterDotOsgWrapperProxy  ParticleProcessor_Proxy(    0,    "ParticleProcessor",    "Object Node ParticleProcessor",    ParticleProcessor_readLocalData,    ParticleProcessor_writeLocalData);bool ParticleProcessor_readLocalData(osg::Object &obj, osgDB::Input &fr){    osgParticle::ParticleProcessor &myobj = static_cast<osgParticle::ParticleProcessor &>(obj);    bool itAdvanced = false;    osg::ref_ptr<osgParticle::ParticleSystem> ps_proto = new osgParticle::ParticleSystem;        osgParticle::ParticleSystem *ps = static_cast<osgParticle::ParticleSystem *>(fr.readObjectOfType(*ps_proto));    if (ps) {        myobj.setParticleSystem(ps);        itAdvanced = true;    }     if (fr[0].matchWord("enabled")) {        if (fr[1].matchWord("TRUE")) {            myobj.setEnabled(true);            fr += 2;            itAdvanced = true;        } else if (fr[1].matchWord("FALSE")) {            myobj.setEnabled(false);            fr += 2;            itAdvanced = true;        }    }    if (fr[0].matchWord("referenceFrame")) {        if (fr[1].matchWord("RELATIVE_TO_ABSOLUTE") || fr[1].matchWord("ABSOLUTE")) {            myobj.setReferenceFrame(osgParticle::ParticleProcessor::ABSOLUTE_RF);            fr += 2;            itAdvanced = true;        }        if (fr[1].matchWord("RELATIVE_TO_PARENTS") || fr[1].matchWord("RELATIVE")) {            myobj.setReferenceFrame(osgParticle::ParticleProcessor::RELATIVE_RF);            fr += 2;            itAdvanced = true;        }    }    if (fr[0].matchWord("endless")) {        if (fr[1].matchWord("TRUE")) {            myobj.setEndless(true);            fr += 2;            itAdvanced = true;        } else if (fr[1].matchWord("FALSE")) {            myobj.setEndless(false);            fr += 2;            itAdvanced = true;        }    }    if (fr[0].matchWord("lifeTime")) {        float lt;        if (fr[1].getFloat(lt)) {            myobj.setLifeTime(lt);            fr += 2;            itAdvanced = true;        }    }    if (fr[0].matchWord("startTime")) {        float st;        if (fr[1].getFloat(st)) {            myobj.setStartTime(st);            fr += 2;            itAdvanced = true;        }    }    if (fr[0].matchWord("currentTime")) {        float ct;        if (fr[1].getFloat(ct)) {            myobj.setCurrentTime(ct);            fr += 2;            itAdvanced = true;        }    }    if (fr[0].matchWord("resetTime")) {        float ct;        if (fr[1].getFloat(ct)) {            myobj.setResetTime(ct);            fr += 2;            itAdvanced = true;        }    }    return itAdvanced;}bool ParticleProcessor_writeLocalData(const osg::Object &obj, osgDB::Output &fw){    const osgParticle::ParticleProcessor &myobj = static_cast<const osgParticle::ParticleProcessor &>(obj);    if (myobj.getParticleSystem()) fw.writeObject(*myobj.getParticleSystem());    fw.indent() << "enabled ";    if (myobj.isEnabled())         fw << "TRUE" << std::endl;    else        fw << "FALSE" << std::endl;    fw.indent() << "referenceFrame ";    switch (myobj.getReferenceFrame())    {    case osgParticle::ParticleProcessor::ABSOLUTE_RF:        fw << "ABSOLUTE" << std::endl;        break;    case osgParticle::ParticleProcessor::RELATIVE_RF:    default:        fw << "RELATIVE" << std::endl;    }    fw.indent() << "endless ";    if (myobj.isEndless())        fw << "TRUE" << std::endl;    else        fw << "FALSE" << std::endl;    fw.indent() << "lifeTime " << myobj.getLifeTime() << std::endl;    fw.indent() << "startTime " << myobj.getStartTime() << std::endl;    fw.indent() << "currentTime " << myobj.getCurrentTime() << std::endl;    fw.indent() << "resetTime " << myobj.getResetTime() << std::endl;    return true;}

⌨️ 快捷键说明

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