#include "ReaderWriterTerrainMod.h" ReaderWriterTerrainMod::ReaderWriterTerrainMod() { supportsExtension( "terrainmod", "Terrain modification pseudo loader"); extensionToAdd = ".terrainmod"; } ReaderWriterTerrainMod::ReadResult ReaderWriterTerrainMod::readNode( const std::string& file, const osgDB::ReaderWriter::Options* options) const { // Check if its a valid file for this pseudo loader std::string ext = osgDB::getLowerCaseFileExtension( file ); if( !acceptsExtension(ext) ) return ReadResult::FILE_NOT_HANDLED; // Strip the pseudo-loader extension std::string realName = osgDB::getNameLessExtension( file ); // check if stripped file exists std::string fileName = osgDB::findDataFile( realName, options ); if( fileName.empty() ) return ReadResult::FILE_NOT_FOUND; // Load real file osg::Node *node = osgDB::readNodeFile( fileName, options ); if( !node ) { // propagate the read failure upwards OSG_WARN << "Subfile \"" << fileName << "\" could not be loaded" << std::endl; return ReadResult::FILE_NOT_HANDLED; } // Traverse through loaded graph, check for PagedLOD and modify all filenames of external references // This ensures ensures that higher LODs are loaded via terrainmod pseudo loader as well. ModificationVisitor modVisitor(extensionToAdd); node->accept( modVisitor ); return node; } // Add ourself to the Registry to instantiate the reader/writer. REGISTER_OSGPLUGIN(terrainmod, ReaderWriterTerrainMod)