osg::DrawAction Class Reference
[Action]

DrawAction class. More...

#include <OSGDrawAction.h>

Inheritance diagram for osg::DrawAction:
osg::DrawActionBase 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

virtual ~DrawAction (void)
 Destructor.
UInt32 getLightCount (void) const
 Constructor.
void incLightCount (void)
void decLightCount (void)
virtual Action::ResultE start (void)
bool isVisible (Node *node)
bool operator< (const DrawAction &other) const
bool operator== (const DrawAction &other) const
 equal
bool operator!= (const DrawAction &other) const
 unequal
ViewportgetViewport (void) const
void setViewport (Viewport *viewport)
CameragetCamera (void) const
void setCamera (Camera *cam)
const MatrixgetCameraToWorld (void)
BackgroundgetBackground (void) const
void setBackground (Background *background)
WindowgetWindow (void) const
void setWindow (Window *window)
StatCollectorgetStatistics (void)
void setStatistics (StatCollector *stat)
bool hasOwnStat (void)
bool getFrustumCulling (void) const
void setFrustumCulling (bool val=true)
bool getVolumeDrawing (void) const
void setVolumeDrawing (bool val=false)
bool getAutoFrustum (void) const
void setAutoFrustum (bool val=true)
const FrustumVolumegetFrustum (void) const
void setFrustum (FrustumVolume &frust)
UInt32 selectVisibles (void)
MaterialgetMaterial (void) const
NodePtr getMaterialNode (void) const
void setMaterial (Material *pMaterial, NodePtr node)
virtual Action::ResultE stop (Action::ResultE res)
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)
ResultE callEnter (NodePtr node)
ResultE callLeave (NodePtr node)
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 DrawActioncreate (void)
 create a new action
static void setPrototype (DrawAction *proto)
static DrawActiongetPrototype (void)
static void registerEnterDefault (const FieldContainerType &type, const Action::Functor &func)
static void registerLeaveDefault (const FieldContainerType &type, const Action::Functor &func)

Static Public Attributes

static StatElemDesc< StatTimeElemstatTravTime
static StatElemDesc< StatIntElemstatCullTestedNodes
static StatElemDesc< StatIntElemstatCulledNodes

Protected Member Functions

 DrawAction (void)
 Constructor.
 DrawAction (const DrawAction &source)
 Copy-Constructor.
virtual std::vector< Functor > * getDefaultEnterFunctors (void)
virtual std::vector< Functor > * getDefaultLeaveFunctors (void)
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

Camera_camera
Background_background
Window_window
Viewport_viewport
StatCollector_statistics
bool _ownStat
Material_pMaterial
NodePtr _pMaterialNode
bool _frustumCulling
bool _volumeDrawing
bool _autoFrustum
FrustumVolume _frustum
Matrix _mCameraToWorld
std::vector< Functor_enterFunctors
std::vector< Functor_leaveFunctors

Private Types

typedef DrawActionBase Inherited

Private Member Functions

DrawActionoperator= (const DrawAction &source)
 assignment

Private Attributes

UInt32 _lightCount

Static Private Attributes

static char cvsid [] = "@(#)$Id: $"
static DrawAction_prototype = NULL
static std::vector< Functor > * _defaultEnterFunctors = NULL
static std::vector< Functor > * _defaultLeaveFunctors = NULL

Detailed Description

The draw action class.

Definition at line 74 of file OSGDrawAction.h.


Member Typedef Documentation

Reimplemented from osg::DrawActionBase.

Definition at line 182 of file OSGDrawAction.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

DrawAction::~DrawAction ( void   )  [virtual]

Definition at line 208 of file OSGDrawAction.cpp.

00209 {
00210 }

DrawAction::DrawAction ( void   )  [protected]

Definition at line 168 of file OSGDrawAction.cpp.

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

Referenced by create().

00168                            :
00169      Inherited (),
00170     _lightCount(0)
00171 {
00172     if ( _defaultEnterFunctors )
00173         _enterFunctors = *_defaultEnterFunctors;
00174 
00175     if ( _defaultLeaveFunctors )
00176         _leaveFunctors = *_defaultLeaveFunctors;
00177 }

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

Definition at line 183 of file OSGDrawAction.cpp.

00183                                                   :
00184      Inherited (source),
00185     _lightCount(source._lightCount)
00186 {
00187 }


Member Function Documentation

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

Reimplemented from osg::Action.

