Changeset 7840

Show
Ignore:
Timestamp:
01/28/08 17:13:42
Author:
robert
Message:

From Cedric Pinson, "default white behaviour : osgviewerd -e ogr yourFile
randomize color by feature: osgviewerd -e ogr -O UseRandomColorByFeature?
yourFile"

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • OpenSceneGraph/trunk/src/osgPlugins/ogr/ReaderWriterOGR.cpp

    r7827 r7840  
    3737#include <ogrsf_frmts.h> 
    3838 
    39 //#include <iostream> 
    40  
    41 #define SERIALIZER() OpenThreads::ScopedLock<OpenThreads::ReentrantMutex> lock(_serializerMutex) 
     39#define SERIALIZER() OpenThreads::ScopedLock<OpenThreads::ReentrantMutex> lock(_serializerMutex)   
    4240 
    4341static osg::Material* createDefaultMaterial() 
     
    8280class ReaderWriterOGR : public osgDB::ReaderWriter 
    8381{ 
     82 
    8483public: 
     84    ReaderWriterOGR() {} 
    8585    virtual const char* className() const { return "OGR file reader"; } 
    8686    virtual bool acceptsExtension(const std::string& extension) const 
     
    114114            return 0; 
    115115 
     116        bool useRandomColorByFeature = false; 
     117        if (options)  
     118        { 
     119            if (options->getOptionString() == "UseRandomColorByFeature") 
     120                useRandomColorByFeature = true; 
     121        } 
     122 
    116123        osg::Group* group = new osg::Group; 
    117124 
    118125        for (int i = 0; i < file->GetLayerCount(); i++)  
    119126        { 
    120             osg::Group* node = readLayer(file->GetLayer(i), file->GetName()); 
     127            osg::Group* node = readLayer(file->GetLayer(i), file->GetName(), useRandomColorByFeature); 
    121128            if (node) 
    122129                group->addChild( node ); 
     
    126133    } 
    127134 
    128     osg::Group* readLayer(OGRLayer* ogrLayer, const std::string& name) const 
     135    osg::Group* readLayer(OGRLayer* ogrLayer, const std::string& name, bool useRandomColorByFeature) const 
    129136    { 
    130137        if (!ogrLayer) 
     
    138145        while ((ogrFeature = ogrLayer->GetNextFeature()) != NULL)  
    139146        { 
    140             osg::Geode* feature = readFeature(ogrFeature); 
     147            osg::Geode* feature = readFeature(ogrFeature, useRandomColorByFeature); 
    141148            if (feature) 
    142149                layer->addChild(feature); 
     
    321328    } 
    322329 
    323     osg::Geode* readFeature(OGRFeature* ogrFeature) const 
     330    osg::Geode* readFeature(OGRFeature* ogrFeature, bool useRandomColorByFeature) const 
    324331    { 
    325332 
     
    388395            geode->setCullingActive(false); // because culling on one points geode is always true, so i disable it 
    389396        geode->addDrawable(drawable); 
    390         geode->getOrCreateStateSet()->setAttributeAndModes(createDefaultMaterial(),true); 
     397        if (useRandomColorByFeature) 
     398            geode->getOrCreateStateSet()->setAttributeAndModes(createDefaultMaterial(),true); 
    391399        for(int i = 0; i < ogrFeature->GetFieldCount(); i++) { 
    392400            geode->addDescription(std::string(ogrFeature->GetFieldDefnRef(i)->GetNameRef()) + " : " + std::string(ogrFeature->GetFieldAsString(i)));