osg::IntersectAction Class Reference
[Action]

IntersectAction class. More...

#include <OSGIntersectAction.h>

Inheritance diagram for osg::IntersectAction:

osg::Action

List of all members.

Public Types

enum  ResultE { Continue, Skip, Quit }
typedef ArgsCollector< Action * > FunctorArgs
typedef TypedFunctor2Base
< ResultE, CPtrRefCallArg
< CNodePtr >, FunctorArgs
Functor

Public Member Functions

IntersectActionoperator= (const IntersectAction &source)
virtual ~IntersectAction (void)
 Destructor.
void setLine (const Line &line, const Real32 maxdist=Inf)
const LinegetLine (void) const
 Constructor.
Real32 getMaxDist (void) const
bool didHit (void) const
Real32 getHitT (void) const
Pnt3f getHitPoint (void) const
Vec3f getHitNormal (void) const
NodePtr getHitObject (void) const
Int32 getHitTriangle (void) const
Action::ResultE setEnterLeave (Real32 enter, Real32 leave)
void setHit (Real32 t, NodePtr obj, Int32 triIndex, Vec3f &normal)
void scale (Real32 s)
bool operator< (const IntersectAction &other) const
 assignment
bool operator== (const IntersectAction &other) const
 equal
bool operator!= (const IntersectAction &other) const
 unequal
void registerEnterFunction (const FieldContainerType &type, const Functor &func)
void registerLeaveFunction (const FieldContainerType &type, const Functor &func)
virtual ResultE apply (std::vector< NodePtr >::iterator begin, std::vector< NodePtr >::iterator end)
virtual ResultE apply (NodePtr node)
NodePtr getActNode (void)
UInt32 getNNodes (void) const
const NodePtr getNode (int index)
void addNode (NodePtr node)
void useNodeList (void)
UInt32 getTravMask (void) const
void setTravMask (UInt32 val)
bool operator< (const Action &other)
 assignment
bool operator== (const Action &other)
 equal
bool operator!= (const Action &other)
 unequal

Static Public Member Functions

static const char * getClassname (void)
static IntersectActioncreate (void)
 create a new action
static IntersectActioncreate (const Line &line, const Real32 maxdist=Inf)
 create a new action
static void setPrototype (IntersectAction *proto)
static IntersectActiongetPrototype (void)
static void registerEnterDefault (const FieldContainerType &type, const Action::Functor &func)
static void registerLeaveDefault (const FieldContainerType &type, const Action::Functor &func)
static void setPrototype (Action *proto)

Protected Member Functions

 IntersectAction (void)
 Constructor.
 IntersectAction (const IntersectAction &source)
virtual Action::ResultE start (void)
virtual std::vector< Functor > * getDefaultEnterFunctors (void)
virtual std::vector< Functor > * getDefaultLeaveFunctors (void)
ResultE callEnter (NodePtr node)
ResultE callLeave (NodePtr node)
virtual ResultE stop (ResultE res)
ResultE recurse (NodePtr node)
ResultE callNewList (void)
void setActNode (NodePtr node)

Static Protected Member Functions

static ResultE _defaultEnterFunction (CNodePtr &node, Action *action)
static ResultE _defaultLeaveFunction (CNodePtr &node, Action *action)

Protected Attributes

std::vector< Functor_enterFunctors
std::vector< Functor_leaveFunctors

Private Types

typedef Action Inherited

Private Attributes

Line _line
Real32 _maxdist
bool _hit
Real32 _enterT
Real32 _leaveT
Real32 _hitT
NodePtr _hitObject
Int32 _hitTriangle
Vec3f _hitNormal

Static Private Attributes

static char cvsid [] = "@(#)$Id: OSGIntersectAction.cpp,v 1.10 2001/10/15 04:52:15 vossg Exp $"
static IntersectAction_prototype = NULL
static std::vector< Functor > * _defaultEnterFunctors
static std::vector< Functor > * _defaultLeaveFunctors


Detailed Description

The intersect action class.

Definition at line 74 of file OSGIntersectAction.h.


Member Typedef Documentation

Definition at line 212 of file OSGIntersectAction.h.

Definition at line 95 of file OSGAction.h.

Definition at line 99 of file OSGAction.h.


Member Enumeration Documentation

enum osg::Action::ResultE [inherited]

Enumerator:
Continue 
Skip 
Quit 