Definition at line 90 of file OSGDrawAction.h.

00090 { return "DrawAction"; };

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

Reimplemented from osg::Action.

Definition at line 192 of file OSGDrawAction.cpp.

References _prototype, and DrawAction().

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

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

Reimplemented from osg::Action.

Definition at line 134 of file OSGDrawAction.cpp.

References _prototype.

00135 {
00136     _prototype = proto;
00137 }

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

Reimplemented from osg::Action.

Definition at line 139 of file OSGDrawAction.cpp.

References _prototype.

00140 {
00141     return _prototype;
00142 }

void DrawAction::registerEnterDefault ( const FieldContainerType type,
const Action::Functor func 
) [static]
void DrawAction::registerLeaveDefault ( const FieldContainerType type,
const Action::Functor func 
) [static]
UInt32 osg::DrawAction::getLightCount ( void   )  const [inline]
void osg::DrawAction::incLightCount ( void   )  [inline]

Definition at line 111 of file OSGDrawAction.inl.

References _lightCount.

Referenced by osg::Light::drawEnter().

00112 {
00113     ++_lightCount;
00114 }

void osg::DrawAction::decLightCount ( void   )  [inline]

Definition at line 117 of file OSGDrawAction.inl.

References _lightCount.

Referenced by osg::Light::drawLeave().

00118 {
00119     --_lightCount;
00120 }

Action::ResultE DrawAction::start ( void   )  [virtual]

Reimplemented from osg::DrawActionBase.

Definition at line 217 of file OSGDrawAction.cpp.

References _lightCount, osg::Action::Continue, and osg::DrawActionBase::start().

00218 {
00219     Inherited::start();
00220     
00221     _lightCount = 0;
00222     
00223     return Continue;
00224 }

bool DrawAction::isVisible ( Node node  )  [virtual]

Implements osg::DrawActionBase.

Definition at line 226 of file OSGDrawAction.cpp.

References osg::DrawActionBase::_frustum, osg::StatCollector::getElem(), osg::DrawActionBase::getFrustumCulling(), osg::DrawActionBase::getStatistics(), osg::Node::getWorldVolume(), osg::FrustumVolume::intersect(), osg::DrawActionBase::statCulledNodes, and osg::DrawActionBase::statCullTestedNodes.

00227 {
00228     if ( getFrustumCulling() == false )
00229         return true;
00230         
00231     getStatistics()->getElem(statCullTestedNodes)->inc();
00232     
00233 #ifndef OSG_2_PREP
00234     DynamicVolume vol;
00235 #else
00236     BoxVolume     vol;
00237 #endif
00238     node->getWorldVolume( vol );
00239 
00240     if ( _frustum.intersect( vol ) )
00241     {
00242 // fprintf(stderr,"%p: node 0x%p vis\n", Thread::getCurrent(), node);
00243         return true;
00244     }
00245     
00246     getStatistics()->getElem(statCulledNodes)->inc();
00247 
00248 // fprintf(stderr,"%p: node 0x%p invis\n", Thread::getCurrent(), node);
00249 // _frustum.dump();            
00250     return false;
00251 }

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

assignment

Definition at line 282 of file OSGDrawAction.cpp.

00283 {
00284     return this < &other;
00285 }

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

Definition at line 290 of file OSGDrawAction.cpp.

00291 {
00292     return false;
00293 }

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

Definition at line 298 of file OSGDrawAction.cpp.

00299 {
00300     return ! (*this == other);
00301 }

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

Implements osg::DrawActionBase.

Definition at line 309 of file OSGDrawAction.cpp.

References _defaultEnterFunctors.

00310 {
00311     return _defaultEnterFunctors;
00312 }

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

Implements osg::DrawActionBase.

Definition at line 314 of file OSGDrawAction.cpp.

References _defaultLeaveFunctors.

00315 {
00316     return _defaultLeaveFunctors;
00317 }

DrawAction& osg::DrawAction::operator= ( const DrawAction source  )  [private]

Reimplemented from osg::DrawActionBase.

Viewport * osg::DrawActionBase::getViewport ( void   )  const [inline, inherited]
void DrawActionBase::setViewport ( Viewport viewport  )  [inherited]

Definition at line 274 of file OSGDrawActionBase.cpp.

References osg::DrawActionBase::_viewport.

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

00275 {
00276     _viewport = viewport;
00277 }

