Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | Class Members

SoCallbackAction Class Reference
[Actions]

The SoCallbackAction class invokes callbacks at specific nodes. More...

#include <Inventor/actions/SoCallbackAction.h>

Inheritance diagram for SoCallbackAction:

SoAction List of all members.

Public Types

typedef Response SoCallbackActionCB (void *userdata, SoCallbackAction *action, const SoNode *node)
enum  Response { CONTINUE, ABORT, PRUNE }

Public Member Functions

 SoCallbackAction (void)
 SoCallbackAction (const SbViewportRegion &vp)
virtual ~SoCallbackAction ()
void setViewportRegion (const SbViewportRegion &vp)
void addPreCallback (const SoType type, SoCallbackActionCB *cb, void *userdata)
void addPostCallback (const SoType type, SoCallbackActionCB *cb, void *userdata)
void addPreTailCallback (SoCallbackActionCB *cb, void *userdata)
void addPostTailCallback (SoCallbackActionCB *cb, void *userdata)
void addTriangleCallback (const SoType type, SoTriangleCB *cb, void *userdata)
void addLineSegmentCallback (const SoType type, SoLineSegmentCB *cb, void *userdata)
void addPointCallback (const SoType type, SoPointCB *cb, void *userdata)
SoDecimationTypeElement::Type getDecimationType (void) const
float getDecimationPercentage (void) const
float getComplexity (void) const
SoComplexity::Type getComplexityType (void) const
int32_t getNumCoordinates (void) const
const SbVec3fgetCoordinate3 (const int index) const
const SbVec4fgetCoordinate4 (const int index) const
SoDrawStyle::Style getDrawStyle (void) const
unsigned short getLinePattern (void) const
float getLineWidth (void) const
float getPointSize (void) const
const SbNamegetFontName (void) const
float getFontSize (void) const
SoLightModel::Model getLightModel (void) const
const SbVec3fgetLightAttenuation (void) const
void getMaterial (SbColor &ambient, SbColor &diffuse, SbColor &specular, SbColor &emission, float &shininess, float &transparency, const int index=0) const
SoMaterialBinding::Binding getMaterialBinding (void) const
uint32_t getNumNormals (void) const
const SbVec3fgetNormal (const int index) const
SoNormalBinding::Binding getNormalBinding (void) const
int32_t getNumProfileCoordinates (void) const
const SbVec2fgetProfileCoordinate2 (const int index) const
const SbVec3fgetProfileCoordinate3 (const int index) const
const SoNodeListgetProfile (void) const
SoShapeHints::VertexOrdering getVertexOrdering (void) const
SoShapeHints::ShapeType getShapeType (void) const
SoShapeHints::FaceType getFaceType (void) const
float getCreaseAngle (void) const
int32_t getNumTextureCoordinates (void) const
const SbVec2fgetTextureCoordinate2 (const int index) const
const SbVec4fgetTextureCoordinate4 (const int index) const
SoTextureCoordinateBinding::Binding getTextureCoordinateBinding (void) const
const SbColorgetTextureBlendColor (void) const
const unsigned char * getTextureImage (SbVec2s &size, int &numcomps) const
const SbMatrixgetTextureMatrix (void) const
SoTexture2::Model getTextureModel (void) const
SoTexture2::Wrap getTextureWrapS (void) const
SoTexture2::Wrap getTextureWrapT (void) const
const SbMatrixgetModelMatrix (void) const
SoUnits::Units getUnits (void) const
float getFocalDistance (void) const
const SbMatrixgetProjectionMatrix (void) const
const SbMatrixgetViewingMatrix (void) const
const SbViewVolumegetViewVolume (void) const
const SbViewportRegiongetViewportRegion (void) const
SoPickStyle::Style getPickStyle (void) const
int32_t getSwitch (void) const
Response getCurrentResponse (void) const
void invokePreCallbacks (const SoNode *const node)
void invokePostCallbacks (const SoNode *const node)
void invokeTriangleCallbacks (const SoShape *const shape, const SoPrimitiveVertex *const v1, const SoPrimitiveVertex *const v2, const SoPrimitiveVertex *const v3)
void invokeLineSegmentCallbacks (const SoShape *const shape, const SoPrimitiveVertex *const v1, const SoPrimitiveVertex *const v2)
void invokePointCallbacks (const SoShape *const shape, const SoPrimitiveVertex *const v)
SbBool shouldGeneratePrimitives (const SoShape *shape) const
virtual SoNodegetCurPathTail (void)
void setCurrentNode (SoNode *const node)

Static Public Member Functions

void initClass (void)

Protected Member Functions

virtual void beginTraversal (SoNode *node)

Detailed Description

