From f3ba656303b43c855fb52a5ee4338dfbe243560f Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 16 Sep 2014 11:00:01 +0000 Subject: [PATCH] Added write support git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14449 16af8721-9629-0410-8352-f15c8da7e697 --- src/osgPlugins/tf/ReaderWriterTF.cpp | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/osgPlugins/tf/ReaderWriterTF.cpp b/src/osgPlugins/tf/ReaderWriterTF.cpp index 46d53c62c..17df7cfea 100644 --- a/src/osgPlugins/tf/ReaderWriterTF.cpp +++ b/src/osgPlugins/tf/ReaderWriterTF.cpp @@ -130,6 +130,53 @@ class ReaderWriterTF : public osgDB::ReaderWriter else return ReadResult::ERROR_IN_READING_FILE; } + virtual WriteResult writeTransferFunction(const osg::TransferFunction1D* tf, std::ostream& fout, float colorScale) const + { + if (colorScale == 0.0) colorScale = 1.0f; + + const osg::TransferFunction1D::ColorMap& cm = tf->getColorMap(); + for(osg::TransferFunction1D::ColorMap::const_iterator itr = cm.begin(); + itr != cm.end(); + ++itr) + { + const osg::Vec4& c = itr->second; + fout << itr->first <<" "<< c.r()*colorScale <<" "<< c.g()*colorScale << " "<< c.b()*colorScale<<" "<(&object); + if (!tf) return WriteResult::FILE_NOT_HANDLED; + + float colorScale = 0.0f; // default auto-detect scale + readColorScale(options, colorScale); + + return writeTransferFunction(tf, fout, colorScale); + } + + virtual WriteResult writeObject(const osg::Object& object, const std::string& fileName, const osgDB::ReaderWriter::Options* options) const + { + OSG_NOTICE<<"ReaderWriterTF::writeObject"<(&object); + if (!tf) return WriteResult::FILE_NOT_HANDLED; + + std::string ext = osgDB::getFileExtension(fileName); + if (!acceptsExtension(ext)) return WriteResult::FILE_NOT_HANDLED; + + float colorScale = 0.0f; // default auto-detect scale + if (ext=="tf-255") colorScale = 1.0f/255.0f; + readColorScale(options, colorScale); + + osgDB::ofstream fout(fileName.c_str(), std::ios::out | std::ios::binary); + if(!fout) return WriteResult::ERROR_IN_WRITING_FILE; + + return writeTransferFunction(tf, fout, colorScale); + } }; // now register with Registry to instantiate the above