Definition at line 87 of file OSGAction.h.

00088     {   
00089         Continue,   // continue with my children
00090         Skip,       // skip my children
00091         // really needed? Cancel, // skip my brothers, go one step up
00092         Quit        // forget it, you're done
00093     };


Constructor & Destructor Documentation

IntersectAction::~IntersectAction ( void   )  [virtual]

Definition at line 226 of file OSGIntersectAction.cpp.

00227 {
00228 }

IntersectAction::IntersectAction ( void   )  [protected]

Definition at line 166 of file OSGIntersectAction.cpp.

References _defaultEnterFunctors, _defaultLeaveFunctors, osg::Action::_enterFunctors, and osg::Action::_leaveFunctors.

Referenced by create().

00166                                      :
00167     _line(), _maxdist(), 
00168     _hit(false), _enterT(-1), _leaveT(-1), _hitT(-1), _hitObject(),
00169     _hitTriangle(-1)
00170 {
00171     if ( _defaultEnterFunctors )
00172         _enterFunctors = *_defaultEnterFunctors;
00173 
00174     if ( _defaultLeaveFunctors )
00175         _leaveFunctors = *_defaultLeaveFunctors;
00176 }

IntersectAction::IntersectAction ( const IntersectAction source  )  [protected]

Definition at line 179 of file OSGIntersectAction.cpp.

00179                                                                 :
00180     Inherited( source ),
00181     _line( source._line ), _maxdist( source._maxdist ), 
00182     _hit(source._hit), _enterT(source._enterT), _leaveT(source._leaveT), 
00183     _hitT(source._hitT), _hitObject(source._hitObject),
00184     _hitTriangle(source._hitTriangle)
00185 {
00186 }


Member Function Documentation

static const char* osg::IntersectAction::getClassname ( void   )  [inline, static]

Reimplemented from osg::Action.

Definition at line 90 of file OSGIntersectAction.h.

00090 { return "IntersectAction"; };

IntersectAction * IntersectAction::create ( void   )  [static]

Reimplemented from osg::Action.

Definition at line 192 of file OSGIntersectAction.cpp.

References _prototype, and IntersectAction().

Referenced by osg::Navigator::buttonRelease(), osg::Navigator::getIntersectionPoint(), and osg::WalkNavigator::WalkNavigator().

00193 {
00194     IntersectAction * act;
00195     
00196     if ( _prototype )
00197         act = new IntersectAction( *_prototype );
00198     else
00199         act = new IntersectAction();
00200     
00201     return act;
00202 }

IntersectAction * IntersectAction::create ( const Line line,
const Real32  maxdist = Inf 
) [static]

Definition at line 208 of file OSGIntersectAction.cpp.

References _prototype, IntersectAction(), and setLine().

00210 {
00211     IntersectAction * act;
00212     
00213     if ( _prototype )
00214         act = new IntersectAction( *_prototype );
00215     else
00216         act = new IntersectAction();
00217     
00218     act->setLine( line, maxdist );
00219 
00220     return act;
00221 }

void IntersectAction::setPrototype ( IntersectAction proto  )  [static]

Definition at line 132 of file OSGIntersectAction.cpp.

References _prototype.

00133 {
00134     _prototype = proto;
00135 }

IntersectAction * IntersectAction::getPrototype ( void   )  [static]

Reimplemented from osg::Action.

Definition at line 137 of file OSGIntersectAction.cpp.

References _prototype.

00138 {
00139     return _prototype;
00140 }

IntersectAction& osg::IntersectAction::operator= ( const IntersectAction source  ) 

void IntersectAction::setLine ( const Line line,
const Real32  maxdist = Inf 
)

const Line & osg::IntersectAction::getLine ( void   )  const [inline]

Real32 osg::IntersectAction::getMaxDist ( void   )  const [inline]

bool osg::IntersectAction::didHit ( void   )  const [inline]

Real32 osg::IntersectAction::getHitT ( void   )  const [inline]

Definition at line 118 of file OSGIntersectAction.inl.

References _hitT, and didHit().

Referenced by osg::WalkNavigator::forward(), getHitPoint(), and osg::WalkNavigator::right().

00119 {
00120     if ( ! didHit() )
00121         return -1;
00122     return _hitT;
00123 }

Pnt3f osg::IntersectAction::getHitPoint ( void   )  const [inline]