Camera * osg::DrawActionBase::getCamera ( void   )  const [inline, inherited]
void DrawActionBase::setCamera ( Camera cam  )  [inherited]

Definition at line 279 of file OSGDrawActionBase.cpp.

References osg::DrawActionBase::_camera.

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

00280 {
00281     _camera = cam;
00282 }

const Matrix & osg::DrawActionBase::getCameraToWorld ( void   )  [inline, inherited]
Background * osg::DrawActionBase::getBackground ( void   )  const [inline, inherited]

Definition at line 107 of file OSGDrawActionBase.inl.

References osg::DrawActionBase::_background.

00108 {
00109     return _background;
00110 }

void DrawActionBase::setBackground ( Background background  )  [inherited]

Definition at line 284 of file OSGDrawActionBase.cpp.

References osg::DrawActionBase::_background.

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

00285 {
00286     _background = background;
00287 }

Window * osg::DrawActionBase::getWindow ( void   )  const [inline, inherited]

Definition at line 113 of file OSGDrawActionBase.inl.

References osg::DrawActionBase::_window.

Referenced by osg::TextureTransformChunk::activate(), osg::TextureChunk::activate(), osg::TexGenChunk::activate(), osg::SHLParameterChunk::activate(), osg::SHLChunk::activate(), osg::RegisterCombinersChunk::activate(), osg::ProgramChunk::activate(), osg::PointChunk::activate(), osg::DVRSimpleLUTShader::activate(), osg::CubeTextureChunk::activate(), osg::BlendChunk::activate(), osg::DVRIsoShader::activate_NVRegisterCombinerShading(), osg::DVRSimpleLUTShader::brickActivate(), osg::TextureTransformChunk::changeFrom(), osg::TextureChunk::changeFrom(), osg::TexGenChunk::changeFrom(), osg::SHLParameterChunk::changeFrom(), osg::SHLChunk::changeFrom(), osg::ProgramChunk::changeFrom(), osg::PointChunk::changeFrom(), osg::CubeTextureChunk::changeFrom(), osg::BlendChunk::changeFrom(), osg::TextureGrabBackground::clear(), osg::SkyBackground::clear(), osg::TextureTransformChunk::deactivate(), osg::TextureChunk::deactivate(), osg::TexGenChunk::deactivate(), osg::SHLChunk::deactivate(), osg::ProgramChunk::deactivate(), osg::PointChunk::deactivate(), osg::DVRSimpleLUTShader::deactivate(), osg::CubeTextureChunk::deactivate(), osg::BlendChunk::deactivate(), osg::TextureGrabForeground::draw(), drawShaderStrips< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait >::draw(), drawShaderQuads< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait >::draw(), osg::DVRVolume::draw(), osg::RenderAction::drawDepth(), drawShaderStrips< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait >::drawIndexed(), drawShaderQuads< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait >::drawIndexed(), osg::Surface::drawPrimitives(), osg::Slices::drawPrimitives(), osg::Geometry::drawPrimitives(), osg::DVRMtexLUTShader::initCombiners(), osg::DVRIsoShader::initCombiners_Diffuse2Combiners(), osg::DVRIsoShader::initCombiners_DiffuseMultiCombiners(), osg::DVRIsoShader::initCombiners_IsoSurfaceDiffuse(), osg::DVRIsoShader::initCombiners_IsoSurfaceSpecular(), osg::DVRIsoShader::initCombiners_Specular2Combiners(), osg::DVRIsoShader::initCombiners_SpecularMultiCombiners(), osg::DVRSimpleLUTShader::initialize(), osg::DVRMtexLUTShader::initialize(), osg::DVRVolume::initializeClipObjects(), osg::DVRSimpleLUTShader::isModeSupported(), osg::DVRIsoShader::isModeSupported(), osg::BrickSet::reloadBrickTextures(), osg::FBOViewport::render(), osg::DVRMtexLUTShader::renderSlice(), osg::DVRIsoShader::renderSlice_NVRegisterCombinerShading(), osg::DVRSimpleLUTShader::setupAlphaCorrectionRegisterCombiners(), osg::DVRIsoShader::setupCombinerParametersDiffuse(), osg::DVRIsoShader::setupCombinerParametersSpecular(), osg::SHLChunk::update(), osg::SHLChunk::updateActiveLightsCount(), osg::SHLChunk::updateActiveLightsMask(), osg::SHLChunk::updateCameraOrientation(), osg::SHLChunk::updateCameraPosition(), osg::SHLChunk::updateClusterId(), osg::SHLChunk::updateInvViewMatrix(), osg::SHLChunk::updateInvWorldMatrix(), osg::SHLChunk::updateLight0Active(), osg::SHLChunk::updateLight1Active(), osg::SHLChunk::updateLight2Active(), osg::SHLChunk::updateLight3Active(), osg::SHLChunk::updateLight4Active(), osg::SHLChunk::updateLight5Active(), osg::SHLChunk::updateLight6Active(), osg::SHLChunk::updateLight7Active(), osg::SHLChunk::updateNearFar(), osg::SHLChunk::updateOSGParameters(), osg::SHLChunk::updateStereoLeftEye(), osg::SHLChunk::updateTransInvWorldMatrix(), osg::SHLChunk::updateViewMatrix(), and osg::SHLChunk::updateWorldMatrix().

