osg::DrawActionBase Class Reference
[Action]

#include <OSGDrawActionBase.h>

Inheritance diagram for osg::DrawActionBase:

osg::Action osg::DrawAction osg::RenderActionBase 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

virtual ~DrawActionBase (void)
 Destructor.
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)
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 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

 DrawActionBase (void)
 Constructor.
 DrawActionBase (const DrawActionBase &source)
void operator= (const DrawActionBase &source)
virtual std::vector< Functor > * getDefaultEnterFunctors (void)=0
virtual std::vector< Functor > * getDefaultLeaveFunctors (void)=0
ResultE callEnter (NodePtr node)
ResultE callLeave (NodePtr node)
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 Action Inherited

Static Private Attributes

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


Detailed Description

The base class for all rendering-related actions.

Definition at line 77 of file OSGDrawActionBase.h.


Member Typedef Documentation

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

Definition at line 232 of file OSGDrawActionBase.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

DrawActionBase::~DrawActionBase ( void   )  [virtual]

Definition at line 162 of file OSGDrawActionBase.cpp.

References _ownStat, and _statistics.

00163 {
00164 #if 0 // Altered for last frame time
00165 
00166 #else
00167   if (_ownStat) {
00168      delete _statistics;
00169   }
00170 #endif
00171 }

DrawActionBase::DrawActionBase ( void   )  [protected]

Definition at line 122 of file OSGDrawActionBase.cpp.

00122                                    :
00123      Inherited     (     ),
00124     _camera        (NULL ),
00125     _background    (NULL ),
00126     _window        (NULL ),
00127     _viewport      (NULL ),
00128     _statistics    (NULL ),
00129     _ownStat       (false),
00130     _frustumCulling(true ),
00131     _volumeDrawing (false),
00132     _autoFrustum   (true ),
00133     _frustum       (     ),
00134     _pMaterial     (     ),
00135     _pMaterialNode (     ),
00136     _mCameraToWorld(     )
00137 {
00138 }

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

Definition at line 141 of file OSGDrawActionBase.cpp.

00141                                                            :
00142      Inherited     (source                 ),
00143     _camera        (source._camera         ),
00144     _background    (source._background     ),
00145     _window        (source._window         ),
00146     _viewport      (source._viewport       ),
00147     _statistics    (source._statistics     ),
00148     _ownStat       (source._ownStat        ),
00149     _frustumCulling(source._frustumCulling ),
00150     _volumeDrawing (source._volumeDrawing  ),
00151     _autoFrustum   (source._autoFrustum    ),
00152     _frustum       (source._frustum        ),
00153     _pMaterial     (source._pMaterial      ),
00154     _pMaterialNode (source._pMaterialNode  ),
00155     _mCameraToWorld(source._mCameraToWorld )
00156 {
00157 }


Member Function Documentation

Viewport * osg::DrawActionBase::getViewport ( void   )  const [inline]

void DrawActionBase::setViewport ( Viewport viewport  ) 

Definition at line 274 of file OSGDrawActionBase.cpp.

References _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]

void DrawActionBase::setCamera ( Camera cam  ) 

Definition at line 279 of file OSGDrawActionBase.cpp.

References _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]

Background * osg::DrawActionBase::getBackground ( void   )  const [inline]

Definition at line 107 of file OSGDrawActionBase.inl.

References _background.

00108 {
00109     return _background;
00110 }

void DrawActionBase::setBackground ( Background background  ) 

Definition at line 284 of file OSGDrawActionBase.cpp.

References _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]

Definition at line 113 of file OSGDrawActionBase.inl.

References _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::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(), osg::DVRVolume::draw(), 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::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::updateOSGParameters(), osg::SHLChunk::updateStereoLeftEye(), osg::SHLChunk::updateTransInvWorldMatrix(), osg::SHLChunk::updateViewMatrix(), and osg::SHLChunk::updateWorldMatrix().

00114 {
00115     return _window;
00116 }

void DrawActionBase::setWindow ( Window window  ) 

StatCollector * osg::DrawActionBase::getStatistics ( void   )  [inline]

void DrawActionBase::setStatistics ( StatCollector stat  ) 

Definition at line 294 of file OSGDrawActionBase.cpp.

References _ownStat, and _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]

Definition at line 160 of file OSGDrawActionBase.inl.

References _ownStat.

00161 {
00162     return _ownStat;
00163 }

bool osg::DrawActionBase::getFrustumCulling ( void   )  const [inline]

void DrawActionBase::setFrustumCulling ( bool  val = true  ) 

Definition at line 312 of file OSGDrawActionBase.cpp.

References _frustumCulling.

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

00313 {
00314     _frustumCulling = frustumCulling;
00315 }

bool osg::DrawActionBase::getVolumeDrawing ( void   )  const [inline]

Definition at line 131 of file OSGDrawActionBase.inl.

References _volumeDrawing.

Referenced by osg::RenderAction::pushVisibility(), selectVisibles(), and stop().

00132 {
00133     return _volumeDrawing;
00134 }

void DrawActionBase::setVolumeDrawing ( bool  val = false  ) 

