FeatureFilter* FeatureFilterRegistry::create( const Config& conf ) { for (FeatureFilterFactoryList::iterator itr = _factories.begin(); itr != _factories.end(); itr++) { FeatureFilter* filter = itr->get()->create( conf ); if (filter) return filter; } return 0; }
FeatureFilter* FeatureFilterRegistry::create(const Config& conf, const osgDB::Options* dbo) { std::string driver = conf.key(); osg::ref_ptr<FeatureFilter> result; for (FeatureFilterFactoryList::iterator itr = _factories.begin(); result == 0L && itr != _factories.end(); itr++) { result = itr->get()->create( conf ); } if ( !result.valid() ) { // not found; try to load from plugin. if ( driver.empty() ) { OE_WARN << LC << "ILLEGAL- no driver set for feature filter" << std::endl; return 0L; } ConfigOptions options(conf); osg::ref_ptr<osgDB::Options> dbopt = Registry::instance()->cloneOrCreateOptions(dbo); dbopt->setPluginData( FEATURE_FILTER_OPTIONS_TAG, (void*)&options ); std::string driverExt = std::string( ".osgearth_featurefilter_" ) + driver; result = dynamic_cast<FeatureFilter*>( osgDB::readObjectFile( driverExt, dbopt.get() ) ); } if ( !result.valid() ) { OE_WARN << LC << "Failed to load FeatureFilter driver \"" << driver << "\"" << std::endl; } return result.release(); }