00114 {
00115     return _window;
00116 }

void DrawActionBase::setWindow ( Window window  )  [inherited]
StatCollector * osg::DrawActionBase::getStatistics ( void   )  [inline, inherited]
void DrawActionBase::setStatistics ( StatCollector stat  )  [inherited]

Definition at line 294 of file OSGDrawActionBase.cpp.

References osg::DrawActionBase::_ownStat, and osg::DrawActionBase::_statistics.

Referenced by osg::SimpleSceneManager::setStatistics().

00295 {
00296 #if 0 // Altered for last frame time
00297     _statistics = statistics;
00298     _ownStat = false;
00299 #else
00300     if (_ownStat) {
00301        delete _statistics;
00302     }
00303     _statistics = statistics;
00304     _ownStat = false;
00305 #endif
00306 }

bool osg::DrawActionBase::hasOwnStat ( void   )  [inline, inherited]

Definition at line 160 of file OSGDrawActionBase.inl.

References osg::DrawActionBase::_ownStat.

00161 {
00162     return _ownStat;
00163 }

bool osg::DrawActionBase::getFrustumCulling ( void   )  const [inline, inherited]
void DrawActionBase::setFrustumCulling ( bool  val = true  )  [inherited]

Definition at line 312 of file OSGDrawActionBase.cpp.

References osg::DrawActionBase::_frustumCulling.

Referenced by osg::RenderOptions::activateOptions().

00313 {
00314     _frustumCulling = frustumCulling;
00315 }

bool osg::DrawActionBase::getVolumeDrawing ( void   )  const [inline, inherited]
void DrawActionBase::setVolumeDrawing ( bool  val = false  )  [inherited]

Definition at line 328 of file OSGDrawActionBase.cpp.

References osg::DrawActionBase::_volumeDrawing.

00329 {
00330     _volumeDrawing = volumeDrawing;
00331 }

bool osg::DrawActionBase::getAutoFrustum ( void   )  const [inline, inherited]

Definition at line 137 of file OSGDrawActionBase.inl.

References osg::DrawActionBase::_autoFrustum.

Referenced by osg::DrawActionBase::start().

00138 {
00139     return _autoFrustum;
00140 }

void DrawActionBase::setAutoFrustum ( bool  val = true  )  [inherited]

Definition at line 320 of file OSGDrawActionBase.cpp.

References osg::DrawActionBase::_autoFrustum.

00321 {
00322     _autoFrustum = autoFrustum;
00323 }

const FrustumVolume & osg::DrawActionBase::getFrustum ( void   )  const [inline, inherited]

Definition at line 143 of file OSGDrawActionBase.inl.

References osg::DrawActionBase::_frustum.

00144 {
00145     return _frustum;
00146 }

void DrawActionBase::setFrustum ( FrustumVolume frust  )  [inherited]

Definition at line 335 of file OSGDrawActionBase.cpp.

References osg::DrawActionBase::_frustum.

00336 {
00337     _frustum = frustum;
00338 }

UInt32 DrawActionBase::selectVisibles ( void   )  [inherited]
Material * osg::DrawActionBase::getMaterial ( void   )  const [inline, inherited]
NodePtr osg::DrawActionBase::getMaterialNode ( void   )  const [inline, inherited]

Definition at line 172 of file OSGDrawActionBase.inl.

References osg::DrawActionBase::_pMaterialNode.

Referenced by osg::MaterialGroup::drawLeave(), and osg::MaterialGroup::renderLeave().

