From b0bede80c50b0afd7b7c1dee734bc7e5c88129af Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 24 Aug 2007 18:48:26 +0000 Subject: [PATCH] Added writing out of Terrain, Layer and Locators, and reading in of .terrain string. --- .../osgTerrain/ReaderWriterOsgTerrain.cpp | 6 +- src/osgPlugins/osgTerrain/Terrain.cpp | 133 ++++++++++++++++++ 2 files changed, 138 insertions(+), 1 deletion(-) diff --git a/src/osgPlugins/osgTerrain/ReaderWriterOsgTerrain.cpp b/src/osgPlugins/osgTerrain/ReaderWriterOsgTerrain.cpp index 348d7b83f..a01d7a87e 100644 --- a/src/osgPlugins/osgTerrain/ReaderWriterOsgTerrain.cpp +++ b/src/osgPlugins/osgTerrain/ReaderWriterOsgTerrain.cpp @@ -34,6 +34,7 @@ class ReaderWriterTerrain : public osgDB::ReaderWriter if (osgDB::equalCaseInsensitive(ext,"terrain")) { +#if 0 KeywordValueMap keywordValueMap; parseTerrainString(osgDB::getNameLessExtension(file), keywordValueMap); @@ -43,7 +44,10 @@ class ReaderWriterTerrain : public osgDB::ReaderWriter { osg::notify(osg::NOTICE)<<"["<first<<"] = "<<"["<second<<"]"< cl = new osgTerrain::CompositeLayer; + + int local_entry = fr[0].getNoNestedBrackets(); + + fr += 2; + while (!fr.eof() && fr[0].getNoNestedBrackets()>local_entry) + { + osgTerrain::Layer* layer = readLayer(fr); + if (layer) cl->addLayer(layer); + + ++fr; + } + + layer = cl.get(); + + itrAdvanced = true; + + ++fr; + + } + if (fr.matchSequence("Images {") || fr.matchSequence("images {")) { osg::ref_ptr cl = new osgTerrain::CompositeLayer; @@ -297,9 +321,118 @@ bool Terrain_readLocalData(osg::Object& obj, osgDB::Input &fr) return itrAdvanced; } +bool writeLocator(const osgTerrain::Locator& locator, osgDB::Output& fw) +{ + const osgTerrain::CartesianLocator* cartesian = dynamic_cast(&locator); + if (cartesian) + { + fw.indent()<<"CartesianLocator "<getOriginX()<<" "<getOriginY()<<" "<getLengthX()<<" "<getLengthY()<(&locator); + if (ellipsoid) + { + fw.indent()<<"CartesianLocator "<getLongitude()<<" "<getLatitude()<<" "<getDeltaLongitude()<<" "<getDeltaLatitude()<(&layer); + if (imageLayer) + { + fw.indent()<<"Image "<getFileName()<(&layer); + if (hfLayer) + { + fw.indent()<<"HeightField "<getFileName()<(&layer); + if (compositeLayer) + { + fw.indent()<<"CompositeLayer {"<getNumLayers();++i) + { + if (compositeLayer->getLayer(i)) + { + writeLayer(*(compositeLayer->getLayer(i)), fw); + } + else if (!compositeLayer->getFileName(i).empty()) + { + fw.indent()<<"image "<getFileName(i)<(obj); + + if (terrain.getLocator()) + { + writeLocator(*terrain.getLocator(),fw); + } + + if (terrain.getElevationLayer()) + { + fw.indent()<<"ElevationLayer {"<0) + { + fw.indent()<<"ColorLayer "<