Added asUpdate/Cull/EventVisitor and asCamera/asDrawable to osg::Object and usage of these within the code base to avoid dynamic_cast<> usage.
This commit is contained in:
@@ -18,6 +18,10 @@
|
||||
#include <osg/Matrix>
|
||||
#include <osg/FrameStamp>
|
||||
|
||||
|
||||
namespace osgUtil { class UpdateVisitor; class CullVisitor; class IntersectionVisitor; }
|
||||
namespace osgGA { class EventVisitor; }
|
||||
|
||||
namespace osg {
|
||||
|
||||
class Billboard;
|
||||
@@ -44,6 +48,10 @@ class CameraView;
|
||||
class Drawable;
|
||||
class Geometry;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
const unsigned int UNINITIALIZED_FRAME_NUMBER=0xffffffff;
|
||||
|
||||
#define META_NodeVisitor(library, name) \
|
||||
@@ -104,6 +112,40 @@ class OSG_EXPORT NodeVisitor : public virtual Object
|
||||
* Equivalent to dynamic_cast<const NodeVisitor*>(this).*/
|
||||
virtual const NodeVisitor* asNodeVisitor() const { return this; }
|
||||
|
||||
/** Convert 'this' into a osgUtil::UpdateVisitor pointer if Object is a osgUtil::UpdateVisitor, otherwise return 0.
|
||||
* Equivalent to dynamic_cast<osgUtil::UpdateVisitor*>(this).*/
|
||||
virtual osgUtil::UpdateVisitor* asUpdateVisitor() { return 0; }
|
||||
|
||||
/** convert 'const this' into a const osgUtil::UpdateVisitor pointer if Object is a osgUtil::UpdateVisitor, otherwise return 0.
|
||||
* Equivalent to dynamic_cast<const osgUtil::UpdateVisitor*>(this).*/
|
||||
virtual const osgUtil::UpdateVisitor* asUpdateVisitor() const { return 0; }
|
||||
|
||||
/** Convert 'this' into a osgUtil::CullVisitor pointer if Object is a osgUtil::CullVisitor, otherwise return 0.
|
||||
* Equivalent to dynamic_cast<osgUtil::CullVisitor*>(this).*/
|
||||
virtual osgUtil::CullVisitor* asCullVisitor() { return 0; }
|
||||
|
||||
/** convert 'const this' into a const osgUtil::CullVisitor pointer if Object is a osgUtil::CullVisitor, otherwise return 0.
|
||||
* Equivalent to dynamic_cast<const osgUtil::CullVisitor*>(this).*/
|
||||
virtual const osgUtil::CullVisitor* asCullVisitor() const { return 0; }
|
||||
|
||||
/** Convert 'this' into a osgGA::EventVisitor pointer if Object is a osgGA::EventVisitor, otherwise return 0.
|
||||
* Equivalent to dynamic_cast<osgGA::EventVisitor*>(this).*/
|
||||
virtual osgGA::EventVisitor* asEventVisitor() { return 0; }
|
||||
|
||||
/** convert 'const this' into a const osgGA::EventVisitor pointer if Object is a osgGA::EventVisitor, otherwise return 0.
|
||||
* Equivalent to dynamic_cast<const osgGA::EventVisitor*>(this).*/
|
||||
virtual const osgGA::EventVisitor* asEventVisitor() const { return 0; }
|
||||
|
||||
/** Convert 'this' into a osgUtil::IntersectionVisitor pointer if Object is a IntersectionVisitor, otherwise return 0.
|
||||
* Equivalent to dynamic_cast<osgUtil::IntersectionVisitor*>(this).*/
|
||||
virtual osgUtil::IntersectionVisitor* asIntersectionVisitor() { return 0; }
|
||||
|
||||
/** convert 'const this' into a const osgUtil::IntersectionVisitor pointer if Object is a IntersectionVisitor, otherwise return 0.
|
||||
* Equivalent to dynamic_cast<const osgUtil::IntersectionVisitor*>(this).*/
|
||||
virtual const osgUtil::IntersectionVisitor* asIntersectionVisitor() const { return 0; }
|
||||
|
||||
|
||||
|
||||
|
||||
/** Method to call to reset visitor. Useful if your visitor accumulates
|
||||
state during a traversal, and you plan to reuse the visitor.
|
||||
|
||||
@@ -31,6 +31,8 @@ class Node;
|
||||
class NodeVisitor;
|
||||
class StateAttribute;
|
||||
class Uniform;
|
||||
class Drawable;
|
||||
class Camera;
|
||||
class Callback;
|
||||
class CallbackObject;
|
||||
|
||||
@@ -136,6 +138,14 @@ class OSG_EXPORT Object : public Referenced
|
||||
* Equivalent to dynamic_cast<const Uniform*>(this).*/
|
||||
virtual const Uniform* asUniform() const { return 0; }
|
||||
|
||||
/** Convert 'this' into a Camera pointer if Node is a Camera, otherwise return 0.
|
||||
* Equivalent to dynamic_cast<Camera*>(this).*/
|
||||
virtual Camera* asCamera() { return 0; }
|
||||
|
||||
/** convert 'const this' into a const Camera pointer if Node is a Camera, otherwise return 0.
|
||||
* Equivalent to dynamic_cast<const Camera*>(this).*/
|
||||
virtual const Camera* asCamera() const { return 0; }
|
||||
|
||||
/** Convert 'this' into a Drawable pointer if Object is a Drawable, otherwise return 0.
|
||||
* Equivalent to dynamic_cast<Drawable*>(this).*/
|
||||
virtual Drawable* asDrawable() { return 0; }
|
||||
|
||||
@@ -1744,7 +1744,7 @@ class OSG_EXPORT State : public Referenced
|
||||
{
|
||||
if (as.last_applied_attribute != attribute)
|
||||
{
|
||||
if (!as.global_default_attribute.valid()) as.global_default_attribute = dynamic_cast<StateAttribute*>(attribute->cloneType());
|
||||
if (!as.global_default_attribute.valid()) as.global_default_attribute = attribute->cloneType()->asStateAttribute();
|
||||
|
||||
as.last_applied_attribute = attribute;
|
||||
attribute->apply(*this);
|
||||
@@ -1770,7 +1770,7 @@ class OSG_EXPORT State : public Referenced
|
||||
{
|
||||
if (setActiveTextureUnit(unit))
|
||||
{
|
||||
if (!as.global_default_attribute.valid()) as.global_default_attribute = dynamic_cast<StateAttribute*>(attribute->cloneType());
|
||||
if (!as.global_default_attribute.valid()) as.global_default_attribute = attribute->cloneType()->asStateAttribute();
|
||||
|
||||
as.last_applied_attribute = attribute;
|
||||
attribute->apply(*this);
|
||||
|
||||
Reference in New Issue
Block a user