void RemoveEmptyGroupsVisitor::apply( osg::Group& group ) { bool removed = true; while( removed ) { removed = false; for( unsigned i = 0; i < group.getNumChildren(); ++i ) { osg::Group* child = group.getChild(i)->asGroup(); if ( child ) { if (child->className() == std::string("Group") && child->getStateSet() == 0L && child->getCullCallback() == 0L && child->getUpdateCallback() == 0L && child->getUserData() == 0L && child->getName().empty() && child->getDescriptions().size() == 0 ) { for( unsigned j = 0; j < child->getNumChildren(); ++j ) { group.addChild( child->getChild( j ) ); } group.removeChild( i-- ); removed = true; } } } } traverse(group); }
virtual void apply(osg::Group &group ) { for (unsigned int i = 0; i<group.getNumChildren(); ) { if( dynamic_cast<osgAL::SoundRoot*>(group.getChild(i)) && _mode==SEARCH_AND_DESTROY ) { group.removeChild(i); } else { if (dynamic_cast<osgAL::SoundRoot*>(group.getChild(i)) && _mode==SEARCH) _found_count++; group.getChild(i)->accept(*this); i++; } } }
void GeometryValidator::apply(osg::Group& group) { for(unsigned i=0; i<group.getNumChildren(); ++i) { osg::Geometry* geom = group.getChild(i)->asGeometry(); if ( geom ) { apply( *geom ); if ( geom->getVertexArray() == 0L ) { OE_NOTICE << "removing " << geom->getName() << " b/c of null vertex array\n"; group.removeChild(geom); --i; } } } }