osg::RenderActionBase Class Reference

Base class using the render action interface of window.

#include <OSGRenderActionBase.h>

Inheritance diagram for osg::RenderActionBase:
osg::DrawActionBase osg::Action osg::RenderAction

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

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)
virtual bool isVisible (Node *node)=0
UInt32 selectVisibles (void)
MaterialgetMaterial (void) const
NodePtr getMaterialNode (void) const
void setMaterial (Material *pMaterial, NodePtr node)
virtual Action::ResultE start (void)
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
Destructor



virtual ~RenderActionBase (void)

Static Public Member Functions

static const char * getClassname (void)
static Actioncreate (void)
 create a new action
static void setPrototype (Action *proto)
static ActiongetPrototype (void)
static void registerEnterDefault (const FieldContainerType &type, const Functor &func)
static void registerLeaveDefault (const FieldContainerType &type, const Functor &func)

Static Public Attributes

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

Protected Member Functions

virtual std::vector< Functor > * getDefaultEnterFunctors (void)=0
virtual std::vector< Functor > * getDefaultLeaveFunctors (void)=0
ResultE recurse (NodePtr node)
ResultE callNewList (void)
void setActNode (NodePtr node)
Constructors



 RenderActionBase (void)
 RenderActionBase (const RenderActionBase &source)

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

void operator= (const RenderActionBase &source)
 prohibit default function (move to 'public' if needed)

Detailed Description

Definition at line 53 of file OSGRenderActionBase.h.


Member Typedef Documentation

Reimplemented from osg::DrawActionBase.

Reimplemented in osg::RenderAction.

Definition at line 82 of file OSGRenderActionBase.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

RenderActionBase::~RenderActionBase ( void   )  [virtual]

Definition at line 69 of file OSGRenderActionBase.cpp.

00070 {
00071 }

RenderActionBase::RenderActionBase ( void   )  [protected]

Definition at line 56 of file OSGRenderActionBase.cpp.

00056                                        :
00057     Inherited()
00058 {
00059 }

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

Definition at line 61 of file OSGRenderActionBase.cpp.

00061                                                                  :
00062      Inherited(source)
00063 {
00064 }


Member Function Documentation

void osg::RenderActionBase::operator= ( const RenderActionBase source  )  [private]

Reimplemented from osg::DrawActionBase.

Reimplemented in osg::RenderAction.

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 }

virtual bool osg::DrawActionBase::isVisible ( Node node  )  [pure virtual, inherited]
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::start ( void   )  [virtual, inherited]

Reimplemented from osg::Action.

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

Definition at line 182 of file OSGDrawActionBase.cpp.

References osg::DrawActionBase::_camera, osg::DrawActionBase::_frustum, osg::DrawActionBase::_mCameraToWorld, osg::DrawActionBase::_ownStat, osg::DrawActionBase::_statistics, osg::Action::Continue, osg::Action::create(), osg::DrawActionBase::getAutoFrustum(), osg::DrawActionBase::getCamera(), osg::StatCollector::getElem(), osg::Camera::getFrustum(), osg::DrawActionBase::getFrustumCulling(), osg::DrawActionBase::getStatistics(), osg::Camera::getViewing(), osg::DrawActionBase::getViewport(), osg::TransformationMatrix< ValueTypeT >::invert(), osg::StatElem::reset(), osg::DrawActionBase::statCulledNodes, osg::DrawActionBase::statCullTestedNodes, osg::Drawable::statNGeoBytes, osg::Drawable::statNLines, osg::Drawable::statNPoints, osg::Drawable::statNPrimitives, osg::Drawable::statNTriangles, osg::Drawable::statNVertices, and osg::DrawActionBase::statTravTime.

Referenced by osg::RenderAction::start(), and osg::DrawAction::start().

