From 2cab28c3b838a2d0a6705735252394fe810a2f5c Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 20 Dec 2007 15:51:13 +0000 Subject: [PATCH] Added support for min to max level ranges for Layers in support of VirtualPlanetBuilder usage of this. --- include/osgTerrain/Layer | 10 ++++++++++ src/osgPlugins/osgTerrain/Terrain.cpp | 25 +++++++++++++++++++++++++ src/osgTerrain/Layer.cpp | 8 ++++++-- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/include/osgTerrain/Layer b/include/osgTerrain/Layer index 534577333..c22bb893b 100644 --- a/include/osgTerrain/Layer +++ b/include/osgTerrain/Layer @@ -23,6 +23,8 @@ namespace osgTerrain { +#define MAXIMUM_NUMBER_OF_LEVELS 30 + class OSGTERRAIN_EXPORT Layer : public osg::Object { public: @@ -40,6 +42,12 @@ class OSGTERRAIN_EXPORT Layer : public osg::Object void setLocator(Locator* locator) { _locator = locator; } Locator* getLocator() { return _locator.get(); } const Locator* getLocator() const { return _locator.get(); } + + void setMinLevel(unsigned int minLevel) { _minLevel = minLevel; } + unsigned int getMinLevel() const { return _minLevel; } + + void setMaxLevel(unsigned int maxLevel) { _maxLevel = maxLevel; } + unsigned int getMaxLevel() const { return _maxLevel; } void setValidDataOperator(ValidDataOperator* validDataOp) { _validDataOperator = validDataOp; } ValidDataOperator* getValidDataOperator() { return _validDataOperator.get(); } @@ -160,6 +168,8 @@ class OSGTERRAIN_EXPORT Layer : public osg::Object std::string _filename; osg::ref_ptr _locator; + unsigned int _minLevel; + unsigned int _maxLevel; osg::ref_ptr _validDataOperator; osg::Vec4 _defaultValue; diff --git a/src/osgPlugins/osgTerrain/Terrain.cpp b/src/osgPlugins/osgTerrain/Terrain.cpp index 156780215..5045968f7 100644 --- a/src/osgPlugins/osgTerrain/Terrain.cpp +++ b/src/osgPlugins/osgTerrain/Terrain.cpp @@ -185,6 +185,18 @@ osgTerrain::Layer* readLayer(osgDB::Input& fr, bool& itrAdvanced) itrAdvanced = true; } + unsigned int minLevel=0; + if (fr.read("MinLevel",minLevel)) + { + itrAdvanced = true; + } + + unsigned int maxLevel = MAXIMUM_NUMBER_OF_LEVELS; + if (fr.read("MaxLevel",maxLevel)) + { + itrAdvanced = true; + } + if (fr.matchSequence("CompositeLayer {")) { @@ -291,6 +303,9 @@ osgTerrain::Layer* readLayer(osgDB::Input& fr, bool& itrAdvanced) layer->setLocator(locator.get()); } + layer->setMinLevel(minLevel); + layer->setMaxLevel(maxLevel); + return layer.release(); } @@ -554,6 +569,16 @@ bool writeLayer(const osgTerrain::Layer& layer, osgDB::Output& fw) writeLocator(*layer.getLocator(),fw); } + if (layer.getMinLevel()!=0) + { + fw.indent()<<"MinLevel "<(&layer); if (proxyLayer) { diff --git a/src/osgTerrain/Layer.cpp b/src/osgTerrain/Layer.cpp index 02a62e989..11469ee82 100644 --- a/src/osgTerrain/Layer.cpp +++ b/src/osgTerrain/Layer.cpp @@ -16,13 +16,17 @@ using namespace osgTerrain; -Layer::Layer() +Layer::Layer(): + _minLevel(0), + _maxLevel(MAXIMUM_NUMBER_OF_LEVELS) { } Layer::Layer(const Layer& layer,const osg::CopyOp& copyop): osg::Object(layer,copyop), - _filename(layer._filename) + _filename(layer._filename), + _minLevel(layer._minLevel), + _maxLevel(layer._maxLevel) { }