[1]osg::Group

        [2]osg::PositionAttitudeTransform

        [2]osg::MatrixTransform

                [3]osg::Geode

        [2]osg::MatrixTransform

        [2]osg::MatrixTransform

        [2]osg::MatrixTransform

        [2]osg::MatrixTransform

                [3]osg::Geode

                osg::Geometry

                        [4]osg::Geometry

 



class BoundVisitor :public osg::NodeVisitor
{
public:
//BoundVisitor():osg::NodeVisitor(TRAVERSE_ALL_CHILDREN), _indent(0)
//{

//}

BoundVisitor() :osg::NodeVisitor(TRAVERSE_ALL_CHILDREN), _indent(0)
{
std::cout << "--" << std::endl;
}

virtual void apply(osg::Node &node)
{
for (int i = 0; i < _indent; ++i)
{
std::cout << "\t";
}
std::cout << "[" << _indent + 1 << "]" << node.libraryName()<< "::" << node.className() << std::endl;

_indent++;
traverse(node);
_indent--;
}

virtual void apply(osg::Geode &geode)
{
for (int i = 0; i < _indent; ++i)
{
std::cout << "\t";
}
std::cout << "[" << _indent + 1 << "]" << geode.libraryName()<< "::" << geode.className() << std::endl;


//osg::Drawable *drawable1= geode.getDrawable(0);
unsigned int count = geode.getNumDrawables();
for (int i = 0; i < count; i++)
{
osg::Drawable *drawable = geode.getDrawable(i);
if (!drawable)
{
continue;
}

osg::Geometry *geometry = geode.getDrawable(i)->asGeometry();
if (!geometry)
{
continue;
}

// 顶点数据
osg::Vec3Array* vertices = dynamic_cast<osg::Vec3Array*>(geometry->getVertexArray());
//osg::Vec3Array vertices = geometry->getVertexArray();
int vertexlNum = vertices->size();
//std::cout << "size:"<<vertexlNum <<" "<< geometry->libraryName() <<" "<< geometry->getNumChildrenRequiringEventTraversal() << std::endl;
//geometry->libraryName();

//for (int j = 0; j<100; j++) {
//dstSubset.vertexs.push_back(vertices->at(j).x());
//dstSubset.vertexs.push_back(vertices->at(j).y());
//dstSubset.vertexs.push_back(vertices->at(j).z());
//std::cout << "x:" << vertices->at(j).x() << " y:" << vertices->at(j).y() << " z:" << vertices->at(j).z() << std::endl;
//}

for (int i = 0; i < _indent; ++i)
{
std::cout << "\t";
}
std::cout << drawable->libraryName()
<< "::" << drawable->className() << std::endl;
}

_indent++;
traverse(geode);
_indent--;
}

protected:
int _indent;
};