[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;
};