Added support for reading from streams

This commit is contained in:
Robert Osfield 2009-04-30 08:50:43 +00:00
parent d2f3615833
commit bc29eab0b7
2 changed files with 48 additions and 13 deletions

View File

@ -111,6 +111,10 @@ public:
virtual ReadResult readNode(const std::string& fileName, virtual ReadResult readNode(const std::string& fileName,
const osgDB::ReaderWriter::Options* options) const; const osgDB::ReaderWriter::Options* options) const;
virtual ReadResult readNode(std::istream& fin, const Options* options) const;
ReadResult readNode(osgDB::XmlNode::Input& input, const osgDB::ReaderWriter::Options* options) const;
void parseModel(osgPresentation::SlideShowConstructor& constructor, osgDB::XmlNode*cur) const; void parseModel(osgPresentation::SlideShowConstructor& constructor, osgDB::XmlNode*cur) const;
void parseVolume(osgPresentation::SlideShowConstructor& constructor, osgDB::XmlNode*cur) const; void parseVolume(osgPresentation::SlideShowConstructor& constructor, osgDB::XmlNode*cur) const;
@ -1384,24 +1388,38 @@ void ReaderWriterP3DXML::parseSlide (osgPresentation::SlideShowConstructor& cons
osgDB::ReaderWriter::ReadResult ReaderWriterP3DXML::readNode(const std::string& file, osgDB::ReaderWriter::ReadResult ReaderWriterP3DXML::readNode(const std::string& file,
const osgDB::ReaderWriter::Options* options) const const osgDB::ReaderWriter::Options* options) const
{ {
bool readOnlyHoldingPage = options ? options->getOptionString()=="holding_slide" : false;
std::string ext = osgDB::getLowerCaseFileExtension(file); std::string ext = osgDB::getLowerCaseFileExtension(file);
if (!acceptsExtension(ext)) return ReadResult::FILE_NOT_HANDLED; if (!acceptsExtension(ext)) return ReadResult::FILE_NOT_HANDLED;
std::string fileName = osgDB::findDataFile( file ); std::string fileName = osgDB::findDataFile( file );
if (fileName.empty()) return ReadResult::FILE_NOT_FOUND; if (fileName.empty()) return ReadResult::FILE_NOT_FOUND;
osgDB::XmlNode::Input input;
input.open(fileName);
input.readAllDataIntoBuffer();
return readNode(input, options);
}
osgDB::ReaderWriter::ReadResult ReaderWriterP3DXML::readNode(std::istream& fin, const Options* options) const
{
osgDB::XmlNode::Input input;
input.attach(fin);
input.readAllDataIntoBuffer();
return readNode(input, options);
}
osgDB::ReaderWriter::ReadResult ReaderWriterP3DXML::readNode(osgDB::XmlNode::Input& input, const osgDB::ReaderWriter::Options* options) const
{
bool readOnlyHoldingPage = options ? options->getOptionString()=="holding_slide" : false;
// create a keyPosition just in case we need it. // create a keyPosition just in case we need it.
osgPresentation::KeyPosition keyPosition; osgPresentation::KeyPosition keyPosition;
osg::ref_ptr<osgDB::XmlNode> doc = new osgDB::XmlNode; osg::ref_ptr<osgDB::XmlNode> doc = new osgDB::XmlNode;
osgDB::XmlNode* root = 0; osgDB::XmlNode* root = 0;
osgDB::XmlNode::Input input;
input.open(fileName);
input.readAllDataIntoBuffer();
doc->read(input); doc->read(input);
@ -1568,4 +1586,3 @@ osgDB::ReaderWriter::ReadResult ReaderWriterP3DXML::readNode(const std::string&
std::cout<<"node="<<node<<std::endl; std::cout<<"node="<<node<<std::endl;
return node;*/ return node;*/
} }

View File

@ -111,6 +111,10 @@ public:
virtual ReadResult readNode(const std::string& fileName, virtual ReadResult readNode(const std::string& fileName,
const osgDB::ReaderWriter::Options* options) const; const osgDB::ReaderWriter::Options* options) const;
virtual ReadResult readNode(std::istream& fin, const Options* options) const;
ReadResult readNode(osgDB::XmlNode::Input& input, const osgDB::ReaderWriter::Options* options) const;
void parseModel(osgPresentation::SlideShowConstructor& constructor, osgDB::XmlNode*cur) const; void parseModel(osgPresentation::SlideShowConstructor& constructor, osgDB::XmlNode*cur) const;
void parseVolume(osgPresentation::SlideShowConstructor& constructor, osgDB::XmlNode*cur) const; void parseVolume(osgPresentation::SlideShowConstructor& constructor, osgDB::XmlNode*cur) const;
@ -1384,24 +1388,38 @@ void ReaderWriterP3DXML::parseSlide (osgPresentation::SlideShowConstructor& cons
osgDB::ReaderWriter::ReadResult ReaderWriterP3DXML::readNode(const std::string& file, osgDB::ReaderWriter::ReadResult ReaderWriterP3DXML::readNode(const std::string& file,
const osgDB::ReaderWriter::Options* options) const const osgDB::ReaderWriter::Options* options) const
{ {
bool readOnlyHoldingPage = options ? options->getOptionString()=="holding_slide" : false;
std::string ext = osgDB::getLowerCaseFileExtension(file); std::string ext = osgDB::getLowerCaseFileExtension(file);
if (!acceptsExtension(ext)) return ReadResult::FILE_NOT_HANDLED; if (!acceptsExtension(ext)) return ReadResult::FILE_NOT_HANDLED;
std::string fileName = osgDB::findDataFile( file ); std::string fileName = osgDB::findDataFile( file );
if (fileName.empty()) return ReadResult::FILE_NOT_FOUND; if (fileName.empty()) return ReadResult::FILE_NOT_FOUND;
osgDB::XmlNode::Input input;
input.open(fileName);
input.readAllDataIntoBuffer();
return readNode(input, options);
}
osgDB::ReaderWriter::ReadResult ReaderWriterP3DXML::readNode(std::istream& fin, const Options* options) const
{
osgDB::XmlNode::Input input;
input.attach(fin);
input.readAllDataIntoBuffer();
return readNode(input, options);
}
osgDB::ReaderWriter::ReadResult ReaderWriterP3DXML::readNode(osgDB::XmlNode::Input& input, const osgDB::ReaderWriter::Options* options) const
{
bool readOnlyHoldingPage = options ? options->getOptionString()=="holding_slide" : false;
// create a keyPosition just in case we need it. // create a keyPosition just in case we need it.
osgPresentation::KeyPosition keyPosition; osgPresentation::KeyPosition keyPosition;
osg::ref_ptr<osgDB::XmlNode> doc = new osgDB::XmlNode; osg::ref_ptr<osgDB::XmlNode> doc = new osgDB::XmlNode;
osgDB::XmlNode* root = 0; osgDB::XmlNode* root = 0;
osgDB::XmlNode::Input input;
input.open(fileName);
input.readAllDataIntoBuffer();
doc->read(input); doc->read(input);