static void serializer_finalize (Serializer* obj) { Serializer * self; self = SERIALIZER (obj); _g_object_unref0 (self->priv->menubar); _g_string_free0 (self->priv->sb); _g_string_free0 (self->priv->label_sb); }
osgDB::ReaderWriter::ReadResult ReaderWriterDAE::readNode(const std::string& fname, const osgDB::ReaderWriter::Options* options) const { SERIALIZER(); bool bOwnDAE = false; DAE* pDAE = NULL; if ( options ) pDAE = (DAE*) options->getPluginData("DAE"); std::string ext( osgDB::getLowerCaseFileExtension(fname) ); if( ! acceptsExtension(ext) ) return ReadResult::FILE_NOT_HANDLED; std::string fileName( osgDB::findDataFile( fname, options ) ); if( fileName.empty() ) return ReadResult::FILE_NOT_FOUND; osg::notify(osg::INFO) << "ReaderWriterDAE( \"" << fileName << "\" )" << std::endl; if (NULL == pDAE) { bOwnDAE = true; pDAE = new DAE; } osgdae::daeReader daeReader(pDAE) ; // Convert file name to URI std::string fileURI = ConvertFilePathToColladaCompatibleURI(fileName); if ( ! daeReader.convert( fileURI ) ) { osg::notify( osg::WARN ) << "Load failed in COLLADA DOM conversion" << std::endl; return ReadResult::ERROR_IN_READING_FILE; } if ( options ) { // Return the document URI if (options->getPluginData("DAE-DocumentURI")) *(std::string*)options->getPluginData("DAE-DocumentURI") = fileURI; // Return some additional information about the document if (options->getPluginData("DAE-AssetUnitName")) *(std::string*)options->getPluginData("DAE-AssetUnitName") = daeReader.m_AssetUnitName; if (options->getPluginData("DAE-AssetUnitMeter")) *(float*)options->getPluginData("DAE-AssetUnitMeter") = daeReader.m_AssetUnitMeter; if (options->getPluginData("DAE-AssetUp_axis")) *(domUpAxisType*)options->getPluginData("DAE-AssetUp_axis") = daeReader.m_AssetUp_axis; } if (bOwnDAE) delete pDAE; osg::Node* rootNode( daeReader.getRootNode() ); return rootNode; }
osgDB::ReaderWriter::WriteResult ReaderWriterDAE::writeNode( const osg::Node& node, const std::string& fname, const osgDB::ReaderWriter::Options* options ) const { SERIALIZER(); bool bOwnDAE = false; DAE* pDAE = NULL; std::string ext( osgDB::getLowerCaseFileExtension(fname) ); if( ! acceptsExtension(ext) ) return WriteResult::FILE_NOT_HANDLED; // Process options osgDAE::daeWriter::Options pluginOptions; std::string srcDirectory( osgDB::getFilePath(node.getName().empty() ? fname : node.getName()) ); // Base dir when relativising images paths if( options ) { pDAE = (DAE*)options->getPluginData("DAE"); const std::string & baseDir = options->getPluginStringData("baseImageDir"); // Rename "srcModelPath" (and call getFilePath() on it)? if (!baseDir.empty()) srcDirectory = baseDir; const std::string & relativiseImagesPathNbUpDirs = options->getPluginStringData("DAE-relativiseImagesPathNbUpDirs"); if (!relativiseImagesPathNbUpDirs.empty()) { std::istringstream iss(relativiseImagesPathNbUpDirs); iss >> pluginOptions.relativiseImagesPathNbUpDirs; } // Sukender's note: I don't know why DAE seems to accept comma-sparated options instead of space-separated options as other ReaderWriters. However, to avoid breaking compatibility, here's a workaround: std::string optString( options->getOptionString() ); for(std::string::iterator it=optString.begin(); it!=optString.end(); ++it) { if (*it == ' ') *it = ','; } std::istringstream iss( optString ); std::string opt; //while (iss >> opt) while( std::getline( iss, opt, ',' ) ) { if( opt == "polygon") pluginOptions.usePolygons = true; else if (opt == "GoogleMode") pluginOptions.googleMode = true; else if (opt == "NoExtras") pluginOptions.writeExtras = false; else if (opt == "daeEarthTex") pluginOptions.earthTex = true; else if (opt == "daeZUpAxis") {} // Nothing (old option) else if (opt == "daeLinkOriginalTexturesNoForce") { pluginOptions.linkOrignialTextures = true; pluginOptions.forceTexture = false; } else if (opt == "daeLinkOriginalTexturesForce") { pluginOptions.linkOrignialTextures = true; pluginOptions.forceTexture = true; } else if (opt == "daeNamesUseCodepage") pluginOptions.namesUseCodepage = true; else if (!opt.empty()) { OSG_NOTICE << std::endl << "COLLADA dae plugin: unrecognized option \"" << opt << std::endl; } } }
osgDB::ReaderWriter::WriteResult ReaderWriterDAE::writeNode( const osg::Node& node, const std::string& fname, const osgDB::ReaderWriter::Options* options ) const { SERIALIZER(); bool bOwnDAE = false; DAE* pDAE = NULL; std::string ext( osgDB::getLowerCaseFileExtension(fname) ); if( ! acceptsExtension(ext) ) return WriteResult::FILE_NOT_HANDLED; // Process options bool usePolygon(false); bool GoogleMode(false); if( options ) { pDAE = (DAE*) options->getPluginData("DAE"); std::istringstream iss( options->getOptionString() ); std::string opt; while( std::getline( iss, opt, ',' ) ) { if( opt == "polygon") usePolygon = true; else if (opt == "GoogleMode") GoogleMode = true; else { osg::notify(osg::WARN) << "\n" "COLLADA dae plugin: unrecognized option \"" << opt << "\"\n" << "comma-delimited options:\n" << "\tpolygon = use polygons instead of polylists for element\n" << "\tGoogleMode = write files suitable for use by Google products\n" << "example: osgviewer -O polygon bar.dae" "\n" << std::endl; } } } if (NULL == pDAE) { bOwnDAE = true; pDAE = new DAE; } // Convert file name to URI std::string fileURI = ConvertFilePathToColladaCompatibleURI(fname); osgdae::daeWriter daeWriter(pDAE, fileURI, usePolygon, GoogleMode ); daeWriter.setRootNode( node ); const_cast<osg::Node*>(&node)->accept( daeWriter ); osgDB::ReaderWriter::WriteResult retVal( WriteResult::ERROR_IN_WRITING_FILE ); if ( daeWriter.isSuccess() ) { if ( daeWriter.writeFile() ) retVal = WriteResult::FILE_SAVED; } if ( options ) { if (!bOwnDAE) { // Return the document URI used so that users of an external DAE object // can locate the correct database if (options->getPluginData("DAE-DocumentURI")) *(std::string*)options->getPluginData("DAE-DocumentURI") = fileURI; } } if (bOwnDAE) delete pDAE; return retVal; }
osgDB::ReaderWriter::ReadResult ReaderWriterDAE::readNode(const std::string& fname, const osgDB::ReaderWriter::Options* options) const { SERIALIZER(); bool bOwnDAE = false; DAE* pDAE = NULL; // Process options osgDAE::daeReader::Options pluginOptions; if( options ) { pDAE = (DAE*)options->getPluginData("DAE"); pluginOptions.precisionHint = options->getPrecisionHint(); std::istringstream iss( options->getOptionString() ); std::string opt; while (iss >> opt) { if( opt == "StrictTransparency") pluginOptions.strictTransparency = true; else if (opt == "daeTessellateNone") pluginOptions.tessellateMode = osgDAE::daeReader::TESSELLATE_NONE; else if (opt == "daeTessellatePolygonsAsTriFans") pluginOptions.tessellateMode = osgDAE::daeReader::TESSELLATE_POLYGONS_AS_TRIFAN; else if (opt == "daeTessellatePolygons") pluginOptions.tessellateMode = osgDAE::daeReader::TESSELLATE_POLYGONS; else if (opt == "daeUsePredefinedTextureUnits") pluginOptions.usePredefinedTextureUnits = true; else if (opt == "daeUseSequencedTextureUnits") pluginOptions.usePredefinedTextureUnits = false; } } std::string ext( osgDB::getLowerCaseFileExtension(fname) ); if( ! acceptsExtension(ext) ) return ReadResult::FILE_NOT_HANDLED; std::string fileName( osgDB::findDataFile( fname, options ) ); if( fileName.empty() ) return ReadResult::FILE_NOT_FOUND; OSG_INFO << "ReaderWriterDAE( \"" << fileName << "\" )" << std::endl; if (NULL == pDAE) { bOwnDAE = true; pDAE = new DAE; } std::auto_ptr<DAE> scopedDae(bOwnDAE ? pDAE : NULL); // Deallocates locally created structure at scope exit osgDAE::daeReader daeReader(pDAE, &pluginOptions); // Convert file name to URI std::string fileURI = ConvertFilePathToColladaCompatibleURI(fileName); if ( ! daeReader.convert( fileURI ) ) { OSG_WARN << "Load failed in COLLADA DOM conversion" << std::endl; return ReadResult::ERROR_IN_READING_FILE; } if ( options ) { // Return the document URI if (options->getPluginData("DAE-DocumentURI")) *(std::string*)options->getPluginData("DAE-DocumentURI") = fileURI; // Return some additional information about the document if (options->getPluginData("DAE-AssetUnitName")) *(std::string*)options->getPluginData("DAE-AssetUnitName") = daeReader.getAssetUnitName(); if (options->getPluginData("DAE-AssetUnitMeter")) *(float*)options->getPluginData("DAE-AssetUnitMeter") = daeReader.getAssetUnitMeter(); if (options->getPluginData("DAE-AssetUp_axis")) *(domUpAxisType*)options->getPluginData("DAE-AssetUp_axis") = daeReader.getAssetUpAxis(); } osg::Node* rootNode( daeReader.getRootNode() ); return rootNode; }
osgDB::ReaderWriter::ReadResult ReaderWriterDAE::readNode(std::istream& fin, const osgDB::ReaderWriter::Options* options) const { SERIALIZER(); bool bOwnDAE = false; DAE* pDAE = NULL; // Process options osgDAE::daeReader::Options pluginOptions; if( options ) { pDAE = (DAE*)options->getPluginData("DAE"); pluginOptions.precisionHint = options->getPrecisionHint(); std::istringstream iss( options->getOptionString() ); std::string opt; while (iss >> opt) { if( opt == "StrictTransparency") pluginOptions.strictTransparency = true; else if (opt == "daeTessellateNone") pluginOptions.tessellateMode = osgDAE::daeReader::TESSELLATE_NONE; else if (opt == "daeTessellatePolygonsAsTriFans") pluginOptions.tessellateMode = osgDAE::daeReader::TESSELLATE_POLYGONS_AS_TRIFAN; else if (opt == "daeTessellatePolygons") pluginOptions.tessellateMode = osgDAE::daeReader::TESSELLATE_POLYGONS; else if (opt == "daeUsePredefinedTextureUnits") pluginOptions.usePredefinedTextureUnits = true; else if (opt == "daeUseSequencedTextureUnits") pluginOptions.usePredefinedTextureUnits = false; } } if (NULL == pDAE) { bOwnDAE = true; pDAE = new DAE; } std::auto_ptr<DAE> scopedDae(bOwnDAE ? pDAE : NULL); // Deallocates locally created structure at scope exit osgDAE::daeReader daeReader(pDAE, &pluginOptions); if ( ! daeReader.convert( fin ) ) { OSG_WARN << "Load failed in COLLADA DOM conversion" << std::endl; return ReadResult::ERROR_IN_READING_FILE; } if ( options ) { // Return the document URI if (options->getPluginData("DAE-DocumentURI")) *(std::string*)options->getPluginData("DAE-DocumentURI") = std::string("/dev/null"); // Return some additional information about the document if (options->getPluginData("DAE-AssetUnitName")) *(std::string*)options->getPluginData("DAE-AssetUnitName") = daeReader.getAssetUnitName(); if (options->getPluginData("DAE-AssetUnitMeter")) *(float*)options->getPluginData("DAE-AssetUnitMeter") = daeReader.getAssetUnitMeter(); if (options->getPluginData("DAE-AssetUp_axis")) *(domUpAxisType*)options->getPluginData("DAE-AssetUp_axis") = daeReader.getAssetUpAxis(); } osg::Node* rootNode( daeReader.getRootNode() ); return rootNode; }