The SoCallbackAction class invokes callbacks at specific nodes.

This action has mechanisms for tracking traversal position and traversal state. In combination with the ability to pass geometry primitives to callback actions set by the user, this does for instance make it rather straightforward to extract the geometry of a scene graph.

You should be able to use this action for most of your "simple" traversal needs, instead of cooking up your own code, as the SoCallbackAction is rather flexible.

A common use of this action is to extract geometry of non-primitive shapes as triangles. A full-fledged example that demonstrates this on a scenegraph with two spheres follows:

#include <Inventor/SoDB.h> #include <Inventor/SoPrimitiveVertex.h> #include <Inventor/actions/SoCallbackAction.h> #include <Inventor/nodes/SoCoordinate3.h> #include <Inventor/nodes/SoIndexedFaceSet.h> #include <Inventor/nodes/SoSeparator.h> #include <Inventor/nodes/SoShape.h> #include <Inventor/nodes/SoSphere.h> #include <Inventor/nodes/SoTranslation.h> static SoCoordinate3 * coord3 = NULL; static SoIndexedFaceSet * ifs = NULL; static int coord3idx = 0; static void triangle_cb(void * userdata, SoCallbackAction * action, const SoPrimitiveVertex * v1, const SoPrimitiveVertex * v2, const SoPrimitiveVertex * v3) { const SbVec3f vtx[] = { v1->getPoint(), v2->getPoint(), v3->getPoint() }; const SbMatrix mm = action->getModelMatrix(); SbVec3f vx[3]; for (int j=0; j < 3; j++) { mm.multVecMatrix(vtx[j], vx[j]); } // (This is sub-optimal -- should scan for the same vertex // coordinates already being present in the SoCoordinate3 // node. We'll get lots of duplicate coordinates from this.) coord3->point.setNum(coord3->point.getNum() + 3); coord3->point.setValues(coord3idx, 3, vx); int32_t indices[] = { coord3idx, coord3idx + 1, coord3idx + 2, -1 }; coord3idx += 3; int oldsize = ifs->coordIndex.getNum(); ifs->coordIndex.setNum(oldsize + 4); ifs->coordIndex.setValues(oldsize, 4, indices); // (Note that it would likely be desirable to grab normal vectors, // materials and / or texture coordinates in a real-world // application. How to do this is not shown by the above code, // but it is not much different from the extraction of vertex // coordinates.) } int main(void) { SoDB::init(); SoSeparator * root = new SoSeparator; root->addChild(new SoSphere); SoTranslation * trans = new SoTranslation; trans->translation.setValue(10, 0, 0); root->addChild(trans); SoSphere * ss = new SoSphere; ss->radius = 3; root->addChild(ss); root->ref(); coord3 = new SoCoordinate3; coord3->point.setNum(0); ifs = new SoIndexedFaceSet; ifs->coordIndex.setNum(0); SoCallbackAction ca; ca.addTriangleCallback(SoShape::getClassTypeId(), triangle_cb, NULL); ca.apply(root); root->unref(); // [the generated SoCoordinate3 and SoIndexedFaceSet nodes would now // typically be used in a scenegraph in a viewer, or written to disk // or something] return 0; }


Member Typedef Documentation

Response SoCallbackAction::SoCallbackActionCB
 

Callback functions need to be of this type. node is at the current traversal point in the scene graph.


Member Enumeration Documentation

enum SoCallbackAction::Response
 

Response values for callback function.

Enumeration values:
CONTINUE  Continue traversal as usual.
ABORT  Abort traversal.
PRUNE  Don't do traversal of neither the current node (if returning from a pre-traversal callback) nor its children.


Constructor & Destructor Documentation

SoCallbackAction::SoCallbackAction void   ) 
 

Default constructor. Will set the viewport to a standard viewport with size 640x512.

SoCallbackAction::SoCallbackAction const SbViewportRegion vp  ) 
 

Constructor which lets you specify the viewport.

This constructor is an extension versus the Open Inventor API.

SoCallbackAction::~SoCallbackAction  )  [virtual]
 

Destructor.


Member Function Documentation

void SoCallbackAction::initClass void   )  [static]
 

Initializes the run-time type system for this class, and sets up the enabled elements and action method list.

Reimplemented from SoAction.

void SoCallbackAction::setViewportRegion const SbViewportRegion vp  ) 
 

Sets the viewport region for this action. When set, the viewport element is initialized right before a traversal starts, making it the current viewport.

This method is an extension versus the Open Inventor API.

void SoCallbackAction::addPreCallback const SoType  type,
SoCallbackActionCB cb,
void *  userdata
 

Set a function cb to call before every node of type is traversed. cb will be called with userdata.

