1
#include <osgTerrain/TerrainTile>
2
#include <osgDB/ObjectWrapper>
3
#include <osgDB/InputStream>
4
#include <osgDB/OutputStream>
7
static bool checkTileID( const osgTerrain::TerrainTile& tile )
9
return tile.getTileID().valid();
12
static bool readTileID( osgDB::InputStream& is, osgTerrain::TerrainTile& tile )
14
osgTerrain::TileID id;
15
is >> id.level >> id.x >> id.y;
20
static bool writeTileID( osgDB::OutputStream& os, const osgTerrain::TerrainTile& tile )
22
const osgTerrain::TileID& id = tile.getTileID();
23
os << id.level << id.x << id.y << std::endl;
28
static bool checkColorLayers( const osgTerrain::TerrainTile& tile )
30
return tile.getNumColorLayers()>0;
33
static bool readColorLayers( osgDB::InputStream& is, osgTerrain::TerrainTile& tile )
35
unsigned int numValidLayers = 0; is >> numValidLayers >> osgDB::BEGIN_BRACKET;
36
for ( unsigned int i=0; i<numValidLayers; ++i )
38
unsigned int layerNum=0; is >> osgDB::PROPERTY("Layer") >> layerNum;
39
osgTerrain::Layer* layer = dynamic_cast<osgTerrain::Layer*>( is.readObject() );
40
if ( layer ) tile.setColorLayer( layerNum, layer );
42
is >> osgDB::END_BRACKET;
46
static bool writeColorLayers( osgDB::OutputStream& os, const osgTerrain::TerrainTile& tile )
48
unsigned int numValidLayers = 0;
49
for ( unsigned int i=0; i<tile.getNumColorLayers(); ++i )
51
if (tile.getColorLayer(i)) ++numValidLayers;
54
os << numValidLayers << osgDB::BEGIN_BRACKET << std::endl;
55
for ( unsigned int i=0; i<tile.getNumColorLayers(); ++i )
57
if (tile.getColorLayer(i)) os << osgDB::PROPERTY("Layer") << i << tile.getColorLayer(i);
59
os << osgDB::END_BRACKET << std::endl;
63
struct TerrainTileFinishedObjectReadCallback : public osgDB::FinishedObjectReadCallback
65
virtual void objectRead(osgDB::InputStream& is, osg::Object& obj)
67
osgTerrain::TerrainTile& tile = static_cast<osgTerrain::TerrainTile&>(obj);
71
osg::ref_ptr<osg::Node> node;
72
if (is.getOptions()->getTerrain().lock(node))
74
tile.setTerrain(node->asTerrain());
78
if ( osgTerrain::TerrainTile::getTileLoadedCallback().valid() )
79
osgTerrain::TerrainTile::getTileLoadedCallback()->loaded( &tile, is.getOptions() );
84
REGISTER_OBJECT_WRAPPER( osgTerrain_TerrainTile,
85
new osgTerrain::TerrainTile,
86
osgTerrain::TerrainTile,
87
"osg::Object osg::Node osg::Group osgTerrain::TerrainTile" )
89
ADD_USER_SERIALIZER( TileID ); // _tileID
90
ADD_OBJECT_SERIALIZER( TerrainTechnique, osgTerrain::TerrainTechnique, NULL ); // _terrainTechnique
91
ADD_OBJECT_SERIALIZER( Locator, osgTerrain::Locator, NULL ); // _locator
92
ADD_OBJECT_SERIALIZER( ElevationLayer, osgTerrain::Layer, NULL ); // _elevationLayer
93
ADD_USER_SERIALIZER( ColorLayers ); // _colorLayers
94
ADD_BOOL_SERIALIZER( RequiresNormals, true ); // _requiresNormals
95
ADD_BOOL_SERIALIZER( TreatBoundariesToValidDataAsDefaultValue, false ); // _treatBoundariesToValidDataAsDefaultValue
96
BEGIN_ENUM_SERIALIZER( BlendingPolicy, INHERIT );
97
ADD_ENUM_VALUE( INHERIT );
98
ADD_ENUM_VALUE( DO_NOT_SET_BLENDING );
99
ADD_ENUM_VALUE( ENABLE_BLENDING );
100
ADD_ENUM_VALUE( ENABLE_BLENDING_WHEN_ALPHA_PRESENT );
101
END_ENUM_SERIALIZER(); // BlendingPolicy
103
wrapper->addFinishedObjectReadCallback( new TerrainTileFinishedObjectReadCallback() );