#include "ModificationVisitor.h" using namespace osgTerrain; ModificationVisitor::ModificationVisitor(std::string extensionToSet) : _extensionToSet(extensionToSet) { setTraversalMode( osg::NodeVisitor::TRAVERSE_ALL_CHILDREN ); _technique = new rampedEllipsoidTechnique(); // Set ROI to flatten and estimated height after correction _technique->setModifiedHeight(600); // 450 } 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(); // Determine extend of the tile. region tileExtends( *h ); // ROI to flatten //region modificationROI = region( 48.336808, 48.370467, 11.736750, 11.835322 ); // roi_lat_min, roi_lat_max, roi_lon_min, roi_lon_max region modificationROI = region( 48.331808, 48.375467, 11.731750, 11.840322 ); // roi_lat_min, roi_lat_max, roi_lon_min, roi_lon_max // Check if tile is fully or partially inside ROI: if( tileExtends.isFullOrPartiallyInside(modificationROI) ) _technique->modifyHeightfield( modificationROI, h, tileExtends ); }