Changeset 366 for experimental/distortionNG/ReaderWriterDist.cpp
- Timestamp:
- May 13, 2012, 6:21:34 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
experimental/distortionNG/ReaderWriterDist.cpp
r365 r366 5 5 { 6 6 supportsExtension( "dist", "distortion set loader"); 7 extensionToAdd = ".dist"; 7 8 9 // Configure Compression and instantiate read/write-options 10 bool asAscii = true; 11 bool compressionEnabled = false; 8 12 9 extensionToAdd = ".dist"; 13 std::string readOptionString = ""; 14 std::string writeOptionString = ""; 15 if(asAscii) 16 { 17 readOptionString = "Ascii"; 18 writeOptionString = "Ascii"; 19 } 20 if (compressionEnabled) 21 writeOptionString+=" Compressor=zlib"; 22 readOptions = new osgDB::Options( readOptionString.c_str() ); 23 writeOptions = new osgDB::Options( writeOptionString.c_str() ); 24 25 // Get ReaderWriter 26 rw = osgDB::Registry::instance()->getReaderWriterForExtension("osgt"); 27 10 28 } 11 29 12 30 ReaderWriterDist::ReadResult ReaderWriterDist::readNode( const std::string& file, const osgDB::ReaderWriter::Options* options) const 13 31 { 14 // Check if its a valid file for this pseudo loader15 32 std::string ext = osgDB::getLowerCaseFileExtension( file ); 16 33 if( !acceptsExtension(ext) ) 17 34 return ReadResult::FILE_NOT_HANDLED; 18 35 19 // Strip the pseudo-loader extension 20 std::string realName = osgDB::getNameLessExtension( file ); 21 22 // check if stripped file exists 23 std::string fileName = osgDB::findDataFile( realName, options ); 36 // check if file exists 37 std::string fileName = osgDB::findDataFile( file, options ); 24 38 if( fileName.empty() ) 25 39 return ReadResult::FILE_NOT_FOUND; 26 40 27 // If options are available: Save it'S original KdTree Hint. 28 Options::BuildKdTreesHint originalHint = Options::NO_PREFERENCE; 29 if(options) 41 std::ifstream stream( fileName.c_str(), std::ios::in ); 42 if (!stream) return ReadResult::ERROR_IN_READING_FILE; 43 return readNode( stream, options ); 44 } 45 46 ReaderWriterDist::ReadResult ReaderWriterDist:: readNode( std::istream& fin, const osgDB::ReaderWriter::Options* options ) const 47 { 48 if ( rw ) 30 49 { 31 originalHint = options->getBuildKdTreesHint(); 32 const_cast<osgDB::ReaderWriter::Options*>(options)->setBuildKdTreesHint(Options::DO_NOT_BUILD_KDTREES); 50 osgDB::ReaderWriter::ReadResult rr = rw->readObject( fin, readOptions ); 51 if (rr.success()) 52 { 53 return( rr.takeObject() ); 54 } 55 else 56 OSG_NOTIFY( osg::WARN ) << "ERROR: Unable to convert stream to node" << std::endl; 33 57 } 58 else 59 OSG_NOTIFY( osg::WARN ) << "ERROR: Unable to get ReaderWriter for internally used extension" << std::endl; 60 } 34 61 35 // Load real file 36 osg::Node *node = osgDB::readNodeFile( fileName, options ); 37 if( !node ) 38 { 39 // propagate the read failure upwards 40 OSG_WARN << "Subfile \"" << fileName << "\" could not be loaded" << std::endl; 41 return ReadResult::FILE_NOT_HANDLED; 42 } 62 ReaderWriterDist::WriteResult writeNode( const osg::Node& node, const std::string& fileName, const Options* options ) const 63 { 64 std::string ext = osgDB::getLowerCaseFileExtension( file ); 65 if( !acceptsExtension(ext) ) 66 return WriteResult::FILE_NOT_HANDLED; 43 67 44 return node; 68 std::ifstream stream( fileName.c_str(), std::ios::in ); 69 if (!stream) return ReadResult::ERROR_IN_READING_FILE; 70 return readNode( stream, options ); 71 // ------------------ 72 WriteResult result = WriteResult::FILE_SAVED; 73 std::ios::openmode mode = std::ios::out; 74 osg::ref_ptr<Options> local_opt = prepareWriting( result, fileName, mode, options ); 75 if ( !result.success() ) return result; 76 77 osgDB::ofstream fout( fileName.c_str(), mode ); 78 if ( !fout ) return WriteResult::ERROR_IN_WRITING_FILE; 79 80 result = writeNode( node, fout, local_opt.get() ); 81 fout.close(); 82 return result; 83 } 84 85 ReaderWriterDist::WriteResult writeNode( const osg::Node& node, std::ostream& fout, const Options* options ) const 86 { 87 if ( rw ) 88 { 89 osgDB::ReaderWriter::WriteResult wr = rw->writeObject( node, fout, writeOptions ); 90 if (wr.success() ) 91 { 92 OSG_NOTIFY( osg::WARN ) << "schreiben geschafft!"<< std::endl; 93 } 94 else OSG_NOTIFY( osg::WARN ) << "ERROR: Save failed: " << wr.message() << std::endl; 95 return(wr); 96 } 97 OSG_NOTIFY( osg::WARN ) << "ERROR: Unable to get ReaderWriter for internally used extension" << std::endl; 45 98 } 46 99
Note: See TracChangeset
for help on using the changeset viewer.