Changeset 8803

Show
Ignore:
Timestamp:
08/27/08 12:13:30
Author:
robert
Message:

Introduced SwitchLayer? which will form the basis of provided support for varients

Files:

Legend:

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

    r7872 r8803  
    419419}; 
    420420 
     421 
     422 
     423class OSGTERRAIN_EXPORT SwitchLayer : public Layer 
     424{ 
     425    public: 
     426 
     427        SwitchLayer(); 
     428 
     429        /** Copy constructor using CopyOp to manage deep vs shallow copy.*/ 
     430        SwitchLayer(const SwitchLayer& switchLayer,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY); 
     431         
     432        META_Object(osgTerrain, SwitchLayer); 
     433 
     434        void clear(); 
     435         
     436        void setActiveLayer(unsigned int i) { _activeLayer = i; } 
     437        unsigned int getActiveLayer() const { return _activeLayer; } 
     438 
     439        void setFileName(unsigned int i, const std::string& filename) { _layers[i].first = filename; if (_layers[i].second.valid()) _layers[i].second->setFileName(filename); } 
     440        const std::string& getFileName(unsigned int i) const { return _layers[i].second.valid() ? _layers[i].second->getFileName() : _layers[i].first; } 
     441 
     442        void setLayer(unsigned int i, Layer* layer) { _layers[i].second = layer; } 
     443        Layer* getLayer(unsigned int i) { return _layers[i].second.get(); } 
     444        const Layer* getLayer(unsigned int i) const { return _layers[i].second.get(); } 
     445 
     446        void addLayer(const std::string& filename) { _layers.push_back(FileNameLayerPair(filename,0)); } 
     447         
     448        void addLayer(Layer* layer) { _layers.push_back(FileNameLayerPair(layer->getFileName(),layer)); } 
     449 
     450        void removeLayer(unsigned int i) { _layers.erase(_layers.begin()+i); } 
     451         
     452        unsigned int getNumLayers() const { return _layers.size(); } 
     453 
     454    protected: 
     455 
     456        virtual ~SwitchLayer() {} 
     457         
     458        typedef std::pair< std::string, osg::ref_ptr<Layer> > FileNameLayerPair; 
     459         
     460        typedef std::vector< FileNameLayerPair > Layers; 
     461         
     462        unsigned int _activeLayer; 
     463        Layers _layers; 
     464}; 
     465 
    421466} 
    422467 
  • OpenSceneGraph/trunk/src/osgPlugins/ive/CMakeLists.txt

    r8794 r8803  
    2121    ColorMask.cpp 
    2222    CompositeLayer.cpp 
     23    SwitchLayer.cpp 
    2324    ConeSector.cpp 
    2425    ConvexPlanarOccluder.cpp 
     
    134135    ColorMask.h 
    135136    CompositeLayer.h 
     137    SwitchLayer.h 
    136138    ConeSector.h 
    137139    ConvexPlanarOccluder.h 
  • OpenSceneGraph/trunk/src/osgPlugins/ive/DataInputStream.cpp

    r8794 r8803  
    106106#include "HeightFieldLayer.h" 
    107107#include "CompositeLayer.h" 
     108#include "SwitchLayer.h" 
    108109 
    109110#include "FadeText.h" 
     
    15861587        ((ive::ImageLayer*)(layer))->read(this); 
    15871588    } 
     1589    else if (layerid==IVESWITCHLAYER) 
     1590    { 
     1591        layer = new osgTerrain::SwitchLayer; 
     1592        ((ive::SwitchLayer*)(layer))->read(this); 
     1593    } 
    15881594    else if (layerid==IVECOMPOSITELAYER) 
    15891595    { 
  • OpenSceneGraph/trunk/src/osgPlugins/ive/DataOutputStream.cpp

    r8794 r8803  
    107107#include "HeightFieldLayer.h" 
    108108#include "CompositeLayer.h" 
     109#include "SwitchLayer.h" 
    109110 
    110111#include <osg/Notify> 
     
    12901291            ((ive::ImageLayer*)(layer))->write(this); 
    12911292        } 
     1293        else if (dynamic_cast<const osgTerrain::SwitchLayer*>(layer)) 
     1294        { 
     1295            ((ive::SwitchLayer*)(layer))->write(this); 
     1296        } 
    12921297        else if (dynamic_cast<const osgTerrain::CompositeLayer*>(layer)) 
    12931298        { 
  • OpenSceneGraph/trunk/src/osgPlugins/ive/Layer.cpp

    r8389 r8803  
    2020#include "HeightFieldLayer.h" 
    2121#include "CompositeLayer.h" 
     22#include "SwitchLayer.h" 
    2223 
    2324#include <osgDB/ReadFile> 
     
    109110            ((ive::ImageLayer*)(layer))->write(out); 
    110111        } 
     112        else if (dynamic_cast<osgTerrain::SwitchLayer*>(layer)) 
     113        { 
     114            ((ive::SwitchLayer*)(layer))->write(out); 
     115        } 
    111116        else if (dynamic_cast<osgTerrain::CompositeLayer*>(layer)) 
    112117        { 
     
    149154        osgTerrain::ImageLayer* layer = new osgTerrain::ImageLayer; 
    150155        ((ive::ImageLayer*)(layer))->read(in); 
     156        return layer; 
     157    } 
     158    else if (id==IVESWITCHLAYER) 
     159    { 
     160        osgTerrain::SwitchLayer* layer = new osgTerrain::SwitchLayer; 
     161        ((ive::SwitchLayer*)(layer))->read(in); 
    151162        return layer; 
    152163    } 
  • OpenSceneGraph/trunk/src/osgPlugins/ive/ReadWrite.h

    r8794 r8803  
    136136#define IVEGEOMETRYTECHNIQUE            0x00200009 
    137137#define IVEVALIDDATAOPERATOR            0x0020000A 
    138 #define IVEVALIDRANGE                    0x0020000B 
    139 #define IVENODATAVALUE                    0x0020000C 
     138#define IVEVALIDRANGE                   0x0020000B 
     139#define IVENODATAVALUE                  0x0020000C 
     140#define IVESWITCHLAYER                  0x0020000D 
    140141//#define IVETERRAIN                      0x0020000A 
    141142 
  • OpenSceneGraph/trunk/src/osgPlugins/osgTerrain/CMakeLists.txt

    r7999 r8803  
    77    HeightFieldLayer.cpp 
    88    CompositeLayer.cpp 
     9    SwitchLayer.cpp 
    910    Layer.cpp 
    1011    TerrainTile.cpp 
  • OpenSceneGraph/trunk/src/osgTerrain/Layer.cpp

    r8193 r8803  
    567567} 
    568568 
     569 
     570///////////////////////////////////////////////////////////////////////////// 
     571// 
     572// SwitchLayer 
     573// 
     574SwitchLayer::SwitchLayer(): 
     575    _activeLayer(0) 
     576{ 
     577} 
     578 
     579SwitchLayer::SwitchLayer(const SwitchLayer& switchLayer,const osg::CopyOp& copyop): 
     580    Layer(switchLayer,copyop), 
     581    _activeLayer(0) 
     582{ 
     583} 
     584 
     585 
     586void SwitchLayer::clear() 
     587{ 
     588    _layers.clear(); 
     589} 
     590