root/OpenSceneGraph/trunk/src/osgWrappers/deprecated-dotosg/osg/PagedLOD.cpp @ 13041

Revision 13041, 3.9 kB (checked in by robert, 3 years ago)

Ran script to remove trailing spaces and tabs

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1#include "osg/PagedLOD"
2#include "osg/Notify"
3
4#include "osgDB/Registry"
5#include "osgDB/Input"
6#include "osgDB/Output"
7
8using namespace osg;
9using namespace osgDB;
10
11// forward declare functions to use later.
12bool PagedLOD_readLocalData(Object& obj, Input& fr);
13bool PagedLOD_writeLocalData(const Object& obj, Output& fw);
14
15// register the read and write functions with the osgDB::Registry.
16REGISTER_DOTOSGWRAPPER(PagedLOD)
17(
18    new osg::PagedLOD,
19    "PagedLOD",
20    "Object Node LOD PagedLOD",
21    &PagedLOD_readLocalData,
22    &PagedLOD_writeLocalData
23);
24
25bool PagedLOD_readLocalData(Object& obj, Input& fr)
26{
27    bool iteratorAdvanced = false;
28
29    PagedLOD& lod = static_cast<PagedLOD&>(obj);
30
31    std::string path;
32    if (fr.read("DatabasePath",path))
33    {
34        lod.setDatabasePath(path);
35    }
36    else
37    {
38        if (lod.getDatabasePath().empty() && fr.getOptions() && !fr.getOptions()->getDatabasePathList().empty())
39        {
40            const std::string& path = fr.getOptions()->getDatabasePathList().front();
41            if (!path.empty())
42            {
43                lod.setDatabasePath(path);
44            }
45        }
46    }
47
48    unsigned int num;
49    if (fr[0].matchWord("NumChildrenThatCannotBeExpired") && fr[1].getUInt(num))
50    {
51        lod.setNumChildrenThatCannotBeExpired(num);
52        fr+=2;
53        iteratorAdvanced = true;
54    }
55
56    bool flag;
57    if (fr.read("DisableExternalChildrenPaging", flag))
58    {
59        lod.setDisableExternalChildrenPaging(flag);
60        iteratorAdvanced = true;
61    }
62
63    bool matchFirst;
64    if ((matchFirst=fr.matchSequence("FileNameList {")) || fr.matchSequence("FileNameList %i {"))
65    {
66
67        // set up coordinates.
68        int entry = fr[0].getNoNestedBrackets();
69        if (matchFirst)
70        {
71            fr += 2;
72        }
73        else
74        {
75            fr += 3;
76        }
77
78        unsigned int i=0;
79        while (!fr.eof() && fr[0].getNoNestedBrackets()>entry)
80        {
81            if (fr[0].isString() || fr[0].isQuotedString())
82            {
83                if (fr[0].getStr()) lod.setFileName(i,fr[0].getStr());
84                else lod.setFileName(i,"");
85
86                ++fr;
87                ++i;
88            }
89            else
90            {
91                ++fr;
92            }
93        }
94
95        iteratorAdvanced = true;
96        ++fr;
97
98    }
99
100    int num_children;
101    if (fr[0].matchWord("num_children") &&
102        fr[1].getInt(num_children))
103    {
104        // could allocate space for children here...
105        fr+=2;
106        iteratorAdvanced = true;
107    }
108
109    Node* node = NULL;
110    while((node=fr.readNode())!=NULL)
111    {
112        lod.addChild(node);
113        iteratorAdvanced = true;
114    }
115
116    return iteratorAdvanced;
117}
118
119
120bool PagedLOD_writeLocalData(const Object& obj, Output& fw)
121{
122    const PagedLOD& lod = static_cast<const PagedLOD&>(obj);
123
124
125    if (!lod.getDatabasePath().empty())
126    {
127        fw.indent() << "DatabasePath "<<lod.getDatabasePath()<<std::endl;
128    }
129
130    fw.indent() << "NumChildrenThatCannotBeExpired "<<lod.getNumChildrenThatCannotBeExpired()<<std::endl;
131
132    fw.indent() << "DisableExternalChildrenPaging "<<lod.getDisableExternalChildrenPaging()<<std::endl;
133
134
135    fw.indent() << "FileNameList "<<lod.getNumFileNames()<<" {"<< std::endl;
136    fw.moveIn();
137
138    unsigned int numChildrenToWriteOut = 0;
139
140    for(unsigned int i=0; i<lod.getNumFileNames();++i)
141    {
142        if (lod.getFileName(i).empty())
143        {
144            fw.indent() << "\"\"" << std::endl;
145            ++numChildrenToWriteOut;
146        }
147        else
148        {
149            fw.indent() << lod.getFileName(i) << std::endl;
150        }
151    }
152    fw.moveOut();
153    fw.indent() << "}"<< std::endl;
154
155    fw.indent() << "num_children " << numChildrenToWriteOut << std::endl;
156    for(unsigned int j=0;j<lod.getNumChildren();++j)
157    {
158        if (lod.getFileName(j).empty())
159        {
160            fw.writeObject(*lod.getChild(j));
161        }
162    }
163
164
165    return true;
166}
Note: See TracBrowser for help on using the browser.