Definition at line 328 of file OSGDrawActionBase.cpp.

References _volumeDrawing.

00329 {
00330     _volumeDrawing = volumeDrawing;
00331 }

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

Definition at line 137 of file OSGDrawActionBase.inl.

References _autoFrustum.

Referenced by start().

00138 {
00139     return _autoFrustum;
00140 }

void DrawActionBase::setAutoFrustum ( bool  val = true  ) 

Definition at line 320 of file OSGDrawActionBase.cpp.

References _autoFrustum.

00321 {
00322     _autoFrustum = autoFrustum;
00323 }

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

Definition at line 143 of file OSGDrawActionBase.inl.

References _frustum.

00144 {
00145     return _frustum;
00146 }

void DrawActionBase::setFrustum ( FrustumVolume frust  ) 

Definition at line 335 of file OSGDrawActionBase.cpp.

References _frustum.

00336 {
00337     _frustum = frustum;
00338 }

virtual bool osg::DrawActionBase::isVisible ( Node node  )  [pure virtual]

UInt32 DrawActionBase::selectVisibles ( void   ) 

Definition at line 341 of file OSGDrawActionBase.cpp.

References osg::Action::addNode(), osg::dropVolume(), osg::getCPtr(), getFrustumCulling(), osg::Action::getNNodes(), osg::Action::getNode(), getVolumeDrawing(), isVisible(), osg::Color3< ValueTypeT >::setValuesRGB(), and osg::Action::useNodeList().

Referenced by osg::Switch::draw(), osg::Transform::drawEnter(), osg::MaterialGroup::drawEnter(), osg::Light::drawEnter(), osg::Inline::drawEnter(), osg::Group::drawEnter(), osg::Light::renderEnter(), osg::Group::renderEnter(), and osg::ClipPlane::renderEnter().

00342 {
00343     if(getFrustumCulling() == false)
00344         return getNNodes();
00345 
00346     useNodeList();
00347 
00348     Color3f col;
00349     
00350     UInt32 count = 0;
00351     for ( UInt32 i = 0; i < getNNodes(); i++ )
00352     {
00353         if ( isVisible( getNode(i).getCPtr() ) )
00354         {
00355             col.setValuesRGB(0,1,0);
00356             addNode( getNode(i) );
00357             ++count;
00358         }
00359         else
00360             col.setValuesRGB(1,0,0);
00361         
00362         if(getVolumeDrawing())
00363         {
00364             dropVolume(this, getNode(i), col);
00365         }
00366     }
00367 
00368     return count;
00369 }

Material * osg::DrawActionBase::getMaterial ( void   )  const [inline]

NodePtr osg::DrawActionBase::getMaterialNode ( void   )  const [inline]

Definition at line 172 of file OSGDrawActionBase.inl.

References _pMaterialNode.

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

00173 {
00174     return _pMaterialNode;
00175 }

void DrawActionBase::setMaterial ( Material pMaterial,
NodePtr  node 
)

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

Reimplemented from osg::Action.

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

Definition at line 182 of file OSGDrawActionBase.cpp.

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

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]

Reimplemented from osg::Action.

Reimplemented in osg::RenderAction.

Definition at line 244 of file OSGDrawActionBase.cpp.

References _frustum, _ownStat, _statistics, osg::drawVolume(), osg::StatCollector::getElem(), getStatistics(), getVolumeDrawing(), and 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 osg::DrawActionBase::operator= ( const DrawActionBase source  )  [protected]

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

Reimplemented from osg::Action.

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

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

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().

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]

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

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

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::DistanceLOD::draw(), osg::Switch::intersect(), and 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 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 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::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

Definition at line 85 of file OSGDrawActionBase.h.

Referenced by osg::SimpleSceneManager::initialize(), start(), and stop().

Definition at line 192 of file OSGDrawActionBase.h.

Referenced by getBackground(), setBackground(), and osg::RenderAction::start().

Definition at line 193 of file OSGDrawActionBase.h.

Referenced by getWindow(), setWindow(), and osg::RenderAction::start().

Definition at line 195 of file OSGDrawActionBase.h.

Referenced by getStatistics(), setStatistics(), start(), stop(), and ~DrawActionBase().

Definition at line 199 of file OSGDrawActionBase.h.

Referenced by getMaterial(), and setMaterial().

Definition at line 200 of file OSGDrawActionBase.h.

Referenced by getMaterialNode(), and setMaterial().

Definition at line 204 of file OSGDrawActionBase.h.

Referenced by getFrustumCulling(), and setFrustumCulling().

Definition at line 205 of file OSGDrawActionBase.h.

Referenced by getVolumeDrawing(), and setVolumeDrawing().

Definition at line 206 of file OSGDrawActionBase.h.

Referenced by getAutoFrustum(), and setAutoFrustum().

Definition at line 208 of file OSGDrawActionBase.h.

Referenced by getCameraToWorld(), and start().

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

Reimplemented from osg::Action.

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

Definition at line 246 of file OSGDrawActionBase.h.

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 11:11:11 2008 for OpenSG by  doxygen 1.5.5