Ejemplo n.º 1
0
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;
} 
Ejemplo n.º 2
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();
}