void SoCallbackAction::addPostCallback const SoType  type,
SoCallbackActionCB cb,
void *  userdata
 

Set a function cb to call after every node of type has been traversed. cb will be called with userdata.

void SoCallbackAction::addPreTailCallback SoCallbackActionCB cb,
void *  userdata
 

Set a function cb to call before the tail of a path is traversed. cb will be called with userdata.

void SoCallbackAction::addPostTailCallback SoCallbackActionCB cb,
void *  userdata
 

Set a function cb to call after the tail of a path has been traversed. cb will be called with userdata.

void SoCallbackAction::addTriangleCallback const SoType  type,
SoTriangleCB *  cb,
void *  userdata
 

Set a function cb to call when traversing a node of type which generates triangle primitives for rendering. cb will be called with userdata.

void SoCallbackAction::addLineSegmentCallback const SoType  type,
SoLineSegmentCB *  cb,
void *  userdata
 

Set a function cb to call when traversing a node of type which generates line primitives for rendering. cb will be called with userdata.

void SoCallbackAction::addPointCallback const SoType  type,
SoPointCB *  cb,
void *  userdata
 

Set a function cb to call when traversing a node of type which generates single point primitives for rendering. cb will be called with userdata.

SoDecimationTypeElement::Type SoCallbackAction::getDecimationType void   )  const
 

Returns current decimation type setting.

float SoCallbackAction::getDecimationPercentage void   )  const
 

Returns current decimation percentage setting.

float SoCallbackAction::getComplexity void   )  const
 

Returns current complexity setting.

SoComplexity::Type SoCallbackAction::getComplexityType void   )  const
 

Returns current complexity type setting.

int32_t SoCallbackAction::getNumCoordinates void   )  const
 

Returns current number of coordinates in the state.

const SbVec3f & SoCallbackAction::getCoordinate3 const int  index  )  const
 

Returns a coordinate triplet from the current state pool of coordinates.

const SbVec4f & SoCallbackAction::getCoordinate4 const int  index  )  const
 

Returns a coordinate quartuplet from the current state pool of coordinates.

SoDrawStyle::Style SoCallbackAction::getDrawStyle void   )  const
 

Returns current draw style setting.

unsigned short SoCallbackAction::getLinePattern void   )  const
 

Returns current line pattern setting.

float SoCallbackAction::getLineWidth void   )  const
 

Returns current line width setting.

float SoCallbackAction::getPointSize void   )  const
 

Returns current point size setting.

const SbName & SoCallbackAction::getFontName void   )  const
 

Returns current fontname setting.

float SoCallbackAction::getFontSize void   )  const
 

Returns current fontsize setting.

SoLightModel::Model SoCallbackAction::getLightModel void   )  const
 

Returns current lightmodel setting.

const SbVec3f & SoCallbackAction::getLightAttenuation void   )  const
 

Returns current light attenuation setting.

void SoCallbackAction::getMaterial SbColor ambient,
SbColor diffuse,
SbColor specular,
SbColor emission,
float &  shininess,
float &  transparency,
const int  index = 0
const
 

Returns current material settings.

SoMaterialBinding::Binding SoCallbackAction::getMaterialBinding void   )  const
 

Returns current materialbinding setting.

uint32_t SoCallbackAction::getNumNormals void   )  const
 

Returns current number of normals in the state.

const SbVec3f & SoCallbackAction::getNormal const int  index  )  const
 

Returns the normal vectors at index from the current state.

SoNormalBinding::Binding SoCallbackAction::getNormalBinding void   )  const
 

Returns current normalbinding setting.

int32_t SoCallbackAction::getNumProfileCoordinates void   )  const
 

Returns current number of profile coordinates in the state.

const SbVec2f & SoCallbackAction::getProfileCoordinate2 const int  index  )  const
 

Returns current number of SbVec2f profile coordinates in the state.

const SbVec3f & SoCallbackAction::getProfileCoordinate3 const int  index  )  const
 

Returns current number of SbVec3f profile coordinates in the state.

const SoNodeList & SoCallbackAction::getProfile void   )  const
 

Returns current list of profile nodes.

SoShapeHints::VertexOrdering SoCallbackAction::getVertexOrdering void   )  const
 

Returns current vertexordering shapehint setting.

SoShapeHints::ShapeType SoCallbackAction::getShapeType void   )  const
 

Returns current shapetype hint setting.

SoShapeHints::FaceType SoCallbackAction::getFaceType void   )  const
 

Returns current facetype hint setting.

float SoCallbackAction::getCreaseAngle void   )  const
 

Returns current creaseangle setting.

int32_t SoCallbackAction::getNumTextureCoordinates void   )  const
 

