From Ulrich Hertlien, added ReaderWriter::Options to the osgconv and pfb plugin

so that all the pfi files can be converted to rgb be the plugin.
This commit is contained in:
Robert Osfield
2002-11-04 09:08:50 +00:00
parent 22c6fa1565
commit a6eafa79e2
5 changed files with 63 additions and 18 deletions

View File

@@ -77,7 +77,6 @@ ConvertFromPerformer::ConvertFromPerformer()
_saveImagesAsRGB = false;
_saveAbsoluteImagePath = false;
}
@@ -287,6 +286,7 @@ osg::Node* ConvertFromPerformer::visitSequence(osg::Group* osgParent,
// add children
for(int i=0;i<sequence->getNumChildren();++i)
{
//cerr << "child " << i << " time " << sequence->getTime(i) << endl;
osgSequence->setTime(i, sequence->getTime(i));
visitNode(osgSequence,sequence->getChild(i));
}
@@ -295,6 +295,7 @@ osg::Node* ConvertFromPerformer::visitSequence(osg::Group* osgParent,
int mode, begin, end;
sequence->getInterval(&mode, &begin, &end);
//cerr << "loop " << mode << endl;
osg::Sequence::LoopMode loopMode = osg::Sequence::LOOP;
if (mode == PFSEQ_SWING)
loopMode = osg::Sequence::SWING;
@@ -1164,7 +1165,6 @@ osg::Texture2D* ConvertFromPerformer::visitTexture(osg::StateSet* osgStateSet,pf
osgTexture = new osg::Texture2D;
registerPfObjectForOsgObject(tex, osgTexture);
//_pfToOsgMap[tex] = osgTexture;
if (osgStateSet) osgStateSet->setTextureAttribute(0,osgTexture);
@@ -1200,11 +1200,27 @@ osg::Texture2D* ConvertFromPerformer::visitTexture(osg::StateSet* osgStateSet,pf
// image
std::string texName = tex->getName();
if (_saveImagesAsRGB)
{
if (_saveImagesAsRGB) {
std::string strippedName = osgDB::getStrippedName(texName);
texName = _saveImageDirectory+strippedName+".rgb";
tex->saveFile(texName.c_str());
pfList* imgList = tex->getList();
if (imgList) {
// save image list
char buf[8];
for (int i = 0; i < imgList->getNum(); i++) {
pfTexture* t = (pfTexture*) imgList->get(i);
if (t) {
snprintf(buf, sizeof(buf)-1, "_%04d", i);
texName = _saveImageDirectory+strippedName+buf+".rgb";
t->saveFile(texName.c_str());
}
}
}
else {
// save single image
texName = _saveImageDirectory+strippedName+".rgb";
tex->saveFile(texName.c_str());
}
}
if (!_saveAbsoluteImagePath) texName = osgDB::getSimpleFileName(texName);

View File

@@ -97,8 +97,7 @@ class ReaderWriterPFB : public osgDB::ReaderWriter
virtual ReadResult readImage(const std::string& fileName, const osgDB::ReaderWriter::Options*)
{
osg::notify(osg::INFO)<< "ReaderWriterPFB::readImage( "<<fileName.c_str()<<" )\n";
osg::notify(osg::INFO)<<"ReaderWriterPFB::readImage( "<<fileName.c_str()<<" )\n";
initPerformer();
pfTexture* tex = new pfTexture;
@@ -148,20 +147,27 @@ class ReaderWriterPFB : public osgDB::ReaderWriter
return ReadResult::FILE_NOT_HANDLED;
}
virtual ReadResult readNode(const std::string& fileName, const osgDB::ReaderWriter::Options*)
virtual ReadResult readNode(const std::string& fileName, const osgDB::ReaderWriter::Options* options)
{
std::string ext = osgDB::getLowerCaseFileExtension(fileName);
if (!acceptsExtension(ext)) return ReadResult::FILE_NOT_HANDLED;
osg::notify(osg::INFO)<< "ReaderWriterPFB::readNode( "<<fileName.c_str()<<" )\n";
osg::notify(osg::INFO)<<"ReaderWriterPFB::readNode( "<<fileName.c_str()<<" )\n";
initPerformer();
pfNode* root = pfdLoadFile(fileName.c_str());
if (root)
{
root->ref();
ConvertFromPerformer converter;
if (options) {
const string option = options->getOptionString();
if (option.find("saveImagesAsRGB") != string::npos)
converter.setSaveImagesAsRGB(true);
if (option.find("saveAbsoluteImagePath") != string::npos)
converter.setSaveAbsoluteImagePath(true);
}
root->ref();
osg::Node* node = converter.convert(root);
root->unrefDelete();
return node;
@@ -178,9 +184,9 @@ class ReaderWriterPFB : public osgDB::ReaderWriter
std::string ext = osgDB::getLowerCaseFileExtension(fileName);
if (!acceptsExtension(ext)) return WriteResult::FILE_NOT_HANDLED;
osg::notify(osg::INFO)<< "ReaderWriterPFB::writeNode( "<<fileName.c_str()<<" )\n";
osg::notify(osg::INFO)<<"ReaderWriterPFB::writeNode( "<<fileName.c_str()<<" )\n";
initPerformer();
ConvertToPerformer converter;
pfNode* root = converter.convert(&node);
if (root)