proxynode.cpp

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

CPP
206
字号
/********************************************************************** * *    FILE:            ProxyNode.cpp * *    DESCRIPTION:    Read/Write osg::ProxyNode in binary format to disk. * *    CREATED BY:        Auto generated by iveGenerate *                    and later modified by Rune Schmidt Jensen. * *    HISTORY:        Created 24.3.2003 * *    Copyright 2003 VR-C **********************************************************************/#include <osgDB/WriteFile>#include <osgDB/ReadFile>#include <osgDB/FileUtils>#include <osgDB/FileNameUtils>#include <osg/Notify>#include "Exception.h"#include "ProxyNode.h"#include "Node.h"using namespace ive;/*for(osgDB::FilePathList::iterator itr=osgDB::getDataFilePathList().begin(); itr!=osgDB::getDataFilePathList().end(); ++itr)printf("#1######%s\n", itr->c_str());for(osgDB::FilePathList::const_iterator itrO=in->getOptions()->getDatabasePathList().begin(); itrO!=in->getOptions()->getDatabasePathList().end(); ++itrO)printf("#2######%s\n", itrO->c_str());namespace osgDB {class PushAndPopDataPath{    public:        PushAndPopDataPath(const std::string& path)        {            getDataFilePathList().push_front(path);        }        ~PushAndPopDataPath()        {            getDataFilePathList().pop_front();        }};}*/void ProxyNode::write(DataOutputStream* out){    // Write ProxyNode's identification.    out->writeInt(IVEPROXYNODE);    // If the osg class is inherited by any other class we should also write this to file.    osg::Node* node = dynamic_cast<osg::Node*>(this);    if(node)    {        static_cast<ive::Node*>(node)->write(out);    }    else        throw Exception("ProxyNode::write(): Could not cast this osg::ProxyNode to an osg::Node.");    out->writeFloat(getRadius());    out->writeInt(getCenterMode());    out->writeVec3(getCenter());    out->writeUInt(getNumFileNames());    unsigned int numChildrenToWriteOut = 0;    unsigned int i;        std::string writeDirectory;    if (!(out->getOptions()->getDatabasePathList().empty())) writeDirectory = out->getOptions()->getDatabasePathList().front();        if (!writeDirectory.empty()) writeDirectory = writeDirectory + "/";        bool writeOutExternalIVEFIles = !out->getIncludeExternalReferences() && out->getWriteExternalReferenceFiles() && !out->getUseOriginalExternalReferences();        for(i=0; i<getNumFileNames(); i++)    {        if (getFileName(i).empty())        {            out->writeString("");                        if (i<getNumChildren()) ++numChildrenToWriteOut;        }        else        {            if(!writeOutExternalIVEFIles)            {                out->writeString(getFileName(i));            }            else            {                std::string ivename = writeDirectory + osgDB::getStrippedName(getFileName(i)) +".ive";                out->writeString(ivename);            }        }    }    if(out->getIncludeExternalReferences()) //--------- inlined mode    {        out->writeUInt(getNumChildren());        for(i=0; i<getNumChildren(); i++)        {            out->writeNode(getChild(i));        }    }    else //----------------------------------------- no inlined mode    {        out->writeUInt(numChildrenToWriteOut);        for(i=0; i<getNumFileNames(); i++)        {            if (i<getNumChildren())            {                if (getFileName(i).empty())                {                    out->writeNode(getChild(i));                }                else if(out->getWriteExternalReferenceFiles())                {                    if(!writeOutExternalIVEFIles)                    {                        osgDB::writeNodeFile(*getChild(i), getFileName(i));                    }                    else                    {                        std::string ivename = writeDirectory + osgDB::getStrippedName(getFileName(i)) +".ive";                        osgDB::writeNodeFile(*getChild(i), ivename);                    }                }            }        }    }}void ProxyNode::read(DataInputStream* in){    // Peek on ProxyNode's identification.    int id = in->peekInt();    if(id == IVEPROXYNODE)    {        // Read ProxyNode's identification.        id = in->readInt();        // If the osg class is inherited by any other class we should also read this from file.        osg::Node* node = dynamic_cast<osg::Node*>(this);        if(node)        {            ((ive::Node*)(node))->read(in);        }        else            throw Exception("ProxyNode::read(): Could not cast this osg::ProxyNode to an osg::Node.");        if (in->getOptions() && !in->getOptions()->getDatabasePathList().empty())        {            const std::string& path = in->getOptions()->getDatabasePathList().front();            if (!path.empty())             {                setDatabasePath(path);            }        }        setRadius(in->readFloat());        setCenterMode((osg::ProxyNode::CenterMode)in->readInt());        setCenter(in->readVec3());        unsigned int numFileNames = in->readUInt();        unsigned int i;        for(i=0; i<numFileNames; i++)        {            setFileName(i, in->readString());        }        unsigned int numChildren = in->readUInt();        for(i=0; i<numChildren; i++)        {            osgDB::FilePathList& fpl = ((osgDB::ReaderWriter::Options*)in->getOptions())->getDatabasePathList();            fpl.push_front( fpl.empty() ? osgDB::getFilePath(getFileName(i)) : fpl.front()+'/'+ osgDB::getFilePath(getFileName(i)));            addChild(in->readNode());                        fpl.pop_front();        }        if( in->getLoadExternalReferenceFiles() )        {            for(i=0; i<numFileNames; i++)            {                if(i>=numChildren && !getFileName(i).empty())                {                    osgDB::FilePathList& fpl = ((osgDB::ReaderWriter::Options*)in->getOptions())->getDatabasePathList();                    fpl.push_front( fpl.empty() ? osgDB::getFilePath(getFileName(i)) : fpl.front()+'/'+ osgDB::getFilePath(getFileName(i)));                    osg::Node *node = osgDB::readNodeFile(getFileName(i), in->getOptions());                    fpl.pop_front();                    if(node)                    {                        insertChild(i, node);                    }                }            }        }    }    else    {        throw Exception("ProxyNode::read(): Expected ProxyNode identification.");    }}

⌨️ 快捷键说明

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