Revised KdTreeBuilder so that is used the new apply(osg::Geometry&) method rather than expanding an osg::Geode.

git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14303 16af8721-9629-0410-8352-f15c8da7e697
This commit is contained in:
Robert Osfield
2014-06-26 14:16:11 +00:00
parent a21ce3469b
commit 92d684de6b
3 changed files with 10 additions and 19 deletions

View File

@@ -179,7 +179,7 @@ class OSG_EXPORT KdTreeBuilder : public osg::NodeVisitor
virtual KdTreeBuilder* clone() { return new KdTreeBuilder(*this); }
void apply(osg::Geode& geode);
void apply(Geometry& geometry);
KdTree::BuildOptions _buildOptions;

View File

@@ -225,7 +225,7 @@ class OSG_EXPORT NodeVisitor : public virtual Object
virtual float getDistanceToViewPoint(const Vec3& /*pos*/, bool /*useLODScale*/) const { return 0.0f; }
virtual void apply(Drawable& drawable);
virtual void apply(Geometry& drawable);
virtual void apply(Geometry& geometry);
virtual void apply(Node& node);

View File

@@ -801,24 +801,15 @@ KdTreeBuilder::KdTreeBuilder(const KdTreeBuilder& rhs):
{
}
void KdTreeBuilder::apply(osg::Geode& geode)
void KdTreeBuilder::apply(osg::Geometry& geometry)
{
for(unsigned int i=0; i<geode.getNumDrawables(); ++i)
osg::KdTree* previous = dynamic_cast<osg::KdTree*>(geometry.getShape());
if (previous) return;
osg::ref_ptr<osg::KdTree> kdTree = osg::clone(_kdTreePrototype.get());
if (kdTree->build(_buildOptions, &geometry))
{
osg::Geometry* geom = geode.getDrawable(i)->asGeometry();
if (geom)
{
osg::KdTree* previous = dynamic_cast<osg::KdTree*>(geom->getShape());
if (previous) continue;
osg::ref_ptr<osg::Object> obj = _kdTreePrototype->cloneType();
osg::ref_ptr<osg::KdTree> kdTree = dynamic_cast<osg::KdTree*>(obj.get());
if (kdTree->build(_buildOptions, geom))
{
geom->setShape(kdTree.get());
}
}
geometry.setShape(kdTree.get());
}
}