#include "ModificationVisitor.h" using namespace osgTerrain; ModificationVisitor::ModificationVisitor(std::string extensionToSet) : _extensionToSet(extensionToSet) { setTraversalMode( osg::NodeVisitor::TRAVERSE_ALL_CHILDREN ); technique = new ellipsoidTechnique(); } void ModificationVisitor::apply( osg::Node& node ) { //OSG_NOTIFY( osg::ALWAYS ) << "ModVisitor: Node found: " << node.className() << std::endl; if(std::string(node.className())=="TerrainTile") { //OSG_NOTIFY( osg::ALWAYS ) << "ModVisitor: Tile found" << std::endl; osgTerrain::TerrainTile* tile = dynamic_cast(&node); if(tile) modifyTile(tile); } traverse( node ); } void ModificationVisitor::apply( osg::PagedLOD& pNode ) { //OSG_NOTIFY( osg::ALWAYS ) << "ModVisitor: pagedLOD found: " << pNode.className() << std::endl; for( unsigned int i=0;i(tile->getElevationLayer()); osg::HeightField* h = hfl->getHeightField(); // ROI to flatten double dest_lat_min = 48.336808; double dest_lat_max = 48.370467; double dest_lon_min = 11.736750; double dest_lon_max = 11.835322; // Determine extend of the tile. double lat_min = h->getOrigin()[1]; double lat_max = lat_min + h->getNumRows() * h->getYInterval(); double lon_min = h->getOrigin()[0]; double lon_max = lon_min + h->getNumColumns() * h->getXInterval(); // Check if tile is fully or partially inside ROI: if(lat_max>dest_lat_min && lat_mindest_lon_min && lon_minmodifyHeightfield(h, lat_min, lat_max, lon_min, lon_max); } }