Added first stage of support for "--levels min max" in osgdem/osgTerrain where
this option controls which levels that an associated imager or DEM contributes to the final model.
This commit is contained in:
@@ -115,6 +115,7 @@ void processFile(std::string filename,
|
||||
osg::Matrixd &geoTransform,
|
||||
bool geoTransformSet,
|
||||
bool geoTransformScale,
|
||||
bool minmaxLevelSet, unsigned int min_level, unsigned int max_level,
|
||||
osg::ref_ptr<osgTerrain::DataSet> dataset) {
|
||||
|
||||
if(filename.empty()) return;
|
||||
@@ -139,6 +140,10 @@ void processFile(std::string filename,
|
||||
osgTerrain::DataSet::Source::PREFER_CONFIG_SETTINGS);
|
||||
source->setGeoTransform(geoTransform);
|
||||
}
|
||||
if (minmaxLevelSet)
|
||||
{
|
||||
source->setMinMaxLevel(min_level, max_level);
|
||||
}
|
||||
|
||||
dataset->addSource(source);
|
||||
}
|
||||
@@ -152,7 +157,10 @@ void processFile(std::string filename,
|
||||
for(i = dirContents.begin(); i != dirContents.end(); ++i) {
|
||||
if((*i != ".") && (*i != "..")) {
|
||||
fullfilename = filename + '/' + *i;
|
||||
processFile(fullfilename, type, currentCS, geoTransform, geoTransformSet, geoTransformScale, dataset);
|
||||
processFile(fullfilename, type, currentCS,
|
||||
geoTransform, geoTransformSet, geoTransformScale,
|
||||
minmaxLevelSet, min_level, max_level,
|
||||
dataset);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -327,7 +335,7 @@ int main( int argc, char **argv )
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
unsigned int maximumPossibleLevel = 30;
|
||||
|
||||
|
||||
// read the input data
|
||||
@@ -338,6 +346,8 @@ int main( int argc, char **argv )
|
||||
bool geoTransformSet = false;
|
||||
bool geoTransformScale = false;
|
||||
double xMin, xMax, yMin, yMax;
|
||||
bool minmaxLevelSet = false;
|
||||
unsigned int min_level=0, max_level=maximumPossibleLevel;
|
||||
|
||||
int pos = 1;
|
||||
while(pos<arguments.argc())
|
||||
@@ -501,11 +511,23 @@ int main( int argc, char **argv )
|
||||
std::cout<<"--zt "<<geoTransform(3,2)<<std::endl;
|
||||
}
|
||||
|
||||
else if (arguments.read(pos, "--levels", min_level, max_level))
|
||||
{
|
||||
minmaxLevelSet = true;
|
||||
std::cout<<"--levels, min_level="<<min_level<<" max_level="<<max_level<<std::endl;
|
||||
}
|
||||
|
||||
else if (arguments.read(pos, "-d",filename))
|
||||
{
|
||||
std::cout<<"-d "<<filename<<std::endl;
|
||||
processFile(filename, osgTerrain::DataSet::Source::HEIGHT_FIELD, currentCS, geoTransform, geoTransformSet, geoTransformScale, dataset);
|
||||
processFile(filename, osgTerrain::DataSet::Source::HEIGHT_FIELD, currentCS,
|
||||
geoTransform, geoTransformSet, geoTransformScale,
|
||||
minmaxLevelSet, min_level, max_level,
|
||||
dataset);
|
||||
|
||||
minmaxLevelSet = false;
|
||||
min_level=0; max_level=maximumPossibleLevel;
|
||||
|
||||
geoTransformSet = false;
|
||||
geoTransformScale = false;
|
||||
geoTransform.makeIdentity();
|
||||
@@ -513,8 +535,14 @@ int main( int argc, char **argv )
|
||||
else if (arguments.read(pos, "-t",filename))
|
||||
{
|
||||
std::cout<<"-t "<<filename<<std::endl;
|
||||
processFile(filename, osgTerrain::DataSet::Source::IMAGE, currentCS, geoTransform, geoTransformSet, geoTransformScale, dataset);
|
||||
processFile(filename, osgTerrain::DataSet::Source::IMAGE, currentCS,
|
||||
geoTransform, geoTransformSet, geoTransformScale,
|
||||
minmaxLevelSet, min_level, max_level,
|
||||
dataset);
|
||||
|
||||
minmaxLevelSet = false;
|
||||
min_level=0; max_level=maximumPossibleLevel;
|
||||
|
||||
geoTransformSet = false;
|
||||
geoTransformScale = false;
|
||||
geoTransform.makeIdentity();
|
||||
@@ -522,8 +550,11 @@ int main( int argc, char **argv )
|
||||
else if (arguments.read(pos, "-m",filename))
|
||||
{
|
||||
std::cout<<"-m "<<filename<<std::endl;
|
||||
processFile(filename, osgTerrain::DataSet::Source::MODEL, currentCS, geoTransform, geoTransformSet, geoTransformScale, dataset);
|
||||
processFile(filename, osgTerrain::DataSet::Source::MODEL, currentCS, geoTransform, geoTransformSet, geoTransformScale, minmaxLevelSet, min_level, max_level, dataset);
|
||||
|
||||
minmaxLevelSet = false;
|
||||
min_level=0; max_level=maximumPossibleLevel;
|
||||
|
||||
geoTransformSet = false;
|
||||
geoTransformScale = false;
|
||||
geoTransform.makeIdentity();
|
||||
|
||||
@@ -34,8 +34,10 @@ class OSGTERRAIN_EXPORT DataSet : public osg::Referenced
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
static const unsigned int MAXIMUM_NUMBER_OF_LEVELS = 30;
|
||||
|
||||
class Source;
|
||||
|
||||
|
||||
struct SpatialProperties
|
||||
{
|
||||
@@ -174,7 +176,9 @@ class OSGTERRAIN_EXPORT DataSet : public osg::Referenced
|
||||
_sortValue(0.0),
|
||||
_temporaryFile(false),
|
||||
_coordinateSystemPolicy(PREFER_FILE_SETTINGS),
|
||||
_geoTransformPolicy(PREFER_FILE_SETTINGS)
|
||||
_geoTransformPolicy(PREFER_FILE_SETTINGS),
|
||||
_minLevel(0),
|
||||
_maxLevel(MAXIMUM_NUMBER_OF_LEVELS)
|
||||
{}
|
||||
|
||||
Source(Type type, const std::string& filename):
|
||||
@@ -183,7 +187,9 @@ class OSGTERRAIN_EXPORT DataSet : public osg::Referenced
|
||||
_filename(filename),
|
||||
_temporaryFile(false),
|
||||
_coordinateSystemPolicy(PREFER_FILE_SETTINGS),
|
||||
_geoTransformPolicy(PREFER_FILE_SETTINGS)
|
||||
_geoTransformPolicy(PREFER_FILE_SETTINGS),
|
||||
_minLevel(0),
|
||||
_maxLevel(MAXIMUM_NUMBER_OF_LEVELS)
|
||||
{}
|
||||
|
||||
void setSortValue(double s) { _sortValue = s; }
|
||||
@@ -216,6 +222,15 @@ class OSGTERRAIN_EXPORT DataSet : public osg::Referenced
|
||||
|
||||
void assignCoordinateSystemAndGeoTransformAccordingToParameterPolicy();
|
||||
|
||||
|
||||
|
||||
void setMinLevel(unsigned int minLevel) { _minLevel = minLevel; }
|
||||
void setMaxLevel(unsigned int maxLevel) { _maxLevel = maxLevel; }
|
||||
void setMinMaxLevel(unsigned int minLevel, unsigned int maxLevel) { _minLevel = minLevel; _maxLevel = maxLevel; }
|
||||
|
||||
unsigned int getMinLevel() const { return _minLevel; }
|
||||
unsigned int getMaxLevel() const { return _maxLevel; }
|
||||
|
||||
void setSourceData(SourceData* data) { _sourceData = data; if (_sourceData.valid()) _sourceData->_source = this; }
|
||||
SourceData* getSourceData() { return _sourceData.get(); }
|
||||
|
||||
@@ -279,6 +294,9 @@ class OSGTERRAIN_EXPORT DataSet : public osg::Referenced
|
||||
|
||||
ParameterPolicy _coordinateSystemPolicy;
|
||||
ParameterPolicy _geoTransformPolicy;
|
||||
|
||||
unsigned int _minLevel;
|
||||
unsigned int _maxLevel;
|
||||
|
||||
osg::ref_ptr<SourceData> _sourceData;
|
||||
|
||||
|
||||
@@ -2416,12 +2416,18 @@ void DataSet::DestinationTile::readFrom(CompositeSource* sourceGraph)
|
||||
for(CompositeSource::source_iterator itr(sourceGraph);itr.valid();++itr)
|
||||
{
|
||||
|
||||
SourceData* data = (*itr)->getSourceData();
|
||||
if (data)
|
||||
Source* source = itr->get();
|
||||
|
||||
if (_level>=source->getMinLevel() && _level<=source->getMaxLevel())
|
||||
{
|
||||
std::cout<<"DataSet::DestinationTile::readFrom -> SourceData::read() "<<std::endl;
|
||||
if (_imagery.valid()) data->read(*_imagery);
|
||||
if (_terrain.valid()) data->read(*_terrain);
|
||||
SourceData* data = (*itr)->getSourceData();
|
||||
if (data)
|
||||
{
|
||||
std::cout<<"DataSet::DestinationTile::readFrom -> SourceData::read() "<<std::endl;
|
||||
std::cout<<" destination._level="<<_level<<"\t"<<source->getMinLevel()<<"\t"<<source->getMaxLevel()<<std::endl;
|
||||
if (_imagery.valid()) data->read(*_imagery);
|
||||
if (_terrain.valid()) data->read(*_terrain);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user