Definition at line 125 of file OSGIntersectAction.inl.

References _line, didHit(), osg::Line::getDirection(), getHitT(), osg::Line::getPosition(), and osg::PointInterface< ValueTypeT, StorageInterfaceT >::Null.

Referenced by osg::Navigator::buttonRelease(), and osg::Navigator::getIntersectionPoint().

00126 {
00127     if ( ! didHit() )
00128         return Pnt3f::Null;
00129     
00130     Pnt3f res;
00131     res = _line.getPosition() + getHitT() * _line.getDirection();
00132     return res;
00133 }

Vec3f osg::IntersectAction::getHitNormal ( void   )  const [inline]

Definition at line 135 of file OSGIntersectAction.inl.

References _hitNormal, didHit(), and osg::VectorInterface< ValueTypeT, StorageInterfaceT >::Null.

00136 {
00137     if ( ! didHit() )
00138         return Vec3f::Null;
00139     
00140     return _hitNormal;
00141 }

NodePtr osg::IntersectAction::getHitObject ( void   )  const [inline]

Definition at line 143 of file OSGIntersectAction.inl.

References _hitObject, didHit(), and osg::NullFC.

00144 {
00145     if ( ! didHit() )
00146         return NullFC;
00147 
00148     return _hitObject;
00149 }

Int32 osg::IntersectAction::getHitTriangle ( void   )  const [inline]

Definition at line 151 of file OSGIntersectAction.inl.

References _hitTriangle, and didHit().

00152 {
00153     if ( ! didHit() )
00154         return -1;
00155     return _hitTriangle;
00156 }

Action::ResultE IntersectAction::setEnterLeave ( Real32  enter,
Real32  leave 
)

Definition at line 240 of file OSGIntersectAction.cpp.

References _hit, _hitT, _maxdist, osg::Action::Continue, and osg::Action::Skip.

00241 {
00242     if ( leave < 0 || enter > _maxdist ||
00243         ( _hit && enter > _hitT ) )
00244         return Action::Skip;
00245 
00246     return Action::Continue;
00247 }

void IntersectAction::setHit ( Real32  t,
NodePtr  obj,
Int32  triIndex,
Vec3f normal 
)

Definition at line 249 of file OSGIntersectAction.cpp.

References _hit, _hitNormal, _hitObject, _hitT, _hitTriangle, and _maxdist.

Referenced by osg::Geometry::intersect(), and osg::DVRVolume::intersect().

00251 {
00252     if ( t < 0 || t > _hitT || t > _maxdist)
00253         return;
00254         
00255     _hitT = t;
00256     _hitObject = obj;
00257     _hitTriangle = triIndex;
00258     _hitNormal = normal;
00259     _hit = true;
00260 }

void IntersectAction::scale ( Real32  s  ) 

bool IntersectAction::operator< ( const IntersectAction other  )  const

assignment

Definition at line 310 of file OSGIntersectAction.cpp.

00311 {
00312     return this < &other;
00313 }

bool IntersectAction::operator== ( const IntersectAction other  )  const

Definition at line 318 of file OSGIntersectAction.cpp.

00320 {
00321     return false;
00322 }

bool IntersectAction::operator!= ( const IntersectAction other  )  const

Definition at line 327 of file OSGIntersectAction.cpp.

00328 {
00329     return ! (*this == other);
00330 }

void IntersectAction::registerEnterDefault ( const FieldContainerType type,
const Action::Functor func 
) [static]

void IntersectAction::registerLeaveDefault ( const FieldContainerType type,
const Action::Functor func 
) [static]

Reimplemented from osg::Action.

Definition at line 113 of file OSGIntersectAction.cpp.

References osg::Action::_defaultLeaveFunction(), _defaultLeaveFunctors, osg::TypeBase::getId(), and osg::osgTypedFunctionFunctor2CPtrRef().

Referenced by osg::Transform::initMethod(), osg::ScreenGroup::initMethod(), osg::InverseTransform::initMethod(), osg::ComponentTransform::initMethod(), and osg::Billboard::initMethod().

00115 {
00116     if ( ! _defaultLeaveFunctors )
00117         _defaultLeaveFunctors = new std::vector<Action::Functor>;
00118 
00119     while(type.getId() >= _defaultLeaveFunctors->size())
00120     {
00121         _defaultLeaveFunctors->push_back( 
00122             osgTypedFunctionFunctor2CPtrRef<ResultE, 
00123                                             CNodePtr,
00124                                             Action *>(
00125                 &IntersectAction::_defaultLeaveFunction));
00126     }
00127     
00128     (*_defaultLeaveFunctors)[ type.getId() ] = func;
00129 }

