osg::NodeVisitor

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

猜你喜欢

转载自www.cnblogs.com/herd/p/11099492.html