Further work on new ProxyLayer
This commit is contained in:
@@ -13,28 +13,51 @@
|
||||
|
||||
#include "DataSetLayer.h"
|
||||
|
||||
#include <osg/Notify>
|
||||
|
||||
using namespace GDALPlugin;
|
||||
|
||||
DataSetLayer::DataSetLayer()
|
||||
DataSetLayer::DataSetLayer():
|
||||
_dataset(0)
|
||||
{
|
||||
_dataset = 0;
|
||||
}
|
||||
|
||||
DataSetLayer::DataSetLayer(const std::string& fileName)
|
||||
DataSetLayer::DataSetLayer(const std::string& fileName):
|
||||
_dataset(0)
|
||||
{
|
||||
setFileName(fileName);
|
||||
_dataset = (GDALDataset*)GDALOpen(fileName.c_str(),GA_ReadOnly);
|
||||
openFile(fileName);
|
||||
}
|
||||
|
||||
DataSetLayer::DataSetLayer(const DataSetLayer& dataSetLayer,const osg::CopyOp& copyop):
|
||||
ProxyLayer(dataSetLayer)
|
||||
{
|
||||
_dataset = (GDALDataset*)GDALOpen(getFileName().c_str(),GA_ReadOnly);
|
||||
if (dataSetLayer._dataset) open();
|
||||
}
|
||||
|
||||
DataSetLayer::~DataSetLayer()
|
||||
{
|
||||
if (_dataset) delete _dataset;
|
||||
close();
|
||||
}
|
||||
|
||||
void DataSetLayer::open()
|
||||
{
|
||||
if (_dataset) return;
|
||||
|
||||
if (getFileName().empty()) return;
|
||||
|
||||
_dataset = static_cast<GDALDataset*>(GDALOpen(getFileName().c_str(),GA_ReadOnly));
|
||||
|
||||
setUpLocator();
|
||||
}
|
||||
|
||||
void DataSetLayer::close()
|
||||
{
|
||||
if (_dataset)
|
||||
{
|
||||
GDALClose(static_cast<GDALDatasetH>(_dataset));
|
||||
|
||||
_dataset = 0;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int DataSetLayer::getNumColumns() const
|
||||
@@ -47,3 +70,16 @@ unsigned int DataSetLayer::getNumRows() const
|
||||
return _dataset!=0 ? _dataset->GetRasterYSize() : 0;
|
||||
}
|
||||
|
||||
osgTerrain::ImageLayer* DataSetLayer::extractImageLayer(unsigned int minX, unsigned int minY, unsigned int maxX, unsigned int maxY)
|
||||
{
|
||||
if (!_dataset || maxX<minX || maxY<minY) return 0;
|
||||
|
||||
osg::notify(osg::NOTICE)<<"DataSetLayer::extractImageLayer("<<minX<<", "<<minY<<", "<<maxX<<", "<<maxY<<") not yet implemented"<<std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void DataSetLayer::setUpLocator()
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"DataSetLayer::setUpLocator()"<<std::endl;
|
||||
}
|
||||
|
||||
@@ -33,15 +33,24 @@ class DataSetLayer : public osgTerrain::ProxyLayer
|
||||
|
||||
META_Object(GDALPlugin, DataSetLayer);
|
||||
|
||||
bool valid() const { return _dataset!=0; }
|
||||
|
||||
virtual bool isOpen() const { return _dataset!=0; }
|
||||
|
||||
virtual void open();
|
||||
|
||||
virtual void close();
|
||||
|
||||
virtual unsigned int getNumColumns() const;
|
||||
|
||||
virtual unsigned int getNumRows() const;
|
||||
|
||||
virtual osgTerrain::ImageLayer* extractImageLayer(unsigned int minX, unsigned int minY, unsigned int maxX, unsigned int maxY);
|
||||
|
||||
protected:
|
||||
|
||||
virtual ~DataSetLayer();
|
||||
|
||||
void setUpLocator();
|
||||
|
||||
GDALDataset* _dataset;
|
||||
|
||||
};
|
||||
|
||||
@@ -54,7 +54,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter
|
||||
// open a DataSetLayer.
|
||||
osg::ref_ptr<GDALPlugin::DataSetLayer> dataset = new GDALPlugin::DataSetLayer(fileName);
|
||||
|
||||
if (dataset->valid()) return dataset.release();
|
||||
if (dataset->isOpen()) return dataset.release();
|
||||
|
||||
return ReadResult::FILE_NOT_HANDLED;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user