Action::ResultE IntersectAction::start ( void   )  [protected, virtual]

Reimplemented from osg::Action.

Definition at line 271 of file OSGIntersectAction.cpp.

References _hit, _hitObject, _hitT, _hitTriangle, osg::Action::Continue, osg::Inf, and osg::NullFC.

00272 {
00273     _hitT = Inf;
00274     _hitObject = NullFC;
00275     _hitTriangle = -1;
00276     _hit = false;
00277     return Continue;
00278 }

std::vector< IntersectAction::Functor > * IntersectAction::getDefaultEnterFunctors ( void   )  [protected, virtual]

Reimplemented from osg::Action.

Definition at line 339 of file OSGIntersectAction.cpp.

References _defaultEnterFunctors.

00340 {
00341     return _defaultEnterFunctors;
00342 }

std::vector< IntersectAction::Functor > * IntersectAction::getDefaultLeaveFunctors ( void   )  [protected, virtual]

Reimplemented from osg::Action.

Definition at line 345 of file OSGIntersectAction.cpp.

References _defaultLeaveFunctors.

00346 {
00347     return _defaultLeaveFunctors;
00348 }

void Action::setPrototype ( Action proto  )  [static, inherited]

Definition at line 119 of file OSGAction.cpp.

References osg::Action::_prototype.

00120 {
00121     _prototype = proto;
00122 }

void Action::registerEnterFunction ( const FieldContainerType type,
const Functor func 
) [inherited]

Definition at line 201 of file OSGAction.cpp.

References osg::Action::_defaultEnterFunction(), osg::Action::_enterFunctors, osg::TypeBase::getId(), and osg::osgTypedFunctionFunctor2CPtrRef().

00203 {
00204     while ( type.getId() >= _enterFunctors.size() )
00205     {
00206         _enterFunctors.push_back(
00207             osgTypedFunctionFunctor2CPtrRef<
00208                 ResultE, 
00209                 CNodePtr,
00210                 Action *                   >(&Action::_defaultEnterFunction));
00211     }
00212     
00213     _enterFunctors[ type.getId() ] = func;
00214 }

void Action::registerLeaveFunction ( const FieldContainerType type,
const Functor func 
) [inherited]

Definition at line 216 of file OSGAction.cpp.

References osg::Action::_defaultLeaveFunction(), osg::Action::_leaveFunctors, osg::TypeBase::getId(), and osg::osgTypedFunctionFunctor2CPtrRef().

00218 {
00219     while ( type.getId() >= _leaveFunctors.size() )
00220     {
00221         _leaveFunctors.push_back(
00222             osgTypedFunctionFunctor2CPtrRef<
00223                 ResultE, 
00224                 CNodePtr,
00225                 Action *                   >(&Action::_defaultLeaveFunction));
00226     }
00227     
00228     _leaveFunctors[ type.getId() ] = func;
00229 }

Action::ResultE Action::apply ( std::vector< NodePtr >::iterator  begin,
std::vector< NodePtr >::iterator  end 
) [virtual, inherited]

Reimplemented in osg::VRMLWriteAction.

Definition at line 235 of file OSGAction.cpp.

References osg::Action::callStart(), osg::Action::callStop(), osg::Action::Continue, osg::NullFC, osg::Action::Quit, osg::Action::recurse(), and SWARNING.

Referenced by osg::VRMLWriteAction::apply(), osg::Action::apply(), osg::Navigator::buttonRelease(), osg::Viewport::draw(), osg::WalkNavigator::forward(), osg::Navigator::getIntersectionPoint(), osg::Viewport::render(), osg::FBOViewport::render(), osg::WalkNavigator::right(), and osg::VRMLWriteAction::write().

00237 {
00238     Action::ResultE res = Continue;
00239     
00240     // call the start function and its' returns
00241     if ( ( res = callStart() ) != Continue )
00242         return res;     
00243     
00244     // call the given nodes
00245     
00246     for ( ; begin != end; begin ++ )
00247     {
00248         if ( *begin == NullFC )
00249         {
00250             SWARNING << "apply: encountered NullNode!" << std::endl;
00251             return Quit;            
00252         }
00253         else
00254         {
00255             res = recurse( *begin );
00256             
00257             if ( res != Continue )
00258                 break;
00259         }
00260     }
00261         
00262     // call the stop function and its' returns
00263     res = callStop( res );  
00264     
00265     return res;
00266 }

