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

📄 sequence.cpp

📁 最新osg包
💻 CPP
字号:
#include "osg/Sequence"#include "osgDB/Registry"#include "osgDB/Input"#include "osgDB/Output"using namespace osg;using namespace osgDB;// forward declare functions to use later.bool Sequence_readLocalData(Object& obj, Input& fr);bool Sequence_writeLocalData(const Object& obj, Output& fw);// register the read and write functions with the osgDB::Registry.RegisterDotOsgWrapperProxy g_SequenceProxy(    new osg::Sequence,    "Sequence",    "Object Node Sequence Group",    &Sequence_readLocalData,    &Sequence_writeLocalData);static bool Sequence_matchLoopMode(const char* str,                                   Sequence::LoopMode& mode){    if (strcmp(str, "LOOP") == 0)    {        mode = Sequence::LOOP;    }    else if (strcmp(str, "SWING") == 0)    {        mode = Sequence::SWING;    }    else    {        return false;    }    return true;}static const char* Sequence_getLoopMode(Sequence::LoopMode mode){    switch (mode) {    case Sequence::SWING:        return "SWING";    case Sequence::LOOP:    default:        return "LOOP";    }}// only storing 'START' and 'STOP' since 'PAUSE' doesn't make sense to mestatic bool Sequence_matchSeqMode(const char* str,                                  Sequence::SequenceMode& mode){    if (strcmp(str, "START") == 0)    {        mode = Sequence::START;    }    else if (strcmp(str, "STOP") == 0)    {        mode = Sequence::STOP;    }    else    {        return false;    }    return true;}static const char* Sequence_getSeqMode(Sequence::SequenceMode mode){    switch (mode) {    case Sequence::START:        return "START";    default:        return "STOP";    }}bool Sequence_readLocalData(Object& obj, Input& fr){    bool iteratorAdvanced = false;    Sequence& sw = static_cast<Sequence&>(obj);    if (fr.matchSequence("defaultTime"))     {        if (fr[1].isFloat())     {        float t;        fr[1].getFloat(t) ;        sw.setDefaultTime(t) ;            iteratorAdvanced = true;            fr += 2;        }    }    else if (fr.matchSequence("frameTime {"))     {        int entry = fr[0].getNoNestedBrackets();        fr += 2;            int i = 0;        while (!fr.eof() && fr[0].getNoNestedBrackets() > entry)         {            float t;            if (fr[0].getFloat(t))             {                sw.setTime(i, t);                ++fr;                i++;            }        }            iteratorAdvanced = true;        ++fr;    }    else if (fr.matchSequence("lastFrameTime"))     {        if (fr[1].isFloat())         {            float t;            fr[1].getFloat(t) ;            sw.setLastFrameTime(t) ;            iteratorAdvanced = true;            fr += 2;        }    }    else if (fr.matchSequence("interval"))     {        Sequence::LoopMode mode;        int begin, end;        if (Sequence_matchLoopMode(fr[1].getStr(), mode) &&            fr[2].getInt(begin) && fr[3].getInt(end))         {            sw.setInterval(mode, begin, end);            iteratorAdvanced = true;            fr += 4;        }    }    else if (fr.matchSequence("duration"))     {        if (fr[1].isFloat() && fr[2].isInt())         {            float speed;            int nreps;            fr[1].getFloat(speed);            fr[2].getInt(nreps);            sw.setDuration(speed, nreps);            iteratorAdvanced = true;            fr += 3;        }    }    else if (fr.matchSequence("mode"))     {        Sequence::SequenceMode mode;        if (Sequence_matchSeqMode(fr[1].getStr(), mode))         {            sw.setMode(mode);            iteratorAdvanced = true;            fr += 2;        }    }    else if (fr.matchSequence("sync"))     {        if (fr[1].isInt())         {        int sync ;        fr[1].getInt(sync) ;        sw.setSync(sync!=0) ;            iteratorAdvanced = true;            fr += 2;        }    }    else if (fr.matchSequence("clearOnStop"))     {        if (fr[1].isInt())         {            int clearOnStop ;            fr[1].getInt(clearOnStop) ;            sw.setClearOnStop(clearOnStop!=0) ;            iteratorAdvanced = true;            fr += 2;        }    }        return iteratorAdvanced;}bool Sequence_writeLocalData(const Object& obj, Output& fw){    const Sequence& sw = static_cast<const Sequence&>(obj);    // default frame time    fw.indent() << "defaultTime " << sw.getDefaultTime() << std::endl;    // frame times    fw.indent() << "frameTime {" << std::endl;    fw.moveIn();    for (unsigned int i = 0; i < sw.getNumChildren(); i++)     {        fw.indent() << sw.getTime(i) << std::endl;    }    fw.moveOut();    fw.indent() << "}" << std::endl;    // last frame time    fw.indent() << "lastFrameTime " << sw.getLastFrameTime() << std::endl;    // loop mode & interval    Sequence::LoopMode mode;    int begin, end;    sw.getInterval(mode, begin, end);    fw.indent() << "interval " << Sequence_getLoopMode(mode) << " " << begin << " " << end << std::endl;    // duration    float speed;    int nreps;    sw.getDuration(speed, nreps);    fw.indent() << "duration " << speed << " " << nreps << std::endl;    // sequence mode    fw.indent() << "mode " << Sequence_getSeqMode(sw.getMode()) << std::endl;    // sync    bool sync ;    sw.getSync(sync);    fw.indent() << "sync " << (int) sync << std::endl;    // clearOnStop    bool clearOnStop ;    sw.getClearOnStop(clearOnStop);    fw.indent() << "clearOnStop " << (int) clearOnStop << std::endl;    return true;}

⌨️ 快捷键说明

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