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

📄 drawable.cpp

📁 最新osg包
💻 CPP
字号:
#include "osg/Drawable"#include "osg/Notify"#include "osgDB/Registry"#include "osgDB/Input"#include "osgDB/Output"using namespace osg;using namespace osgDB;// forward declare functions to use later.bool Drawable_readLocalData(Object& obj, Input& fr);bool Drawable_writeLocalData(const Object& obj, Output& fw);// register the read and write functions with the osgDB::Registry.RegisterDotOsgWrapperProxy g_DrawableFuncProxy(    /*new osg::Drawable*/NULL,    "Drawable",    "Object Drawable",    &Drawable_readLocalData,    &Drawable_writeLocalData);bool Drawable_readLocalData(Object& obj, Input& fr){    bool iteratorAdvanced = false;    Drawable& drawable = static_cast<Drawable&>(obj);    static ref_ptr<StateSet> s_drawstate = new osg::StateSet;    if (StateSet* readState = static_cast<StateSet*>(fr.readObjectOfType(*s_drawstate)))    {        drawable.setStateSet(readState);        iteratorAdvanced = true;    }    Shape* shape = static_cast<Shape *>(fr.readObjectOfType(type_wrapper<Shape>()));    if (shape)    {        drawable.setShape(shape);        iteratorAdvanced = true;    }    Drawable::UpdateCallback* uc = dynamic_cast<Drawable::UpdateCallback *>(fr.readObjectOfType(type_wrapper<Drawable::UpdateCallback>()));    if (uc)    {        drawable.setUpdateCallback(uc);        iteratorAdvanced = true;    }    Drawable::CullCallback* cc = dynamic_cast<Drawable::CullCallback *>(fr.readObjectOfType(type_wrapper<Drawable::CullCallback>()));    if (cc)    {        drawable.setCullCallback(cc);        iteratorAdvanced = true;    }    Drawable::DrawCallback* dc = dynamic_cast<Drawable::DrawCallback *>(fr.readObjectOfType(type_wrapper<Drawable::DrawCallback>()));    if (dc)    {        drawable.setDrawCallback(dc);        iteratorAdvanced = true;    }    if (fr.matchSequence("initialBound %f %f %f %f %f %f"))    {        BoundingBox bb;        fr[1].getFloat(bb.xMin());        fr[2].getFloat(bb.yMin());        fr[3].getFloat(bb.zMin());        fr[4].getFloat(bb.xMax());        fr[5].getFloat(bb.yMax());        fr[6].getFloat(bb.zMax());        drawable.setInitialBound(bb);        fr += 7;        iteratorAdvanced = true;    }    Drawable::ComputeBoundingBoxCallback* cbc = dynamic_cast<Drawable::ComputeBoundingBoxCallback *>(fr.readObjectOfType(type_wrapper<Drawable::ComputeBoundingBoxCallback>()));    if (cbc)    {        drawable.setComputeBoundingBoxCallback(cbc);        iteratorAdvanced = true;    }    if (fr[0].matchWord("supportsDisplayList"))    {        if (fr[1].matchWord("TRUE"))        {            drawable.setSupportsDisplayList(true);            fr+=2;            iteratorAdvanced = true;        }        else if (fr[1].matchWord("FALSE"))        {            drawable.setSupportsDisplayList(false);            fr+=2;            iteratorAdvanced = true;        }    }    if (fr[0].matchWord("useDisplayList"))    {        if (fr[1].matchWord("TRUE"))        {            drawable.setUseDisplayList(true);            fr+=2;            iteratorAdvanced = true;        }        else if (fr[1].matchWord("FALSE"))        {            drawable.setUseDisplayList(false);            fr+=2;            iteratorAdvanced = true;        }    }        if (fr[0].matchWord("useVertexBufferObjects"))    {        if (fr[1].matchWord("TRUE"))        {            drawable.setUseVertexBufferObjects(true);            fr+=2;            iteratorAdvanced = true;        }        else if (fr[1].matchWord("FALSE"))        {            drawable.setUseVertexBufferObjects(false);            fr+=2;            iteratorAdvanced = true;        }    }    return iteratorAdvanced;}bool Drawable_writeLocalData(const Object& obj, Output& fw){    const Drawable& drawable = static_cast<const Drawable&>(obj);    if (drawable.getStateSet())    {        fw.writeObject(*drawable.getStateSet());    }        if (drawable.getShape())    {        fw.writeObject(*drawable.getShape());    }    if (drawable.getUpdateCallback())    {        fw.writeObject(*drawable.getUpdateCallback());    }    if (drawable.getEventCallback())    {        fw.writeObject(*drawable.getEventCallback());    }    if (drawable.getCullCallback())    {        fw.writeObject(*drawable.getCullCallback());    }    if (drawable.getDrawCallback())    {        fw.writeObject(*drawable.getDrawCallback());    }            if (drawable.getInitialBound().valid())    {        const osg::BoundingBox& bb = drawable.getInitialBound();        fw.indent()<<"initialBound "<<bb.xMin()<<" "<<bb.yMin()<<" "<<bb.zMin()<<" "                                    <<bb.xMax()<<" "<<bb.yMax()<<" "<<bb.zMax()<<std::endl;    }        if (drawable.getComputeBoundingBoxCallback())    {        fw.writeObject(*drawable.getComputeBoundingBoxCallback());    }        if (!drawable.getSupportsDisplayList())    {        fw.indent()<<"supportsDisplayList ";        if (drawable.getSupportsDisplayList()) fw << "TRUE" << std::endl;        else fw << "FALSE" << std::endl;    }    fw.indent()<<"useDisplayList ";    if (drawable.getUseDisplayList()) fw << "TRUE" << std::endl;    else fw << "FALSE" << std::endl;    fw.indent()<<"useVertexBufferObjects ";    if (drawable.getUseVertexBufferObjects()) fw << "TRUE" << std::endl;    else fw << "FALSE" << std::endl;        return true;}

⌨️ 快捷键说明

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