Action::ResultE Action::apply ( NodePtr  node  )  [virtual, inherited]

Reimplemented in osg::VRMLWriteAction.

Definition at line 268 of file OSGAction.cpp.

References osg::Action::apply(), osg::NullFC, osg::Action::Quit, and SWARNING.

00269 {
00270     if(node == NullFC)
00271     {
00272         SWARNING << "apply: node is Null!" << std::endl;
00273         return Quit;            
00274     }
00275 
00276     std::vector<NodePtr> nodeList;
00277 
00278     nodeList.push_back(node);
00279 
00280     return apply(nodeList.begin(), nodeList.end());
00281 }

NodePtr osg::Action::getActNode ( void   )  [inline, inherited]

UInt32 osg::Action::getNNodes ( void   )  const [inline, inherited]

Definition at line 92 of file OSGAction.inl.

References osg::Action::_actList, and osg::Action::_actNode.

Referenced by osg::Switch::draw(), osg::DistanceLOD::draw(), osg::Switch::intersect(), and osg::DrawActionBase::selectVisibles().

00093 {
00094     if ( ! _actList )
00095     {
00096         return _actNode->getNChildren();
00097     }
00098     else
00099     {
00100         return (*_actList).size();
00101     }
00102 }

const NodePtr osg::Action::getNode ( int  index  )  [inline, inherited]

Definition at line 67 of file OSGAction.inl.

References osg::Action::_actList, and osg::Action::_actNode.

Referenced by osg::Switch::draw(), osg::DistanceLOD::draw(), osg::Switch::intersect(), and osg::DrawActionBase::selectVisibles().

00068 {
00069     if ( ! _actList )
00070     {
00071         return _actNode->getChild( index );
00072     }
00073     else
00074     {
00075         return (*_actList)[ index ];
00076     }
00077 }

void osg::Action::addNode ( NodePtr  node  )  [inline, inherited]

Definition at line 80 of file OSGAction.inl.

References osg::Action::_newList.

Referenced by osg::Switch::draw(), osg::ProxyGroup::draw(), osg::DistanceLOD::draw(), osg::Switch::intersect(), and osg::DrawActionBase::selectVisibles().

00081 {
00082     _newList.push_back( node );
00083 }

void osg::Action::useNodeList ( void   )  [inline, inherited]

UInt32 osg::Action::getTravMask ( void   )  const [inline, inherited]

Definition at line 106 of file OSGAction.inl.

References osg::Action::_travMask.

Referenced by osg::Action::recurse().

00107 {
00108     return _travMask;
00109 }

void osg::Action::setTravMask ( UInt32  val  )  [inline, inherited]

Definition at line 112 of file OSGAction.inl.

References osg::Action::_travMask.

Referenced by osg::Viewport::draw(), osg::Viewport::render(), and osg::FBOViewport::render().

00113 {
00114     _travMask = val;
00115 }

bool Action::operator< ( const Action other  )  [inherited]

Definition at line 458 of file OSGAction.cpp.

00459 {
00460     return this < &other;
00461 }

bool Action::operator== ( const Action other  )  [inherited]

Definition at line 466 of file OSGAction.cpp.

00467 {
00468     return false;
00469 }

bool Action::operator!= ( const Action other  )  [inherited]

Definition at line 474 of file OSGAction.cpp.

00475 {
00476     return ! (*this == other);
00477 }

Action::ResultE osg::Action::callEnter ( NodePtr  node  )  [inline, protected, inherited]

Definition at line 124 of file OSGAction.inl.

References osg::Action::_defaultEnterFunction(), osg::Action::_enterFunctors, osg::NodePtr::getCore(), osg::Action::getDefaultEnterFunctors(), osg::TypeBase::getId(), and osg::NodeCore::getType().

Referenced by osg::Action::recurse().