Returns current number of texture coordinates in the traversal state.

const SbVec2f & SoCallbackAction::getTextureCoordinate2 const int  index  )  const
 

Returns SbVec2f texture coordinate at index from the texture coordinate pool of the traversal state.

const SbVec4f & SoCallbackAction::getTextureCoordinate4 const int  index  )  const
 

Returns SbVec4f texture coordinate at index from the texture coordinate pool of the traversal state.

SoTextureCoordinateBinding::Binding SoCallbackAction::getTextureCoordinateBinding void   )  const
 

Returns current texturecoordinate binding setting.

const SbColor & SoCallbackAction::getTextureBlendColor void   )  const
 

Returns current texture blend color setting.

const unsigned char * SoCallbackAction::getTextureImage SbVec2s size,
int &  numcomps
const
 

Returns current texture image settings.

const SbMatrix & SoCallbackAction::getTextureMatrix void   )  const
 

Returns current texture transformation matrix setting.

SoTexture2::Model SoCallbackAction::getTextureModel void   )  const
 

Returns current texturemapping model setting.

SoTexture2::Wrap SoCallbackAction::getTextureWrapS void   )  const
 

Returns current texture wrapping setting for the S coordinate.

SoTexture2::Wrap SoCallbackAction::getTextureWrapT void   )  const
 

Returns current texture wrapping setting for the T coordinate.

const SbMatrix & SoCallbackAction::getModelMatrix void   )  const
 

Returns current model matrix.

SoUnits::Units SoCallbackAction::getUnits void   )  const
 

Returns current units setting.

float SoCallbackAction::getFocalDistance void   )  const
 

Returns current camera focal distance setting.

const SbMatrix & SoCallbackAction::getProjectionMatrix void   )  const
 

Returns current projection matrix.

const SbMatrix & SoCallbackAction::getViewingMatrix void   )  const
 

Returns current viewing matrix.

const SbViewVolume & SoCallbackAction::getViewVolume void   )  const
 

Returns current view volume setting.

const SbViewportRegion & SoCallbackAction::getViewportRegion void   )  const
 

Returns current viewport region setting.

This method is an extension versus the Open Inventor API.

SoPickStyle::Style SoCallbackAction::getPickStyle void   )  const
 

Returns current pickstyle setting.

int32_t SoCallbackAction::getSwitch void   )  const
 

Returns last SoSwitch::whichChild setting during the traversal.

SoCallbackAction::Response SoCallbackAction::getCurrentResponse void   )  const
 

This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.

void SoCallbackAction::invokePreCallbacks const SoNode *const  node  ) 
 

This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.

Invoke all "pre traversal" callbacks.

void SoCallbackAction::invokePostCallbacks const SoNode *const  node  ) 
 

This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.

Invoke all "post traversal" callbacks.

void SoCallbackAction::invokeTriangleCallbacks const SoShape *const  shape,
const SoPrimitiveVertex *const  v1,
const SoPrimitiveVertex *const  v2,
const SoPrimitiveVertex *const  v3
 

This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.

Invoke all "triangle generation" callbacks.

void SoCallbackAction::invokeLineSegmentCallbacks const SoShape *const  shape,
const SoPrimitiveVertex *const  v1,
const SoPrimitiveVertex *const  v2
 

This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.

Invoke all "line segment generation" callbacks.

void SoCallbackAction::invokePointCallbacks const SoShape *const  shape,
const SoPrimitiveVertex *const  v
 

This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.

Invoke all "point" callbacks.

SbBool SoCallbackAction::shouldGeneratePrimitives const SoShape shape  )  const
 

This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.

Check from the shape nodes whether or not to generate primitives from the complex shapes. If there are no callbacks attached to the node types, making the primitives would only be a waste of CPU.

SoNode * SoCallbackAction::getCurPathTail void   )  [virtual]
 

Returns the current tail of the traversal path for the callback action.

Reimplemented from SoAction.

void SoCallbackAction::setCurrentNode SoNode *const  node  ) 
 

Used from nodes during traversal to keep a current node pointer in the action.

void SoCallbackAction::beginTraversal SoNode node  )  [protected, virtual]
 

This virtual method is called from SoAction::apply(), and is the entry point for the actual scenegraph traversal.

It can be overridden to initialize the action at traversal start, for specific initializations in the action subclasses inheriting SoAction.

Default method just calls traverse(), which any overridden implementation of the method must do too (or call SoAction::beginTraversal()) to trigger the scenegraph traversal.

Reimplemented from SoAction.


The documentation for this class was generated from the following files:
Generated on Tue Jul 27 23:53:03 2004 for Coin by doxygen 1.3.7