Changeset 934

Show
Ignore:
Timestamp:
09/05/08 18:11:19
Author:
robert
Message:

Added support for outputing image files when generated --terrain databases

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/include/vpb/DataSet

    r932 r934  
    178178        void _writeNodeFile(const osg::Node& node,const std::string& filename); 
    179179        void _writeImageFile(const osg::Image& image,const std::string& filename); 
    180          
     180        void _writeNodeFileAndImages(const osg::Node& node,const std::string& filename); 
     181        
    181182        void setState(osg::State* state) { _state = state; } 
    182183        osg::State* getState() { return _state.get(); } 
  • trunk/src/vpb/DataSet.cpp

    r932 r934  
    14991499} 
    15001500 
    1501  
    15021501class WriteImageFilesVisitor : public osg::NodeVisitor 
    15031502{ 
     
    15301529    } 
    15311530 
     1531 
     1532    void writeLayer(osgTerrain::Layer* layer) 
     1533    { 
     1534        if (!layer) return; 
     1535         
     1536        osgTerrain::ImageLayer* imageLayer = dynamic_cast<osgTerrain::ImageLayer*>(layer); 
     1537        if (imageLayer) 
     1538        { 
     1539            osg::Image* image = imageLayer->getImage(); 
     1540            if (image) 
     1541            { 
     1542                osg::notify(osg::NOTICE)<<"Writing out image layer "<<image->getFileName()<<std::endl; 
     1543                _dataSet->_writeImageFile(*image,(_dataSet->getDirectory()+image->getFileName()).c_str()); 
     1544            } 
     1545            return;    
     1546        } 
     1547         
     1548        osgTerrain::SwitchLayer* switchLayer = dynamic_cast<osgTerrain::SwitchLayer*>(layer); 
     1549        if (switchLayer) 
     1550        { 
     1551            for(unsigned int i=0; i<switchLayer->getNumLayers(); ++i) 
     1552            { 
     1553                osg::notify(osg::NOTICE)<<"Writing out switch layer child: "<<switchLayer->getSetName(i)<<", "<<switchLayer->getFileName(i)<<std::endl; 
     1554                writeLayer(switchLayer->getLayer(i)); 
     1555            } 
     1556            return; 
     1557        } 
     1558 
     1559        osgTerrain::CompositeLayer* compositeLayer = dynamic_cast<osgTerrain::CompositeLayer*>(layer); 
     1560        if (compositeLayer) 
     1561        { 
     1562            for(unsigned int i=0; i<compositeLayer->getNumLayers(); ++i) 
     1563            { 
     1564                osg::notify(osg::NOTICE)<<"Writing out composite layer child: "<<compositeLayer->getFileName(i)<<std::endl; 
     1565                writeLayer(compositeLayer->getLayer(i)); 
     1566            } 
     1567            return; 
     1568        } 
     1569    } 
     1570 
    15321571    void applyTerrain(osgTerrain::TerrainTile& terrainTile) 
    15331572    { 
    1534         if (terrainTile.getStateSet()) apply(*(terrainTile.getStateSet())); 
    1535          
    1536         // need to iterator through images stored in layers 
     1573#if 0     
     1574        if (terrainTile.getElevationLayer()) writeLayer(terrainTile.getElevationLayer()); 
     1575#endif 
     1576 
     1577        for(unsigned int i=0; i<terrainTile.getNumColorLayers(); ++i) 
     1578        { 
     1579            if (terrainTile.getColorLayer(i)) 
     1580            { 
     1581                writeLayer(terrainTile.getColorLayer(i)); 
     1582            } 
     1583        } 
    15371584    } 
    15381585 
     
    15651612}; 
    15661613 
     1614void DataSet::_writeNodeFileAndImages(const osg::Node& node,const std::string& filename) 
     1615{ 
     1616    if (getDisableWrites()) return; 
     1617 
     1618    if (getDestinationTileExtension()==".osg") 
     1619    { 
     1620        WriteImageFilesVisitor wifv(this); 
     1621        const_cast<osg::Node&>(node).accept(wifv); 
     1622    } 
     1623 
     1624    _writeNodeFile(node,filename); 
     1625} 
     1626 
     1627 
     1628 
    15671629class WriteOperation : public BuildOperation 
    15681630{ 
     
    15841646                if (_buildLog.valid()) _buildLog->log(osg::NOTICE, "   writeSubTile filename= %s",_filename.c_str()); 
    15851647                 
    1586                 _dataset->_writeNodeFile(*node,_filename); 
    1587  
    1588                 if (_dataset->getDestinationTileExtension()==".osg") 
    1589                 { 
    1590                     WriteImageFilesVisitor wifv(_dataset); 
    1591                     node->accept(wifv); 
    1592                 } 
     1648                _dataset->_writeNodeFileAndImages(*node,_filename); 
    15931649 
    15941650                _cd->setSubTilesGenerated(true); 
     
    16341690                    { 
    16351691                        log(osg::NOTICE, "   writeSubTile filename= %s",filename.c_str()); 
    1636                         _writeNodeFile(*node,filename); 
    1637  
    1638                         if (_tileExtension==".osg") 
    1639                         { 
    1640                             WriteImageFilesVisitor wifv(this); 
    1641                             node->accept(wifv); 
    1642                         } 
     1692                        _writeNodeFileAndImages(*node,filename); 
     1693 
    16431694 
    16441695                        parent->setSubTilesGenerated(true); 
     
    16851736            { 
    16861737                log(osg::NOTICE, "   writeNodeFile = %u X=%u Y=%u filename=%s",cd->_level,cd->_tileX,cd->_tileY,filename.c_str()); 
    1687                 _writeNodeFile(*node,filename); 
    1688                  
    1689                 if (_tileExtension==".osg") 
    1690                 { 
    1691                     WriteImageFilesVisitor wifv(this); 
    1692                     node->accept(wifv); 
    1693                 } 
     1738                _writeNodeFileAndImages(*node,filename); 
    16941739            } 
    16951740            else 
     
    18211866            if (writeToDisk) 
    18221867            { 
    1823                 _writeNodeFile(*_rootNode,filename); 
    1824                 if (_tileExtension==".osg") 
    1825                 { 
    1826                     WriteImageFilesVisitor wifv(this); 
    1827                     _rootNode->accept(wifv); 
    1828                 } 
     1868                _writeNodeFileAndImages(*_rootNode,filename); 
    18291869            } 
    18301870        }