From 56a1808794e2330a81674ad89e90885d5f342f60 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 21 Mar 2007 17:18:53 +0000 Subject: [PATCH] Added ImageLayer, ArrayLayer and HeightFieldLayer classes --- include/osgTerrain/Layer | 78 ++++++++++++++++++++++++++++- src/osgTerrain/Layer.cpp | 59 ++++++++++++++++++++++ src/osgTerrain/TerrainTechnique.cpp | 9 +++- 3 files changed, 142 insertions(+), 4 deletions(-) diff --git a/include/osgTerrain/Layer b/include/osgTerrain/Layer index 6523065c9..0a2111c53 100644 --- a/include/osgTerrain/Layer +++ b/include/osgTerrain/Layer @@ -14,7 +14,9 @@ #ifndef OSGTERRAIN_LAYER #define OSGTERRAIN_LAYER 1 -#include +#include +#include +#include #include @@ -29,7 +31,6 @@ class OSGTERRAIN_EXPORT Layer : public osg::Object /** Copy constructor using CopyOp to manage deep vs shallow copy.*/ Layer(const Layer&,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY); - void setLocator(Locator* locator) { _locator = locator; } Locator* getLocator() { return _locator.get(); } @@ -44,6 +45,79 @@ class OSGTERRAIN_EXPORT Layer : public osg::Object }; +class OSGTERRAIN_EXPORT ImageLayer : public Layer +{ + public: + + ImageLayer(); + + /** Copy constructor using CopyOp to manage deep vs shallow copy.*/ + ImageLayer(const ImageLayer& imageLayer,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY); + + + void setImage(osg::Image* image); + + osg::Image* getImage() { return _image.get(); } + + const osg::Image* getImage() const { return _image.get(); } + + protected: + + virtual ~ImageLayer() {} + + osg::ref_ptr _image; + +}; + +class OSGTERRAIN_EXPORT HeightFieldLayer : public Layer +{ + public: + + HeightFieldLayer(); + + /** Copy constructor using CopyOp to manage deep vs shallow copy.*/ + HeightFieldLayer(const HeightFieldLayer& hfLayer,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY); + + + void setHeightField(osg::HeightField* hf); + + osg::HeightField* getHeightField() { return _heightField.get(); } + + const osg::HeightField* getHeightField() const { return _heightField.get(); } + + protected: + + virtual ~HeightFieldLayer() {} + + osg::ref_ptr _heightField; + +}; + + +class OSGTERRAIN_EXPORT ArrayLayer : public Layer +{ + public: + + ArrayLayer(); + + /** Copy constructor using CopyOp to manage deep vs shallow copy.*/ + ArrayLayer(const ArrayLayer&,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY); + + + void setArray(osg::Array* array); + + osg::Array* getArray() { return _array.get(); } + + const osg::Array* getArray() const { return _array.get(); } + + protected: + + virtual ~ArrayLayer() {} + + osg::ref_ptr _array; + +}; + } #endif diff --git a/src/osgTerrain/Layer.cpp b/src/osgTerrain/Layer.cpp index f5463f802..14bf7fa1f 100644 --- a/src/osgTerrain/Layer.cpp +++ b/src/osgTerrain/Layer.cpp @@ -27,3 +27,62 @@ Layer::Layer(const Layer& Layer,const osg::CopyOp& copyop): Layer::~Layer() { } + +///////////////////////////////////////////////////////////////////////////// +// +// ImageLayer +// +ImageLayer::ImageLayer() +{ +} + +ImageLayer::ImageLayer(const ImageLayer& imageLayer,const osg::CopyOp& copyop): + Layer(imageLayer, copyop), + _image(imageLayer._image) +{ +} + +void ImageLayer::setImage(osg::Image* image) +{ + _image = image; +} + + +///////////////////////////////////////////////////////////////////////////// +// +// HieghtFieldLayer +// +HeightFieldLayer::HeightFieldLayer() +{ +} + +HeightFieldLayer::HeightFieldLayer(const HeightFieldLayer& hfLayer,const osg::CopyOp& copyop): + Layer(hfLayer,copyop), + _heightField(hfLayer._heightField) +{ +} + + +void HeightFieldLayer::setHeightField(osg::HeightField* hf) +{ + _heightField = hf; +} + +///////////////////////////////////////////////////////////////////////////// +// +// ImageLayer +// +ArrayLayer::ArrayLayer() +{ +} + +ArrayLayer::ArrayLayer(const ArrayLayer& arrayLayer,const osg::CopyOp& copyop): + Layer(arrayLayer,copyop), + _array(arrayLayer._array) +{ +} + +void ArrayLayer::setArray(osg::Array* array) +{ + _array = array; +} diff --git a/src/osgTerrain/TerrainTechnique.cpp b/src/osgTerrain/TerrainTechnique.cpp index aa300ab77..ba2f1e77c 100644 --- a/src/osgTerrain/TerrainTechnique.cpp +++ b/src/osgTerrain/TerrainTechnique.cpp @@ -32,20 +32,25 @@ TerrainTechnique::~TerrainTechnique() void TerrainTechnique::initialize() { + osg::notify(osg::NOTICE)<