From 8aceb4eec60a63febaceb16ea3d5a748c7bd9674 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 22 Aug 2006 13:07:20 +0000 Subject: [PATCH] From Vaclav Bilek, "The purpose of this change is to suppress "re-reading" of osg::ProxyNodes ( in OF external references) after the OF file is loaded. The change do conditional execution of already existing code. I use this for optimized preprocessing of large databases what can not be loaded in one pass because of memory limits." --- src/osgPlugins/OpenFlight/Document.h | 5 ++++ src/osgPlugins/OpenFlight/ReaderWriterFLT.cpp | 30 ++++++++++++++----- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/osgPlugins/OpenFlight/Document.h b/src/osgPlugins/OpenFlight/Document.h index 820f55235..39fc67022 100644 --- a/src/osgPlugins/OpenFlight/Document.h +++ b/src/osgPlugins/OpenFlight/Document.h @@ -152,6 +152,9 @@ class Document bool getDoUnitsConversion() const { return _doUnitsConversion; } void setDesiredUnits(CoordUnits units ) { _desiredUnits=units; } CoordUnits getDesiredUnits() const { return _desiredUnits; } + + bool getKeepExternalReferences() const { return _keepExternalReferences; } + void setKeepExternalReferences( bool flag) { _keepExternalReferences=flag; } protected: @@ -162,6 +165,8 @@ class Document bool _useTextureAlphaForTransparancyBinning; bool _doUnitsConversion; CoordUnits _desiredUnits; + + bool _keepExternalReferences; friend class Header; bool _done; diff --git a/src/osgPlugins/OpenFlight/ReaderWriterFLT.cpp b/src/osgPlugins/OpenFlight/ReaderWriterFLT.cpp index 0fdc9100e..db700d19e 100644 --- a/src/osgPlugins/OpenFlight/ReaderWriterFLT.cpp +++ b/src/osgPlugins/OpenFlight/ReaderWriterFLT.cpp @@ -113,14 +113,27 @@ class FLTReaderWriter : public ReaderWriter { // add to local cache. flt::Registry::instance()->addToLocalCache(fileName,rr.getNode()); + + bool keepExternalReferences = false; + if (options) + keepExternalReferences = (options->getOptionString().find("keepExternalReferences")!=std::string::npos); - // read externals. - if (rr.getNode()) + + if ( !keepExternalReferences ) { - nestedExternalsLevel++; - ReadExternalsVisitor visitor(local_opt.get()); - rr.getNode()->accept(visitor); - nestedExternalsLevel--; + osg::notify(osg::DEBUG_INFO) << "keepExternalReferences not found, so externals will be re-readed"<accept(visitor); + nestedExternalsLevel--; + } + } + else + { + osg::notify(osg::DEBUG_INFO) << "keepExternalReferences found, so externals will be left as ProxyNodes"<getOptionString().find("keepExternalReferences")!=std::string::npos)); + osg::notify(osg::DEBUG_INFO) << readerMsg << "keepExternalReferences=" << document.getKeepExternalReferences() << std::endl; document.setPreserveFace((options->getOptionString().find("preserveFace")!=std::string::npos)); osg::notify(osg::DEBUG_INFO) << readerMsg << "preserveFace=" << document.getPreserveFace() << std::endl; @@ -201,7 +217,7 @@ class FLTReaderWriter : public ReaderWriter if (!document.getHeaderNode()) return ReadResult::ERROR_IN_READING_FILE; - + if (!document.getPreserveFace()) { osgUtil::Optimizer optimizer;