Changeset 929

Show
Ignore:
Timestamp:
08/29/08 16:47:23
Author:
robert
Message:

Added support for specifying the optional layer sets that should be used and the
policy of how layers should be output.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/include/vpb/BuildOptions

    r925 r929  
    267267        bool getAbortRunOnError() const { return _abortRunOnError; } 
    268268         
     269        enum LayerOutputPolicy 
     270        { 
     271            INLINE, 
     272            EXTERNAL_LOCAL_DIRECTORY, 
     273            EXTERNAL_SET_DIRECTORY 
     274        }; 
     275         
     276        void setDefaultImageLayerOutputPolicy(LayerOutputPolicy policy) { _defaultImageLayerOutputPolicy = policy; } 
     277        LayerOutputPolicy getDefaultImageLayerOutputPolicy() const { return _defaultImageLayerOutputPolicy; } 
     278         
     279        void setDefaultElevationLayerOutputPolicy(LayerOutputPolicy policy) { _defaultElevationLayerOutputPolicy = policy; } 
     280        LayerOutputPolicy getDefaultElevationLayerOutputPolicy() const { return _defaultElevationLayerOutputPolicy; } 
     281         
     282        void setOptionalImageLayerOutputPolicy(LayerOutputPolicy policy) { _optionalImageLayerOutputPolicy = policy; } 
     283        LayerOutputPolicy getOptionalImageLayerOutputPolicy() const { return _optionalImageLayerOutputPolicy; } 
     284         
     285        void setOptionalElevationLayerOutputPolicy(LayerOutputPolicy policy) { _optionalElevationLayerOutputPolicy = policy; } 
     286        LayerOutputPolicy getOptionalElevationLayerOutputPolicy() const { return _optionalElevationLayerOutputPolicy; } 
     287 
     288        void clearOptionalLayerSet() { _optionalLayerSet.clear(); } 
     289        void addOptionalLayerSet(const std::string& setname) { _optionalLayerSet.insert(setname); } 
     290        void removeOptionalLayerSet(const std::string& setname) { _optionalLayerSet.erase(setname); } 
     291         
     292        bool isOptionalLayerSet(const std::string& setname) const { return _optionalLayerSet.count(setname)!=0; } 
     293         
     294        typedef std::set<std::string> OptionalLayerSet; 
     295        void setOptionalLayerSet(const OptionalLayerSet& ols) { _optionalLayerSet = ols; } 
     296        const OptionalLayerSet& getOptionalLayerSet() const { return _optionalLayerSet; } 
     297 
    269298    protected: 
    270299 
     
    331360        bool                                        _abortTaskOnError; 
    332361        bool                                        _abortRunOnError; 
     362         
     363        LayerOutputPolicy                           _defaultImageLayerOutputPolicy; 
     364        LayerOutputPolicy                           _defaultElevationLayerOutputPolicy;         
     365        LayerOutputPolicy                           _optionalImageLayerOutputPolicy;         
     366        LayerOutputPolicy                           _optionalElevationLayerOutputPolicy; 
     367         
     368        OptionalLayerSet                            _optionalLayerSet; 
    333369}; 
    334370 
  • trunk/include/vpb/Serializer

    r828 r929  
    104104    { 
    105105        const C& object = static_cast<const C&>(obj); 
     106 
    106107        if (fw.getWriteOutDefaultValues() || 
    107108            _default != (object.*_getter)()) 
  • trunk/src/vpb/BuildOptions.cpp

    r925 r929  
    7777    _abortTaskOnError = true; 
    7878    _abortRunOnError = false; 
     79     
     80    _defaultImageLayerOutputPolicy = INLINE; 
     81    _defaultElevationLayerOutputPolicy = INLINE; 
     82    _optionalImageLayerOutputPolicy = EXTERNAL_SET_DIRECTORY; 
     83    _optionalElevationLayerOutputPolicy = EXTERNAL_SET_DIRECTORY; 
    7984} 
    8085 
     
    154159    _abortTaskOnError = rhs._abortTaskOnError; 
    155160    _abortRunOnError = rhs._abortRunOnError; 
     161     
     162    _defaultImageLayerOutputPolicy = rhs._defaultImageLayerOutputPolicy; 
     163    _defaultElevationLayerOutputPolicy = rhs._defaultElevationLayerOutputPolicy; 
     164    _optionalImageLayerOutputPolicy = rhs._optionalImageLayerOutputPolicy; 
     165    _optionalElevationLayerOutputPolicy = rhs._optionalElevationLayerOutputPolicy; 
     166     
     167    _optionalLayerSet = rhs._optionalLayerSet; 
    156168} 
    157169 
  • trunk/src/vpb/BuildOptionsIO.cpp

    r925 r929  
    1818#include <string> 
    1919#include <map> 
     20#include <set> 
    2021 
    2122#include <osg/Vec3> 
     
    7778 
    7879 
     80template<typename C, typename T, typename Itr> 
     81class SetSerializer : public osgDB::Serializer 
     82{ 
     83public: 
     84 
     85     typedef const T& (C::*GetterFunctionType)() const; 
     86     typedef void (C::*SetterFunctionType)(const T&); 
     87 
     88     SetSerializer(const char* fieldName, const T& defaultValue, GetterFunctionType getter, SetterFunctionType setter): 
     89        _fieldName(fieldName), 
     90        _default(defaultValue), 
     91        _getter(getter), 
     92        _setter(setter) {} 
     93      
     94     bool write(osgDB::Output& fw, const osg::Object& obj) 
     95     { 
     96        const C& object = static_cast<const C&>(obj); 
     97        if (fw.getWriteOutDefaultValues() || 
     98            _default != (object.*_getter)()) 
     99        { 
     100            const T& value = (object.*_getter)(); 
     101            if (!value.empty()) 
     102            { 
     103                fw.indent()<<_fieldName<<" {"<<std::endl; 
     104                fw.moveIn(); 
     105 
     106                for(Itr itr = value.begin(); 
     107                    itr != value.end(); 
     108                    ++itr) 
     109                { 
     110                    fw.indent()<<*itr<<std::endl; 
     111                } 
     112                fw.moveOut(); 
     113                fw.indent()<<"}"<<std::endl; 
     114            } 
     115        } 
     116         
     117        return true; 
     118     } 
     119 
     120    bool read(osgDB::Input& fr, osg::Object& obj, bool& itrAdvanced) 
     121    { 
     122        C& object = static_cast<C&>(obj); 
     123        if (fr[0].matchWord(_fieldName.c_str()) && fr[1].isOpenBracket()) 
     124        { 
     125            T value; 
     126 
     127            int entry = fr[0].getNoNestedBrackets(); 
     128 
     129            fr += 2; 
     130 
     131            while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) 
     132            { 
     133                if (fr[0].isWord()) value.insert(fr[0].getStr()); 
     134                ++fr; 
     135            } 
     136 
     137            ++fr; 
     138             
     139            (object.*_setter)(value); 
     140            itrAdvanced = true; 
     141        } 
     142         
     143        return true; 
     144     } 
     145      
     146     std::string        _fieldName; 
     147     T                  _default; 
     148     GetterFunctionType _getter; 
     149     SetterFunctionType _setter; 
     150}; 
     151 
     152 
    79153#define CREATE_ENUM_SERIALIZER(CLASS,PROPERTY,PROTOTYPE) \ 
    80154    typedef osgDB::EnumSerializer<CLASS, CLASS::PROPERTY> MySerializer;\ 
     
    86160    ) 
    87161 
     162 
     163#define CREATE_ENUM_SERIALIZER2(CLASS,NAME, PROPERTY,PROTOTYPE) \ 
     164    typedef osgDB::EnumSerializer<CLASS, CLASS::PROPERTY> MySerializer;\ 
     165    osg::ref_ptr<MySerializer> serializer = new MySerializer(\ 
     166        #NAME,\ 
     167        PROTOTYPE.get##NAME(),\ 
     168        &CLASS::get##NAME,\ 
     169        &CLASS::set##NAME\ 
     170    ) 
     171 
    88172     
    89173#define ADD_ENUM_PROPERTY(PROPERTY) \ 
    90174    CREATE_ENUM_SERIALIZER(BuildOptions, PROPERTY, prototype); \ 
     175    _serializerList.push_back(serializer.get()) 
     176 
     177#define ADD_ENUM_PROPERTY2(NAME, PROPERTY) \ 
     178    CREATE_ENUM_SERIALIZER2(BuildOptions, NAME, PROPERTY, prototype); \ 
    91179    _serializerList.push_back(serializer.get()) 
    92180 
     
    138226#define AEV ADD_ENUM_VALUE 
    139227#define AEP ADD_ENUM_PROPERTY 
     228#define AEP2 ADD_ENUM_PROPERTY2 
     229 
    140230 
    141231class BuildOptionsLookUps 
     
    223313        ADD_BOOL_PROPERTY(AbortTaskOnError); 
    224314        ADD_BOOL_PROPERTY(AbortRunOnError); 
     315         
     316        { AEP2(DefaultImageLayerOutputPolicy, LayerOutputPolicy); AEV(INLINE); AEV(EXTERNAL_LOCAL_DIRECTORY); AEV(EXTERNAL_SET_DIRECTORY); } 
     317        { AEP2(DefaultElevationLayerOutputPolicy, LayerOutputPolicy); AEV(INLINE); AEV(EXTERNAL_LOCAL_DIRECTORY); AEV(EXTERNAL_SET_DIRECTORY); } 
     318         
     319        { AEP2(OptionalImageLayerOutputPolicy, LayerOutputPolicy); AEV(INLINE); AEV(EXTERNAL_LOCAL_DIRECTORY); AEV(EXTERNAL_SET_DIRECTORY); } 
     320        { AEP2(OptionalElevationLayerOutputPolicy, LayerOutputPolicy); AEV(INLINE); AEV(EXTERNAL_LOCAL_DIRECTORY); AEV(EXTERNAL_SET_DIRECTORY); } 
     321 
     322        _serializerList.push_back(new SetSerializer<BuildOptions, BuildOptions::OptionalLayerSet, BuildOptions::OptionalLayerSet::const_iterator>( 
     323                "OptionalLayerSet",  
     324                prototype.getOptionalLayerSet(),  
     325                &BuildOptions::getOptionalLayerSet, 
     326                &BuildOptions::setOptionalLayerSet)); 
     327 
    225328    } 
    226329     
     
    233336            (*itr)->read(fr,db, itrAdvanced); 
    234337        } 
     338         
     339         
    235340        return true; 
    236341    } 
  • trunk/src/vpb/Commandline.cpp

    r928 r929  
    506506    usage.addCommandLineOption("--no-abort-run-on-error","Hint to vpbmaster to disable abort of the run when any errors occur (default.)"); 
    507507    usage.addCommandLineOption("--set <setname>","Assign the set name of imagery/dem data."); 
     508    usage.addCommandLineOption("--optional-set <setname>","Add setname to the list of optional layers."); 
     509    usage.addCommandLineOption("--remove-optional-set <setname>","Remove setname to the list of optional layers."); 
    508510} 
    509511 
     
    813815    double xMin, xMax, yMin, yMax; 
    814816     
     817    std::string optionalsetname; 
     818    while(arguments.read("--optional-set",optionalsetname)) { buildOptions->addOptionalLayerSet(optionalsetname); } 
     819    while(arguments.read("--remove-optional-set",optionalsetname)) { buildOptions->removeOptionalLayerSet(optionalsetname); } 
     820 
     821 
    815822    int pos = 1; 
    816823    while(pos<arguments.argc()) 
     
    10531060        } 
    10541061    } 
     1062 
    10551063    return 0;     
    10561064}