Changeset 7317

Show
Ignore:
Timestamp:
08/29/07 18:29:05
Author:
robert
Message:

Further work on new ProxyLayer?

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • OpenSceneGraph/trunk/include/osgTerrain/Layer

    r7316 r7317  
    298298        META_Object(osgTerrain, ProxyLayer); 
    299299 
     300        /** Return if this ProxyLayer is attached to valid file handle.*/ 
     301        virtual bool isOpen() const { return false; } 
     302 
     303        /** Open a file.*/ 
     304        void openFile(const std::string& fileName) 
     305        { 
     306            if (_filename!=fileName) 
     307            { 
     308                if (isOpen()) close(); 
     309                 
     310                _filename = fileName; 
     311            } 
     312 
     313            if (!isOpen()) open(); 
     314        } 
     315 
     316        /** Open the any associated file handle.*/ 
     317        virtual void open() {} 
     318 
     319        /** Open the any associated file handle.*/ 
     320        virtual void close() {} 
     321 
     322        /** Extract an ImageLayer from the ProxyLayer.*/ 
     323        virtual ImageLayer* extractImageLayer(unsigned int /*minX*/, unsigned int /*minY*/, unsigned int /*maxX*/, unsigned int /*maxY*/) { return 0; } 
    300324 
    301325    protected: 
  • OpenSceneGraph/trunk/src/osgPlugins/gdal/DataSetLayer.cpp

    r7314 r7317  
    1414#include "DataSetLayer.h" 
    1515 
     16#include <osg/Notify> 
     17 
    1618using namespace GDALPlugin; 
    1719 
    18 DataSetLayer::DataSetLayer() 
     20DataSetLayer::DataSetLayer(): 
     21    _dataset(0) 
    1922{ 
    20     _dataset = 0; 
    2123} 
    2224 
    23 DataSetLayer::DataSetLayer(const std::string& fileName) 
     25DataSetLayer::DataSetLayer(const std::string& fileName): 
     26    _dataset(0) 
    2427{ 
    25     setFileName(fileName); 
    26     _dataset = (GDALDataset*)GDALOpen(fileName.c_str(),GA_ReadOnly); 
     28    openFile(fileName); 
    2729} 
    2830 
     
    3032    ProxyLayer(dataSetLayer) 
    3133{ 
    32     _dataset = (GDALDataset*)GDALOpen(getFileName().c_str(),GA_ReadOnly); 
     34    if (dataSetLayer._dataset) open(); 
    3335} 
    3436 
    3537DataSetLayer::~DataSetLayer() 
    3638{ 
    37     if (_dataset) delete _dataset; 
     39    close(); 
     40
     41 
     42void DataSetLayer::open() 
     43
     44    if (_dataset) return; 
     45 
     46    if (getFileName().empty()) return; 
     47     
     48    _dataset = static_cast<GDALDataset*>(GDALOpen(getFileName().c_str(),GA_ReadOnly)); 
     49     
     50    setUpLocator(); 
     51
     52 
     53void DataSetLayer::close() 
     54
     55    if (_dataset) 
     56    { 
     57        GDALClose(static_cast<GDALDatasetH>(_dataset)); 
     58         
     59        _dataset = 0; 
     60    } 
    3861} 
    3962 
     
    4871} 
    4972 
     73osgTerrain::ImageLayer* DataSetLayer::extractImageLayer(unsigned int minX, unsigned int minY, unsigned int maxX, unsigned int maxY) 
     74{ 
     75    if (!_dataset || maxX<minX || maxY<minY) return 0; 
     76 
     77    osg::notify(osg::NOTICE)<<"DataSetLayer::extractImageLayer("<<minX<<", "<<minY<<", "<<maxX<<", "<<maxY<<") not yet implemented"<<std::endl; 
     78 
     79    return 0; 
     80} 
     81 
     82void DataSetLayer::setUpLocator() 
     83{ 
     84    osg::notify(osg::NOTICE)<<"DataSetLayer::setUpLocator()"<<std::endl; 
     85} 
  • OpenSceneGraph/trunk/src/osgPlugins/gdal/DataSetLayer.h

    r7314 r7317  
    3434        META_Object(GDALPlugin, DataSetLayer); 
    3535         
    36         bool valid() const { return _dataset!=0; } 
    37          
     36        virtual bool isOpen() const { return _dataset!=0; } 
     37 
     38        virtual void open(); 
     39 
     40        virtual void close(); 
     41 
    3842        virtual unsigned int getNumColumns() const; 
     43 
    3944        virtual unsigned int getNumRows() const; 
     45 
     46        virtual osgTerrain::ImageLayer* extractImageLayer(unsigned int minX, unsigned int minY, unsigned int maxX, unsigned int maxY); 
    4047 
    4148    protected: 
    4249     
    4350        virtual ~DataSetLayer(); 
     51     
     52        void setUpLocator(); 
    4453     
    4554        GDALDataset* _dataset; 
  • OpenSceneGraph/trunk/src/osgPlugins/gdal/ReaderWriterGDAL.cpp

    r7316 r7317  
    5555            osg::ref_ptr<GDALPlugin::DataSetLayer> dataset = new GDALPlugin::DataSetLayer(fileName); 
    5656             
    57             if (dataset->valid()) return dataset.release(); 
     57            if (dataset->isOpen()) return dataset.release(); 
    5858             
    5959            return ReadResult::FILE_NOT_HANDLED; 
  • OpenSceneGraph/trunk/src/osgTerrain/CMakeLists.txt

    r7202 r7317  
    1313        ${HEADER_PATH}/Terrain 
    1414        ${HEADER_PATH}/TerrainTechnique 
     15        ${HEADER_PATH}/TileSystem 
    1516        ${HEADER_PATH}/GeometryTechnique 
    1617        ${HEADER_PATH}/ValidDataOperator 
     
    2627        Terrain.cpp 
    2728        TerrainTechnique.cpp 
     29        TileSystem.cpp 
    2830        GeometryTechnique.cpp 
    2931        Version.cpp 
  • OpenSceneGraph/trunk/src/osgWrappers/osgTerrain/Layer.cpp

    r7316 r7317  
    593593                  "return the name of the object's class type. ", 
    594594                  "Must be defined by derived classes. "); 
     595        I_Method0(bool, isOpen, 
     596                  Properties::VIRTUAL, 
     597                  __bool__isOpen, 
     598                  "Return if this ProxyLayer is attached to valid file handle. ", 
     599                  ""); 
     600        I_Method1(void, openFile, IN, const std::string &, fileName, 
     601                  Properties::NON_VIRTUAL, 
     602                  __void__openFile__C5_std_string_R1, 
     603                  "Open a file. ", 
     604                  ""); 
     605        I_Method0(void, open, 
     606                  Properties::VIRTUAL, 
     607                  __void__open, 
     608                  "Open the any associated file handle. ", 
     609                  ""); 
     610        I_Method0(void, close, 
     611                  Properties::VIRTUAL, 
     612                  __void__close, 
     613                  "Open the any associated file handle. ", 
     614                  ""); 
     615        I_Method4(osgTerrain::ImageLayer *, extractImageLayer, IN, unsigned, int, IN, unsigned, int, IN, unsigned, int, IN, unsigned, int, 
     616                  Properties::VIRTUAL, 
     617                  __ImageLayer_P1__extractImageLayer__unsigned__unsigned__unsigned__unsigned, 
     618                  "Extract an ImageLayer from the ProxyLayer. ", 
     619                  ""); 
    595620END_REFLECTOR 
    596621