Added write support
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14449 16af8721-9629-0410-8352-f15c8da7e697
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user