Added getBoundingBox() method to osg::Geode to provide a closer bound

of the bounding volume of a Geode to be tracked.  This sits alongside
the existing getBound() method which returns a bounding sphere.
This commit is contained in:
Robert Osfield
2004-04-22 10:47:12 +00:00
parent e3a7db4559
commit 017983429b
2 changed files with 13 additions and 4 deletions

View File

@@ -103,12 +103,21 @@ class SG_EXPORT Geode : public Node
/** compile OpenGL Display List for each drawable.*/
void compileDrawables(State& state);
/** return the Geode's bounding box, which the union of all the
* bounding boxes of the geode's drawables.*/
inline const BoundingBox& getBoundingBox() const
{
if(!_bsphere_computed) computeBound();
return _bbox;
}
protected:
virtual ~Geode();
virtual bool computeBound() const;
mutable osg::BoundingBox _bbox;
DrawableList _drawables;
};

View File

@@ -161,19 +161,19 @@ bool Geode::computeBound() const
{
_bsphere.init();
BoundingBox bb;
_bbox.init();
DrawableList::const_iterator itr;
for(itr=_drawables.begin();
itr!=_drawables.end();
++itr)
{
bb.expandBy((*itr)->getBound());
_bbox.expandBy((*itr)->getBound());
}
if (bb.valid())
if (_bbox.valid())
{
_bsphere.expandBy(bb);
_bsphere.expandBy(_bbox);
_bsphere_computed=true;
return true;
}