From c37e5eaf18ad7247ece3cd5897b032757cbe59b1 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 8 Jan 2008 13:56:21 +0000 Subject: [PATCH] Added support for MinLevel and MaxLevel for ProxyLayer --- src/osgPlugins/osgTerrain/CompositeLayer.cpp | 31 +++++++++- src/osgPlugins/osgTerrain/Terrain.cpp | 64 ++++++++++++++++++-- 2 files changed, 90 insertions(+), 5 deletions(-) diff --git a/src/osgPlugins/osgTerrain/CompositeLayer.cpp b/src/osgPlugins/osgTerrain/CompositeLayer.cpp index ec76ef8c5..d5755f1be 100644 --- a/src/osgPlugins/osgTerrain/CompositeLayer.cpp +++ b/src/osgPlugins/osgTerrain/CompositeLayer.cpp @@ -41,6 +41,18 @@ bool CompositeLayer_readLocalData(osg::Object& obj, osgDB::Input &fr) locator = dynamic_cast(readObject.get()); if (readObject.valid()) 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("file %s") || fr.matchSequence("file %w") ) { layer.addLayer(fr[1].getStr()); @@ -60,6 +72,9 @@ bool CompositeLayer_readLocalData(osg::Object& obj, osgDB::Input &fr) locator = 0; } + if (minLevel!=0) proxyLayer->setMinLevel(minLevel); + if (maxLevel!=MAXIMUM_NUMBER_OF_LEVELS) proxyLayer->setMaxLevel(maxLevel); + layer.addLayer(proxyLayer); } @@ -73,12 +88,16 @@ bool CompositeLayer_readLocalData(osg::Object& obj, osgDB::Input &fr) osgTerrain::Layer* readLayer = dynamic_cast(readObject.get()); if (readLayer) { - layer.addLayer(readLayer); if (locator.valid()) { readLayer->setLocator(locator.get()); locator = 0; } + + if (minLevel!=0) readLayer->setMinLevel(minLevel); + if (maxLevel!=MAXIMUM_NUMBER_OF_LEVELS) readLayer->setMaxLevel(maxLevel); + + layer.addLayer(readLayer); } if (readObject.valid()) itrAdvanced = true; @@ -109,6 +128,16 @@ bool CompositeLayer_writeLocalData(const osg::Object& obj, osgDB::Output& fw) { fw.writeObject(*locator); } + + if (proxyLayer->getMinLevel()!=0) + { + fw.indent()<<"MinLevel "<getMaxLevel()!=MAXIMUM_NUMBER_OF_LEVELS) + { + fw.indent()<<"MaxLevel "<getFileName()<(readObject.get()); if (readObject.valid()) localAdvanced = 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("ProxyLayer %s") || fr.matchSequence("ProxyLayer %w") ) { osg::ref_ptr image = osgDB::readObjectFile(std::string(fr[1].getStr())+".gdal"); osgTerrain::ProxyLayer* proxyLayer = dynamic_cast(image.get()); if (proxyLayer) { - proxyLayer->setLocator(locator); + if (locator) proxyLayer->setLocator(locator); + if (minLevel!=0) proxyLayer->setMinLevel(minLevel); + if (maxLevel!=MAXIMUM_NUMBER_OF_LEVELS) proxyLayer->setMaxLevel(maxLevel); + terrain.setElevationLayer(proxyLayer); } @@ -151,7 +166,10 @@ bool Terrain_readLocalData(osg::Object& obj, osgDB::Input &fr) osgTerrain::Layer* readLayer = dynamic_cast(readObject.get()); if (readLayer) { - readLayer->setLocator(locator); + if (locator) readLayer->setLocator(locator); + if (minLevel!=0) readLayer->setMinLevel(minLevel); + if (maxLevel!=MAXIMUM_NUMBER_OF_LEVELS) readLayer->setMaxLevel(maxLevel); + terrain.setElevationLayer(readLayer); } @@ -185,13 +203,28 @@ bool Terrain_readLocalData(osg::Object& obj, osgDB::Input &fr) osgTerrain::Locator* locator = dynamic_cast(readObject.get()); if (readObject.valid()) localAdvanced = 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("ProxyFile %s") || fr.matchSequence("ProxyFile %w") ) { osg::ref_ptr image = osgDB::readObjectFile(std::string(fr[1].getStr())+".gdal"); osgTerrain::ProxyLayer* proxyLayer = dynamic_cast(image.get()); if (proxyLayer) { - proxyLayer->setLocator(locator); + if (locator) proxyLayer->setLocator(locator); + if (minLevel!=0) proxyLayer->setMinLevel(minLevel); + if (maxLevel!=MAXIMUM_NUMBER_OF_LEVELS) proxyLayer->setMaxLevel(maxLevel); + terrain.setColorLayer(layerNum, proxyLayer); } @@ -205,7 +238,10 @@ bool Terrain_readLocalData(osg::Object& obj, osgDB::Input &fr) osgTerrain::Layer* readLayer = dynamic_cast(readObject.get()); if (readLayer) { - readLayer->setLocator(locator); + if (locator) readLayer->setLocator(locator); + if (minLevel!=0) readLayer->setMinLevel(minLevel); + if (maxLevel!=MAXIMUM_NUMBER_OF_LEVELS) readLayer->setMaxLevel(maxLevel); + terrain.setColorLayer(layerNum, readLayer); } @@ -293,6 +329,16 @@ bool Terrain_writeLocalData(const osg::Object& obj, osgDB::Output& fw) fw.writeObject(*locator); } + if (proxyLayer->getMinLevel()!=0) + { + fw.indent()<<"MinLevel "<getMinLevel()<getMaxLevel()!=MAXIMUM_NUMBER_OF_LEVELS) + { + fw.indent()<<"MaxLevel "<getMaxLevel()<getFileName()<getMinLevel()!=0) + { + fw.indent()<<"MinLevel "<getMinLevel()<getMaxLevel()!=MAXIMUM_NUMBER_OF_LEVELS) + { + fw.indent()<<"MaxLevel "<getMaxLevel()<getFileName().empty()) fw.indent()<<"ProxyLayer "<getFileName()<