Added write support

git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14449 16af8721-9629-0410-8352-f15c8da7e697
This commit is contained in:
Robert Osfield
2014-09-16 11:00:01 +00:00
parent e35b0796d6
commit f3ba656303

View File

@@ -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<<" "<<c.a()*colorScale<<std::endl;
}
return WriteResult::FILE_SAVED;
}
virtual WriteResult writeObject(const osg::Object& object, std::ostream& fout, const osgDB::ReaderWriter::Options* options) const
{
const osg::TransferFunction1D* tf = dynamic_cast<const osg::TransferFunction1D*>(&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"<<fileName<<std::endl;
const osg::TransferFunction1D* tf = dynamic_cast<const osg::TransferFunction1D*>(&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