From 2f895b839e960d49a7d4fb01e0d0ad00ef6165b2 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 29 Aug 2007 12:18:41 +0000 Subject: [PATCH] Added ProxyLayer support into osgTerrain plugin --- include/osgTerrain/Layer | 2 +- src/osgPlugins/gdal/ReaderWriterGDAL.cpp | 4 +-- src/osgPlugins/osgTerrain/Terrain.cpp | 17 +++++++++++ src/osgTerrain/Layer.cpp | 20 ++++++++++++- src/osgWrappers/osgTerrain/Layer.cpp | 37 ++++++++++++++++++++++++ 5 files changed, 75 insertions(+), 5 deletions(-) diff --git a/include/osgTerrain/Layer b/include/osgTerrain/Layer index 6f84a4deb..21bf93270 100644 --- a/include/osgTerrain/Layer +++ b/include/osgTerrain/Layer @@ -300,7 +300,7 @@ class OSGTERRAIN_EXPORT ProxyLayer : public Layer protected: - virtual ~ProxyLayer() {} + virtual ~ProxyLayer(); }; diff --git a/src/osgPlugins/gdal/ReaderWriterGDAL.cpp b/src/osgPlugins/gdal/ReaderWriterGDAL.cpp index 26c22a4a5..58f2394b1 100644 --- a/src/osgPlugins/gdal/ReaderWriterGDAL.cpp +++ b/src/osgPlugins/gdal/ReaderWriterGDAL.cpp @@ -46,15 +46,13 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter OpenThreads::ScopedLock lock(_serializerMutex); - osg::notify(osg::NOTICE) << "GDALPlugin : " << file << std::endl; - std::string fileName = osgDB::findDataFile( file, options ); if (fileName.empty()) return ReadResult::FILE_NOT_FOUND; initGDAL(); // open a DataSetLayer. - osg::ref_ptr dataset = new GDALPlugin::DataSetLayer; + osg::ref_ptr dataset = new GDALPlugin::DataSetLayer(fileName); if (dataset->valid()) return dataset.release(); diff --git a/src/osgPlugins/osgTerrain/Terrain.cpp b/src/osgPlugins/osgTerrain/Terrain.cpp index 0cfeae1aa..8342c873e 100644 --- a/src/osgPlugins/osgTerrain/Terrain.cpp +++ b/src/osgPlugins/osgTerrain/Terrain.cpp @@ -63,6 +63,23 @@ osgTerrain::Layer* readLayer(osgDB::Input& fr) } + if (fr.matchSequence("ProxyLayer %w") || fr.matchSequence("ProxyLayer %w")) + { + osg::ref_ptr image = osgDB::readObjectFile(std::string(fr[1].getStr())+".gdal"); + osgTerrain::ProxyLayer* proxyLayer = dynamic_cast(image.get()); + if (proxyLayer) + { + layer = proxyLayer; + } + else + { + osg::notify(osg::NOTICE)<<"Warning: Failed to create ProxyLayer "< cl = new osgTerrain::CompositeLayer; diff --git a/src/osgTerrain/Layer.cpp b/src/osgTerrain/Layer.cpp index f655a48df..66b483f4d 100644 --- a/src/osgTerrain/Layer.cpp +++ b/src/osgTerrain/Layer.cpp @@ -326,7 +326,7 @@ unsigned int HeightFieldLayer::getModifiedCount() const ///////////////////////////////////////////////////////////////////////////// // -// HieghtFieldLayer +// CompositeLayer // CompositeLayer::CompositeLayer() { @@ -342,3 +342,21 @@ void CompositeLayer::clear() { _layers.clear(); } + +///////////////////////////////////////////////////////////////////////////// +// +// ProxyLayer +// +ProxyLayer::ProxyLayer() +{ +} + +ProxyLayer::ProxyLayer(const ProxyLayer& proxyLayer,const osg::CopyOp& copyop): + Layer(proxyLayer,copyop) +{ +} + +ProxyLayer::~ProxyLayer() +{ +} + diff --git a/src/osgWrappers/osgTerrain/Layer.cpp b/src/osgWrappers/osgTerrain/Layer.cpp index 3da1e5fda..3771bb8c1 100644 --- a/src/osgWrappers/osgTerrain/Layer.cpp +++ b/src/osgWrappers/osgTerrain/Layer.cpp @@ -557,3 +557,40 @@ BEGIN_OBJECT_REFLECTOR(osgTerrain::Layer) __void__setValidDataOperator__ValidDataOperator_P1); END_REFLECTOR +BEGIN_OBJECT_REFLECTOR(osgTerrain::ProxyLayer) + I_DeclaringFile("osgTerrain/Layer"); + I_BaseType(osgTerrain::Layer); + I_Constructor0(____ProxyLayer, + "", + ""); + I_ConstructorWithDefaults2(IN, const osgTerrain::ProxyLayer &, proxyLayer, , IN, const osg::CopyOp &, copyop, osg::CopyOp::SHALLOW_COPY, + ____ProxyLayer__C5_ProxyLayer_R1__C5_osg_CopyOp_R1, + "Copy constructor using CopyOp to manage deep vs shallow copy. ", + ""); + I_Method0(osg::Object *, cloneType, + Properties::VIRTUAL, + __osg_Object_P1__cloneType, + "Clone the type of an object, with Object* return type. ", + "Must be defined by derived classes. "); + I_Method1(osg::Object *, clone, IN, const osg::CopyOp &, copyop, + Properties::VIRTUAL, + __osg_Object_P1__clone__C5_osg_CopyOp_R1, + "Clone an object, with Object* return type. ", + "Must be defined by derived classes. "); + I_Method1(bool, isSameKindAs, IN, const osg::Object *, obj, + Properties::VIRTUAL, + __bool__isSameKindAs__C5_osg_Object_P1, + "", + ""); + I_Method0(const char *, libraryName, + Properties::VIRTUAL, + __C5_char_P1__libraryName, + "return the name of the object's library. ", + "Must be defined by derived classes. The OpenSceneGraph convention is that the namespace of a library is the same as the library name. "); + I_Method0(const char *, className, + Properties::VIRTUAL, + __C5_char_P1__className, + "return the name of the object's class type. ", + "Must be defined by derived classes. "); +END_REFLECTOR +