19 #include <osg/StateSet>
20 #include <osg/BoundingSphere>
21 #include <osg/BoundingBox>
22 #include <osg/Callback>
47 typedef std::vector< Node* >
NodePath;
59 #define META_Node(library,name) \
60 virtual osg::Object* cloneType() const { return new name (); } \
61 virtual osg::Object* clone(const osg::CopyOp& copyop) const { return new name (*this,copyop); } \
62 virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const name *>(obj)!=NULL; } \
63 virtual const char* className() const { return #name; } \
64 virtual const char* libraryName() const { return #library; } \
65 virtual void accept(osg::NodeVisitor& nv) { if (nv.validNodeMask(*this)) { nv.pushOntoNodePath(this); nv.apply(*this); nv.popFromNodePath(); } } \
96 virtual const char*
className()
const {
return "Node"; }
180 inline const ParentList&
getParents()
const {
return _parents; }
199 inline unsigned int getNumParents()
const {
return static_cast<unsigned int>(_parents.size()); }
205 NodePathList getParentalNodePaths(
osg::Node* haltTraversalAtNode=0)
const;
209 MatrixList getWorldMatrices(
const osg::Node* haltTraversalAtNode=0)
const;
213 void setUpdateCallback(
Callback* nc);
224 if (_updateCallback.valid()) _updateCallback->addNestedCallback(nc);
225 else setUpdateCallback(nc);
231 if (nc !=
NULL && _updateCallback.valid()) {
232 if (_updateCallback == nc)
236 setUpdateCallback(new_nested_callback.
get());
238 else _updateCallback->removeNestedCallback(nc);
248 void setEventCallback(
Callback* nc);
259 if (_eventCallback.valid()) _eventCallback->addNestedCallback(nc);
260 else setEventCallback(nc);
266 if (nc !=
NULL && _eventCallback.valid()) {
267 if (_eventCallback == nc)
271 setEventCallback(new_nested_callback.
get());
273 else _eventCallback->removeNestedCallback(nc);
294 if (_cullCallback.valid()) _cullCallback->addNestedCallback(nc);
295 else setCullCallback(nc);
301 if (nc !=
NULL && _cullCallback.valid()) {
302 if (_cullCallback == nc)
306 setCullCallback(new_nested_callback.
get());
308 else _cullCallback->removeNestedCallback(nc);
315 void setCullingActive(
bool active);
326 inline bool isCullingActive()
const {
return _numChildrenWithCullingDisabled==0 && _cullingActive && getBound().valid(); }
333 bool containsOccluderNodes()
const;
379 void setDescriptions(
const DescriptionList& descriptions);
382 DescriptionList& getDescriptions();
385 const DescriptionList& getDescriptions()
const;
389 const std::string& getDescription(
unsigned int i)
const;
392 std::string& getDescription(
unsigned int i);
395 unsigned int getNumDescriptions()
const;
398 void addDescription(
const std::string& desc);
414 if(!_boundingSphereComputed)
416 _boundingSphere = _initialBound;
417 if (_computeBoundCallback.valid())
418 _boundingSphere.
expandBy(_computeBoundCallback->computeBound(*
this));
420 _boundingSphere.expandBy(computeBound());
422 _boundingSphereComputed =
true;
424 return _boundingSphere;
454 virtual void setThreadSafeRefUnref(
bool threadSafe);
457 virtual void resizeGLObjectBuffers(
unsigned int );
462 virtual void releaseGLObjects(
osg::State* = 0)
const;
503 void setNumChildrenWithCullingDisabled(
unsigned int num);
506 void setNumChildrenWithOccluderNodes(
unsigned int num);
virtual bool isSameKindAs(const Object *obj) const
virtual Object * clone(const CopyOp ©op) const
const ParentList & getParents() const
ComputeBoundingSphereCallback * getComputeBoundingSphereCallback()
virtual const Drawable * asDrawable() const
unsigned int getNumChildrenWithCullingDisabled() const
virtual Object * cloneType() const
const Group * getParent(unsigned int i) const
Callback * getUpdateCallback()
virtual const Camera * asCamera() const
unsigned int getNumChildrenWithOccluderNodes() const
void addUpdateCallback(Callback *nc)
Callback * getEventCallback()
ComputeBoundingSphereCallback(const ComputeBoundingSphereCallback &, const CopyOp &)
void removeEventCallback(Callback *nc)
NodeMask getNodeMask() const
virtual const osgTerrain::Terrain * asTerrain() const
std::vector< Group * > ParentList
BoundingSphere _initialBound
virtual osgTerrain::Terrain * asTerrain()
ref_ptr< StateSet > _stateset
const BoundingSphere & getBound() const
ref_ptr< Callback > _eventCallback
unsigned int _numChildrenRequiringEventTraversal
Callback * getCullCallback()
void setNumChildrenRequiringEventTraversal(unsigned int num)
void setComputeBoundingSphereCallback(ComputeBoundingSphereCallback *callback)
bool _boundingSphereComputed
const Callback * getCullCallback() const
void addCullCallback(Callback *nc)
virtual const Node * asNode() const
unsigned int getNumParents() const
virtual BoundingSphere computeBound(const osg::Node &) const
unsigned int getNumChildrenRequiringUpdateTraversal() const
ComputeBoundingSphereCallback()
virtual Geode * asGeode()
#define META_Object(library, name)
std::vector< Matrix > MatrixList
ref_ptr< ComputeBoundingSphereCallback > _computeBoundCallback
bool getCullingActive() const
const BoundingSphere & getInitialBound() const
ref_ptr< Callback > _cullCallback
unsigned int getNumChildrenRequiringEventTraversal() const
const Callback * getEventCallback() const
unsigned int _numChildrenRequiringUpdateTraversal
const Callback * getUpdateCallback() const
virtual const char * className() const
virtual const Group * asGroup() const
void setNestedCallback(osg::Callback *cb)
void removeCullCallback(Callback *nc)
std::vector< std::string > DescriptionList
virtual const char * libraryName() const
BoundingSphere _boundingSphere
virtual Transform * asTransform()
unsigned int _numChildrenWithOccluderNodes
osg::Callback * getNestedCallback()
virtual Switch * asSwitch()
std::vector< NodePath > NodePathList
ref_ptr< Callback > _updateCallback
void setNodeMask(NodeMask nm)
virtual const Geode * asGeode() const
virtual Drawable * asDrawable()
const ComputeBoundingSphereCallback * getComputeBoundingSphereCallback() const
unsigned int _numChildrenWithCullingDisabled
void setNumChildrenRequiringUpdateTraversal(unsigned int num)
virtual Camera * asCamera()
virtual void traverse(NodeVisitor &)
virtual const Geometry * asGeometry() const
bool isCullingActive() const
BoundingSphered BoundingSphere
virtual Geometry * asGeometry()
Group * getParent(unsigned int i)
void setCullCallback(Callback *nc)
void setInitialBound(const osg::BoundingSphere &bsphere)
virtual const Switch * asSwitch() const
const osg::StateSet * getStateSet() const
virtual Group * asGroup()
void expandBy(const vector_type &v)
void addEventCallback(Callback *nc)
osg::StateSet * getStateSet()
std::vector< Node * > NodePath
virtual const Transform * asTransform() const
void removeUpdateCallback(Callback *nc)