00125 {
00126     ResultE result;
00127 
00128     UInt32 uiFunctorIndex = node->getCore()->getType().getId();
00129     CNodePtr cnode(node);
00130 
00131     if ( uiFunctorIndex < _enterFunctors.size() )
00132         result = _enterFunctors[uiFunctorIndex].call(cnode,this);
00133     else if (  getDefaultEnterFunctors() &&
00134                 uiFunctorIndex < getDefaultEnterFunctors()->size() )
00135     {
00136         // field container registered method after this action was instantiated
00137         // copy the new functors from default vector
00138         std::vector<Functor> *defaultEnter = getDefaultEnterFunctors();
00139 
00140         while ( defaultEnter->size() > _enterFunctors.size() )
00141         {
00142             _enterFunctors.push_back( (*defaultEnter)[_enterFunctors.size()] );
00143         }
00144         result = _enterFunctors[uiFunctorIndex].call(cnode,this);
00145     }
00146     else // unknown field container
00147         result = _defaultEnterFunction(cnode,this);
00148 
00149     return result;
00150 }

Action::ResultE osg::Action::callLeave ( NodePtr  node  )  [inline, protected, inherited]

Definition at line 153 of file OSGAction.inl.

References osg::Action::_defaultLeaveFunction(), osg::Action::_leaveFunctors, osg::NodePtr::getCore(), osg::Action::getDefaultLeaveFunctors(), osg::TypeBase::getId(), and osg::NodeCore::getType().

Referenced by osg::Action::recurse().

00154 {
00155     ResultE result;
00156 
00157     UInt32 uiFunctorIndex = node->getCore()->getType().getId();
00158     CNodePtr cnode(node);
00159 
00160     if ( uiFunctorIndex < _leaveFunctors.size() )
00161         result = _leaveFunctors[uiFunctorIndex].call(cnode,this);
00162     else if (   getDefaultLeaveFunctors() &&
00163                 uiFunctorIndex < getDefaultLeaveFunctors()->size() )
00164     {
00165         // field container registered method after this action was instantiated
00166         // copy the new functors from default vector
00167         std::vector<Functor> *defaultLeave = getDefaultLeaveFunctors();
00168 
00169         while ( defaultLeave->size() > _leaveFunctors.size() )
00170         {
00171             _leaveFunctors.push_back( (*defaultLeave)[_leaveFunctors.size()] );
00172         }
00173         result = _leaveFunctors[uiFunctorIndex].call(cnode,this);
00174     }
00175     else // unknown field container
00176         result = _defaultLeaveFunction(cnode,this);
00177 
00178     return result;
00179 }

Action::ResultE Action::stop ( ResultE  res  )  [protected, virtual, inherited]

Reimplemented in osg::DrawActionBase, and osg::RenderAction.

Definition at line 428 of file OSGAction.cpp.

Referenced by osg::Action::callStop().

00429 {
00430     return res;
00431 }

Action::ResultE Action::recurse ( NodePtr  node  )  [protected, inherited]

Definition at line 288 of file OSGAction.cpp.

References osg::Action::_actList, osg::Action::_actNode, osg::Action::_newList, osg::Action::_useNewList, osg::Action::callEnter(), osg::Action::callLeave(), osg::Action::callNewList(), osg::Action::Continue, osg::NodePtr::getCore(), osg::Action::getTravMask(), osg::NullFC, osg::Action::Quit, osg::Action::Skip, and SWARNING.

Referenced by osg::Action::apply(), and osg::Action::callNewList().

00289 {
00290     if ( node == NullFC )
00291         return Continue;
00292 
00293     if((node->getTravMask() & getTravMask()) == 0)
00294         return Continue;
00295 
00296     if(node->getOcclusionMask() & 1)
00297         return Continue;
00298 
00299     NodeCorePtr core = node->getCore();
00300     
00301     if ( core == NullFC )
00302     {
00303         SWARNING << "recurse: core is Null,  don't know what to do!" 
00304                  << std::endl;
00305         return Quit;                    
00306     }
00307     
00308     Action::ResultE result;
00309     
00310     _actList = NULL;
00311     _actNode = node;
00312     _newList.clear();
00313     _useNewList = false;
00314     
00315     result = callEnter( node );
00316 
00317     if ( result != Continue )
00318     {
00319         if ( result == Skip )
00320             return Continue;
00321     
00322         return result;
00323     }
00324     
00325     if ( ! _newList.empty() )
00326     {
00327         result = callNewList();
00328     }
00329     else if ( ! _useNewList ) // new list is empty, but not used?
00330     {
00331         std::vector<NodePtr>::iterator it;
00332 
00333         for ( it = node->getMFChildren()->begin(); it != node->getMFChildren()->end(); it ++ )
00334         {
00335             result = recurse( *it );
00336             
00337             if ( result != Continue )
00338                 break;
00339         }
00340     }   
00341 
00342     _actNode = node;
00343     if ( result == Continue )
00344         result = callLeave( node );
00345     else
00346         callLeave( node );
00347 
00348     if ( result == Skip )
00349         return Continue;
00350         
00351     return result;
00352 }