00173 {
00174     return _pMaterialNode;
00175 }

void DrawActionBase::setMaterial ( Material pMaterial,
NodePtr  node 
) [inherited]
Action::ResultE DrawActionBase::stop ( Action::ResultE  res  )  [virtual, inherited]

Reimplemented from osg::Action.

Reimplemented in osg::RenderAction.

Definition at line 244 of file OSGDrawActionBase.cpp.

References osg::DrawActionBase::_frustum, osg::DrawActionBase::_ownStat, osg::DrawActionBase::_statistics, osg::drawVolume(), osg::StatCollector::getElem(), osg::DrawActionBase::getStatistics(), osg::DrawActionBase::getVolumeDrawing(), and osg::DrawActionBase::statTravTime.

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

00245 {
00246     if ( getVolumeDrawing() )
00247         drawVolume( _frustum );  
00248  
00249     getStatistics()->getElem(statTravTime)->stop();
00250   
00251 #if 0 // Altered for last frame time
00252     if(_ownStat)
00253     {
00254         delete _statistics;
00255         _statistics = NULL;
00256     }
00257     else
00258     {
00259         _ownStat = false;        
00260     }
00261 #else
00262     if(_ownStat)
00263     {
00264         delete _statistics;
00265         _statistics = NULL;
00266     }
00267 #endif
00268 
00269     return res; 
00270 }

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::MultiSwitch::draw(), osg::DistanceLOD::draw(), osg::Switch::intersect(), osg::MultiSwitch::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::MultiSwitch::draw(), osg::DistanceLOD::draw(), osg::Switch::intersect(), osg::MultiSwitch::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]
void osg::Action::useNodeList ( void   )  [inline, inherited]
Action::ResultE osg::Action::callEnter ( NodePtr  node  )  [inline, 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::FieldContainer::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, 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::FieldContainer::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 }

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 462 of file OSGAction.cpp.

00463 {
00464     return this < &other;
00465 }

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

Definition at line 470 of file OSGAction.cpp.

00471 {
00472     return false;
00473 }

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

Definition at line 478 of file OSGAction.cpp.

00479 {
00480     return ! (*this == other);
00481 }

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>::const_iterator it = 
00332             node->getMFChildren()->begin();
00333         std::vector<NodePtr>::const_iterator en = 
00334             node->getMFChildren()->end();
00335 
00336         for ( ; it != en; ++it )
00337         {
00338             result = recurse( *it );
00339             
00340             if ( result != Continue )
00341                 break;
00342         }
00343     }   
00344 
00345     _actNode = node;
00346     if ( result == Continue )
00347         result = callLeave( node );
00348     else
00349         callLeave( node );
00350 
00351     if ( result == Skip )
00352         return Continue;
00353         
00354     return result;
00355 }

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

Definition at line 358 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().

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

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(), and osg::RenderAction::drawDepth().

00062 {
00063     _actNode = node;
00064 }


Member Data Documentation

char DrawAction::cvsid = "@(#)$Id: $" [static, private]

Reimplemented from osg::DrawActionBase.

Definition at line 196 of file OSGDrawAction.h.

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

Reimplemented from osg::Action.

Definition at line 199 of file OSGDrawAction.h.

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

std::vector< Action::Functor > * DrawAction::_defaultEnterFunctors = NULL [static, private]

Reimplemented from osg::Action.

Definition at line 202 of file OSGDrawAction.h.

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

std::vector< Action::Functor > * DrawAction::_defaultLeaveFunctors = NULL [static, private]

Reimplemented from osg::Action.

Definition at line 203 of file OSGDrawAction.h.

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

Definition at line 213 of file OSGDrawAction.h.

Referenced by decLightCount(), getLightCount(), incLightCount(), and start().

Camera* osg::DrawActionBase::_camera [protected, inherited]
Window* osg::DrawActionBase::_window [protected, inherited]
Viewport* osg::DrawActionBase::_viewport [protected, inherited]
bool osg::DrawActionBase::_ownStat [protected, inherited]
Material* osg::DrawActionBase::_pMaterial [protected, inherited]
bool osg::DrawActionBase::_frustumCulling [protected, inherited]
bool osg::DrawActionBase::_volumeDrawing [protected, inherited]
bool osg::DrawActionBase::_autoFrustum [protected, inherited]
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 8 Feb 2010 for OpenSG by  doxygen 1.6.1