Changeset 863

Show
Ignore:
Timestamp:
01/28/08 18:03:19
Author:
robert
Message:

From Jean-Christophe Lombardo, "I've added a -hf (or --HeightField?) and -shp command line options to
respectively specify the height field and shape files to load. Default
behavior is kept (ie loading files from David's computer :) ).
I've also added a polygon offset to force the mapped shapefiles to be
over the terrain."

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/applications/vpbheightfieldmapping/vpbheightfieldmapping.cpp

    r805 r863  
    1414#include <osg/CoordinateSystemNode> 
    1515#include <osg/Material> 
     16#include <osg/PolygonOffset> 
    1617 
    1718#include <osg/Vec4> 
     
    9798    arguments.getApplicationUsage()->addCommandLineOption("--DrawThreadPerContext","Select DrawThreadPerContext threading model for viewer."); 
    9899    arguments.getApplicationUsage()->addCommandLineOption("--CullThreadPerCameraDrawThreadPerContext","Select CullThreadPerCameraDrawThreadPerContext threading model for viewer."); 
     100    arguments.getApplicationUsage()->addCommandLineOption("-hf or --HeightField <height field>","Load the height field."); 
     101    arguments.getApplicationUsage()->addCommandLineOption("-shp <shape file>","The geometry to reproject."); 
    99102 
    100103    // if user request help write it out to cout. 
     
    171174//    osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments); 
    172175    std::string modelFile("/home/ledocc/Work/VPB/data/lines.shp"); 
    173     osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile(modelFile); 
    174     if (!loadedModel)  
     176    osg::ref_ptr<osg::Group> loadedModel; 
     177    while (arguments.read("-shp",modelFile)) { 
     178       osg::ref_ptr<osg::Node> shp = osgDB::readNodeFile(modelFile); 
     179       if (shp.valid()) { 
     180          if (!loadedModel.valid()) { 
     181             loadedModel = new osg::Group; 
     182             osg::StateSet *sset = loadedModel->getOrCreateStateSet(); 
     183             sset->setRenderBinDetails(sset->getBinNumber()+1, sset->getBinName()); 
     184             sset->setAttributeAndModes(new osg::PolygonOffset(-1.0, -2.0)); 
     185          } 
     186          loadedModel->addChild(shp.get()); 
     187       } 
     188    } 
     189    if (!loadedModel->getNumChildren())  
    175190    { 
    176191        std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl; 
     
    179194     
    180195    std::string heightFieldFile("/home/ledocc/Work/VPB/data/dtm_200m.tif.gdal"); 
     196    if (!arguments.read("-hf", heightFieldFile)) 
     197       arguments.read("--HeightField", heightFieldFile); 
     198 
    181199    osg::ref_ptr<osg::HeightField> hf = osgDB::readHeightFieldFile(heightFieldFile); 
    182      
     200    if (!hf.valid()) { 
     201       osg::notify(osg::FATAL)<<"Unable to load the height field <"<<heightFieldFile<<">"<<std::endl 
     202          <<"NB: The .gdal pseudo loader might be useful..."<<std::endl; 
     203       return -1; 
     204    } 
     205    
    183206    // ** map loaded model on HeightField 
    184207    vpb::HeightFieldMapper hfm(*hf.get()); 
     
    199222    osg::ref_ptr<osg::Geode> geode = new osg::Geode; 
    200223    geode->addDrawable(new osg::ShapeDrawable(hf.get())); 
     224    osg::StateSet *sset = geode->getOrCreateStateSet(); 
     225    sset->setRenderBinDetails(sset->getBinNumber()-1, sset->getBinName()); 
     226    sset->setAttributeAndModes(new osg::PolygonOffset(1.0, 2.0)); 
     227 
    201228     
    202229    osg::ref_ptr<osg::Group> group(new osg::Group);