osgDB.OutputIterator
是 OpenSceneGraph
中的一个迭代器类,用于输出读取的模型数据到设定的输出流或文件中。它将模型的数据分为若干个部分,每个部分输出一次。
#include <osgDB/ReadFile>
#include <osgDB/Output>
#include <iostream>
int main(int argc, char** argv)
{
std::string filename = "cow.osg";
osg::ref_ptr<osg::Node> model = osgDB::readNodeFile(filename);
if (model)
{
osgDB::Output output(std::cout);
osgDB::OutputIterator oi(output, " ");
output.indent() << "Model Name: " << filename << std::endl;
model->traverse(oi);
}
return 0;
}
在上面的代码中,我们首先读取了一个名为 cow.osg
的模型文件。然后创建一个 osgDB::Output
对象作为输出流,再创建一个 osgDB::OutputIterator
对象,并将输出流对象和缩进字符串作为参数传递进去。
接着设置了一个标题 Model Name: cow.osg
,然后通过调用 osg::Node::traverse()
函数遍历所有的节点,将它们输出到指定的输出流中去。
OutputIterator::OutputIterator(Output &output, const std::string &indent)
使用 Output
对象和缩进字符串 indent
构造一个新的 OutputIterator
对象。
bool OutputIterator::enter(const osg::Object *object)
进入 osg::Object
对象的访问模式。如果返回值为 false
,则直接退出遍历。否则,继续遍历。
void OutputIterator::leave()
离开当前对象,将游程深度减一。
std::ostream &OutputIterator::getOstream()
返回当前迭代器关联的输出流。
void OutputIterator::writeStartBracket()
输出左大括号 {
。游程深度加一。
void OutputIterator::writeEndBracket()
输出右大括号 }
。游程深度减一。
void OutputIterator::writePropertyName(const std::string &name)
输出指定属性名。
void OutputIterator::writeProperty(const std::string &name, osg::Object *obj)
输出指定属性名和属性值。
void OutputIterator::writeElement(unsigned int index, osg::Object *obj)
输出对象的第 index
个元素。
void OutputIterator::writeBeginArray()
输出左中括号 [
。
void OutputIterator::writeEndArray()
输出右中括号 ]
。
void OutputIterator::writeBeginMap()
输出左大括号 {
。游程深度加一。
void OutputIterator::writeEndMap()
输出右大括号 }
。游程深度减一。
void OutputIterator::writeBeginMapEntry(const std::string &keyName)
输出指定键名的键值对。
void OutputIterator::writeEndMapEntry()
结束当前的键值对,输出逗号 ,
。
void OutputIterator::writeValue(const std::string &value)
输出指定的值。
void OutputIterator::writeValue(const char *value, bool quoteIfContainsWhiteSpace = false)
输出指定的字符串。如果 quoteIfContainsWhiteSpace
为 true
,则在包含空格的情况下带引号。
void OutputIterator::writeNoData(const osg::Object * /*obj*/)
输出无数据的信息。
void OutputIterator::reset()
重置游程深度和缩进字符串。