Hi Robert

Thanks a lot, was starting to get at this but using a more primitive
approach of running through all the children of the node that I did
get.

Will try to implement your method.

Brgs.

Ralf Stokholm

2009/4/2 Robert Osfield <[email protected]>:
> Hi Ralf,
>
> You'll need to write a custom NodeVisitor that traverses through the loaded
> scene graph and picks out the TerrainTile using dyanmic cast.   It just so
> happens that I'm actually working on a ReadFileCallback/custom Visitor that
> does pick out all the TerrainTile's in a subgraph (there will typically be
> one, two or four due to the quad tree structure generated by VPB.)
>
> The visitor looks like:
>
> class FindTerrainTileVisitor : public osg::NodeVisitor
> {
> public:
>     FindTerrainTileVisitor():
>         osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN)
>     {
>     }
>
>     void reset()
>     {
>         _terrainTiles.clear();
>     }
>
>     void apply(osg::Group& group)
>     {
>         osgTerrain::TerrainTile* terrainTile =
> dynamic_cast<osgTerrain::TerrainTile*>(&group);
>         if (terrainTile)
>         {
>             _terrainTiles.push_back(terrainTile);
>         }
>         else
>         {
>             traverse(group);
>         }
>     }
>
>     typedef std::list< osg::ref_ptr<osgTerrain::TerrainTile> > TerrainTiles;
>     TerrainTiles _terrainTiles;
> };
>
> The custom ReadFileCallback's readNode method looks like:
>
>     virtual osgDB::ReaderWriter::ReadResult readNode(const std::string&
> filename, const osgDB::ReaderWriter::Options* options)
>     {
>         osg::notify(osg::NOTICE)<<"Loading tile "<<filename<<std::endl;
>         osgDB::ReaderWriter::ReadResult result =
> osgDB::Registry::instance()->readNodeImplementation(filename,options);
>         if (result.validNode())
>         {
>             FindTerrainTileVisitor fttv;
>             result.getNode()->accept(fttv);
>             for(FindTerrainTileVisitor::TerrainTiles::iterator itr =
> fttv._terrainTiles.begin();
>                 itr != fttv._terrainTiles.end();
>                 ++itr)
>             {
>                 osgTerrain::TerrainTile* terrainTile = itr->get();
>                 ///.... my stuff omitted, put your  stuff here
>             }
>          }
>       }
>
>
> Robert.
>
> On Thu, Apr 2, 2009 at 1:05 PM, Ralf Stokholm <[email protected]>
> wrote:
>>
>> Hi List
>>
>> Im trying to get the heightfiled data from a VPB terrain using
>> ReadFileCallback.
>>
>> I use the code from readfile callback like this.
>>
>>   class MyReadFileCallback : public osgDB::Registry::ReadFileCallback
>>   {
>>   public:
>>      virtual osgDB::ReaderWriter::ReadResult readNode(const
>> std::string& fileName, const osgDB::ReaderWriter::Options* options)
>>      {
>>         // note when calling the Registry to do the read you have to
>> call readNodeImplementation NOT readNode, as this will
>>         // cause on infinite recusive loop.
>>         osgDB::ReaderWriter::ReadResult result =
>> osgDB::Registry::instance()->readNodeImplementation(fileName,options);
>>         if (result.validHeightField())
>>         {
>>            LOG_ERROR("Found a valid HeightField");
>>         }
>>         return result;
>>      }
>>   };
>>
>> The idea was simply to see if I had the heightfield available, but
>> even though I have verified that it gets called it is never a valid
>> heightfield.
>>
>> This is on a terrain build using VPB with the --TERRAIN option.
>>
>> Shouldent I be able to get the heightfieldnodes?
>>
>> Brgs.
>>
>> Ralf Stokholm
>> _______________________________________________
>> osg-users mailing list
>> [email protected]
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to