/**
* Simple Feature Filter that changes the value of a Feature data sources attribute
*/// 更改要素数据源属性值的简单要素过滤器。classChangeAttributeFilter:publicFeatureFilter{public:ChangeAttributeFilter(const Config& conf){if(conf.key()=="change_attribute"){
conf.get("key", _key);
conf.get("value", _value);}}virtual Config getConfig()const{// 此处设置的名称,与earth文件中的名称,需要保持一致
Config config("change_attribute");
config.set("key", _key);
config.set("value", _value);return config;}virtual FilterContext push( FeatureList& input, FilterContext& context ){for(FeatureList::iterator itr = input.begin(); itr != input.end(); itr++){//Change the value of the attributeif(_key.isSet()&& _value.isSet()){
itr->get()->set(*_key, std::string(*_value));}}return context;}
optional< std::string > _key;
optional< std::string > _value;};//Register our custom FeatureFilter with osgEarth//The first // 第一步就是要将自定义的特征过滤器注册到osgEarth中OSGEARTH_REGISTER_SIMPLE_FEATUREFILTER(change_attribute, ChangeAttributeFilter);intmain(int argc,char** argv){//Run this example with the feature_custom_filters.earth file in the tests directory for a simple example// 运行的时候,不是输入一般的earth文件,而是需要输入 feature_custom_filters.earth文件
osg::ArgumentParser arguments(&argc,argv);// create a viewer:
osgViewer::Viewer viewer(arguments);//Tell the database pager to not modify the unref settings
viewer.getDatabasePager()->setUnrefImageDataAfterApplyPolicy(false,false);// install our default manipulator (do this before calling load)
viewer.setCameraManipulator(newEarthManipulator());// load an earth file, and support all or our example command-line options// and earth file <external> tags
osg::Node* node =MapNodeHelper().load( arguments,&viewer );if( node ){
viewer.setSceneData( node );// configure the near/far so we don't clip things that are up close
viewer.getCamera()->setNearFarRatio(0.00002);
viewer.getCamera()->setSmallFeatureCullingPixelSize(-1.0f);
viewer.run();}else{
OE_NOTICE
<<"\nUsage: "<< argv[0]<<" file.earth"<< std::endl
<<MapNodeHelper().usage()<< std::endl;}return0;}