00183 {
00184     if(getFrustumCulling() == true &&
00185        getAutoFrustum   () == true &&
00186        getCamera        () != NULL &&
00187        getViewport      () != NULL)
00188     {
00189         getCamera()->getFrustum( _frustum, *getViewport() );
00190 //_frustum.dump();
00191     }
00192 
00193     if(_camera != NULL && getViewport() != NULL)
00194     {
00195         _camera->getViewing( _mCameraToWorld,
00196                              getViewport()->getPixelWidth(),
00197                              getViewport()->getPixelHeight() );
00198         _mCameraToWorld.invert();
00199     }
00200 
00201 //    cerr << "DA::start" << endl;
00202 
00203 //    cerr << _mCameraToWorld << endl << endl;
00204     
00205 
00206 #if 0 // Altered for last frame time
00207     if(_statistics == NULL)
00208     {
00209         _statistics = StatCollector::create();
00210         _ownStat = true;
00211     }
00212     else
00213     {
00214         _ownStat = false;        
00215     }
00216 #else
00217     if(_statistics == NULL)
00218     {
00219         _statistics = StatCollector::create();
00220         _ownStat = true;
00221     }
00222 #endif
00223 
00224     getStatistics()->getElem(statTravTime)->start();
00225     getStatistics()->getElem(statCullTestedNodes)->reset();
00226     getStatistics()->getElem(statCulledNodes)->reset();
00227    
00228     // this really doesn't belong here, but don't know a better place to put it
00229     if(getStatistics()->getElem(Drawable::statNTriangles,false))
00230     {
00231         getStatistics()->getElem(Drawable::statNGeoBytes)->reset();
00232         getStatistics()->getElem(Drawable::statNTriangles)->set(0);
00233         getStatistics()->getElem(Drawable::statNLines)->set(0);
00234         getStatistics()->getElem(Drawable::statNPoints)->set(0);
00235         getStatistics()->getElem(Drawable::statNVertices)->set(0);
00236         getStatistics()->getElem(Drawable::statNPrimitives)->set(0);
00237     }
00238 
00239 //fprintf(stderr,"%p: start\n", Thread::getCurrent());
00240         
00241     return Action::Continue;
00242 }

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 }

virtual std::vector<Functor>* osg::DrawActionBase::getDefaultEnterFunctors ( void   )  [protected, pure virtual, inherited]

Reimplemented from osg::Action.

Implemented in osg::DrawAction, and osg::RenderAction.

virtual std::vector<Functor>* osg::DrawActionBase::getDefaultLeaveFunctors ( void   )  [protected, pure virtual, inherited]

Reimplemented from osg::Action.

Implemented in osg::DrawAction, and osg::RenderAction.

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

Reimplemented in osg::DrawAction, osg::IntersectAction, and osg::VRMLWriteAction.

Definition at line 109 of file OSGAction.h.

00109 { return "Action"; }

Action * Action::create ( void   )  [static, inherited]

Reimplemented in osg::DrawAction, osg::IntersectAction, osg::RenderAction, and osg::VRMLWriteAction.

Definition at line 176 of file OSGAction.cpp.

References osg::Action::_prototype, and osg::Action::Action().

Referenced by osg::DrawActionBase::getStatistics(), and osg::DrawActionBase::start().

00177 {
00178     Action * act;
00179     
00180     if ( _prototype )
00181         act = new Action( *_prototype );
00182     else
00183         act = new Action();
00184     
00185     return act;
00186 }

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

Reimplemented in osg::DrawAction, osg::IntersectAction, osg::RenderAction, and osg::VRMLWriteAction.

Definition at line 119 of file OSGAction.cpp.

References osg::Action::_prototype.

00120 {
00121     _prototype = proto;
00122 }

Action * Action::getPrototype ( void   )  [static, inherited]

Reimplemented in osg::DrawAction, osg::IntersectAction, osg::RenderAction, and osg::VRMLWriteAction.

Definition at line 124 of file OSGAction.cpp.

References osg::Action::_prototype.

00125 {
00126     return _prototype;
00127 }

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

Reimplemented in osg::DrawAction, osg::IntersectAction, osg::RenderAction, and osg::VRMLWriteAction.

Definition at line 83 of file OSGAction.cpp.

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

00085 {
00086     if ( ! _defaultEnterFunctors )
00087         _defaultEnterFunctors = new std::vector<Action::Functor>;
00088 
00089     while(type.getId() >= _defaultEnterFunctors->size())
00090     {
00091         _defaultEnterFunctors->push_back( 
00092             osgTypedFunctionFunctor2CPtrRef<
00093                 ResultE, 
00094                 CNodePtr,
00095                 Action *                   >(&Action::_defaultEnterFunction));
00096     }
00097     
00098     (*_defaultEnterFunctors)[ type.getId() ] = func;
00099 }

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

Reimplemented in osg::DrawAction, osg::IntersectAction, osg::RenderAction, and osg::VRMLWriteAction.

Definition at line 101 of file OSGAction.cpp.

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

00103 {
00104     if ( ! _defaultLeaveFunctors )
00105         _defaultLeaveFunctors = new std::vector<Action::Functor>;
00106 
00107     while(type.getId() >= _defaultLeaveFunctors->size())
00108     {
00109         _defaultLeaveFunctors->push_back( 
00110             osgTypedFunctionFunctor2CPtrRef<
00111                 ResultE, 
00112                 CNodePtr,
00113                 Action *                   >(&Action::_defaultLeaveFunction));
00114     }
00115     
00116     (*_defaultLeaveFunctors)[ type.getId() ] = func;
00117 }

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

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