Action::ResultE Action::callNewList ( void   )  [protected, inherited]

Definition at line 355 of file OSGAction.cpp.

References osg::Action::_actList, osg::Action::_newList, osg::Action::Continue, and osg::Action::recurse().

Referenced by osg::Action::callStart(), osg::Action::callStop(), and osg::Action::recurse().

00356 {
00357     Action::ResultE result = Continue;
00358 
00359     // need to make a copy, because the one in the action is cleared
00360 
00361     std::vector<NodePtr> nodeList;
00362     nodeList.swap(_newList);
00363 
00364     std::vector<NodePtr>::iterator it;
00365 
00366     _actList = &nodeList;
00367 
00368     for(it = nodeList.begin(); it != nodeList.end(); ++it)
00369     {
00370         result = recurse(*it);
00371 
00372         if(result != Continue)
00373             break;
00374     }
00375     
00376     return result;
00377 }

Action::ResultE Action::_defaultEnterFunction ( CNodePtr node,
Action action 
) [static, protected, inherited]

Action::ResultE Action::_defaultLeaveFunction ( CNodePtr node,
Action action 
) [static, protected, inherited]

void osg::Action::setActNode ( NodePtr  node  )  [inline, protected, inherited]

Definition at line 61 of file OSGAction.inl.

References osg::Action::_actNode.

Referenced by osg::RenderAction::draw().

00062 {
00063     _actNode = node;
00064 }


Member Data Documentation

char IntersectAction::cvsid = "@(#)$Id: OSGIntersectAction.cpp,v 1.10 2001/10/15 04:52:15 vossg Exp $" [static, private]

Reimplemented from osg::Action.

Definition at line 226 of file OSGIntersectAction.h.

IntersectAction * IntersectAction::_prototype = NULL [static, private]

Reimplemented from osg::Action.

Definition at line 229 of file OSGIntersectAction.h.

Referenced by create(), getPrototype(), and setPrototype().

std::vector< Action::Functor > * IntersectAction::_defaultEnterFunctors [static, private]

Reimplemented from osg::Action.

Definition at line 232 of file OSGIntersectAction.h.

Referenced by getDefaultEnterFunctors(), IntersectAction(), and registerEnterDefault().

std::vector< Action::Functor > * IntersectAction::_defaultLeaveFunctors [static, private]

Reimplemented from osg::Action.

Definition at line 233 of file OSGIntersectAction.h.

Referenced by getDefaultLeaveFunctors(), IntersectAction(), and registerLeaveDefault().

Definition at line 246 of file OSGIntersectAction.h.

Referenced by getHitPoint(), getLine(), and setLine().

Definition at line 249 of file OSGIntersectAction.h.

Referenced by getMaxDist(), scale(), setEnterLeave(), setHit(), and setLine().

Definition at line 253 of file OSGIntersectAction.h.

Referenced by didHit(), setEnterLeave(), setHit(), and start().

Definition at line 255 of file OSGIntersectAction.h.

Definition at line 256 of file OSGIntersectAction.h.

Definition at line 259 of file OSGIntersectAction.h.

Referenced by getHitT(), scale(), setEnterLeave(), setHit(), and start().

Definition at line 261 of file OSGIntersectAction.h.

Referenced by getHitObject(), setHit(), and start().

Definition at line 263 of file OSGIntersectAction.h.

Referenced by getHitTriangle(), setHit(), and start().

Definition at line 265 of file OSGIntersectAction.h.

Referenced by getHitNormal(), and setHit().

std::vector<Functor> osg::Action::_enterFunctors [protected, inherited]

std::vector<Functor> osg::Action::_leaveFunctors [protected, inherited]


The documentation for this class was generated from the following files:

Generated on Mon Mar 17 12:04:00 2008 for OpenSG by  doxygen 1.5.5