#include <Inventor/actions/SoCallbackAction.h>
Inheritance diagram for SoCallbackAction::
Public Types | |
enum | Response { CONTINUE, ABORT, PRUNE } |
Public Methods | |
SoCallbackAction (void) | |
SoCallbackAction (const SbViewportRegion &vp) | |
virtual | ~SoCallbackAction () |
void | setViewportRegion (const SbViewportRegion &vp) |
typedef Response | SoCallbackActionCB (void *userdata, SoCallbackAction *action, const SoNode *node) |
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 SbVec3f & | getCoordinate3 (const int index) const |
const SbVec4f & | getCoordinate4 (const int index) const |
SoDrawStyle::Style | getDrawStyle (void) const |
unsigned short | getLinePattern (void) const |
float | getLineWidth (void) const |
float | getPointSize (void) const |
const SbName & | getFontName (void) const |
float | getFontSize (void) const |
SoLightModel::Model | getLightModel (void) const |
const SbVec3f & | getLightAttenuation (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 SbVec3f & | getNormal (const int index) const |
SoNormalBinding::Binding | getNormalBinding (void) const |
int32_t | getNumProfileCoordinates (void) const |
const SbVec2f & | getProfileCoordinate2 (const int index) const |
const SbVec3f & | getProfileCoordinate3 (const int index) const |
const SoNodeList & | getProfile (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 SbVec2f & | getTextureCoordinate2 (const int index) const |
const SbVec4f & | getTextureCoordinate4 (const int index) const |
SoTextureCoordinateBinding::Binding | getTextureCoordinateBinding (void) const |
const SbColor & | getTextureBlendColor (void) const |
const unsigned char * | getTextureImage (SbVec2s &size, int &numcomps) const |
const SbMatrix & | getTextureMatrix (void) const |
SoTexture2::Model | getTextureModel (void) const |
SoTexture2::Wrap | getTextureWrapS (void) const |
SoTexture2::Wrap | getTextureWrapT (void) const |
const SbMatrix & | getModelMatrix (void) const |
SoUnits::Units | getUnits (void) const |
float | getFocalDistance (void) const |
const SbMatrix & | getProjectionMatrix (void) const |
const SbMatrix & | getViewingMatrix (void) const |
const SbViewVolume & | getViewVolume (void) const |
const SbViewportRegion & | getViewportRegion (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 SoNode * | getCurPathTail (void) |
void | setCurrentNode (SoNode *const node) |
Static Public Methods | |
void | initClass (void) |
Protected Methods | |
virtual void | beginTraversal (SoNode *node) |
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; }
|
Response values for callback function. |
|
Default constructor. Will set the viewport to a standard viewport with size 640x512. |
|
Constructor which lets you specify the viewport. This constructor is an extension versus the Open Inventor API. |
|
Destructor. |
|
Initializes the run-time type system for this class, and sets up the enabled elements and action method list. Reimplemented from SoAction. |
|
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. |
|
Callback functions need to be of this type. node is at the current traversal point in the scene graph. |
|
Set a function cb to call before every node of type is traversed. cb will be called with userdata. |
|
Set a function cb to call after every node of type has been traversed. cb will be called with userdata. |
|
Set a function cb to call before the tail of a path is traversed. cb will be called with userdata. |
|
Set a function cb to call after the tail of a path has been traversed. cb will be called with 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. |
|
Set a function cb to call when traversing a node of type which generates line primitives for rendering. cb will be called with 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. |
|
Returns current decimation type setting. |
|
Returns current decimation percentage setting. |
|
Returns current complexity setting. |
|
Returns current complexity type setting. |
|
Returns current number of coordinates in the state. |
|
Returns a coordinate triplet from the current state pool of coordinates. |
|
Returns a coordinate quartuplet from the current state pool of coordinates. |
|
Returns current draw style setting. |
|
Returns current line pattern setting. |
|
Returns current line width setting. |
|
Returns current point size setting. |
|
Returns current fontname setting. |
|
Returns current fontsize setting. |
|
Returns current lightmodel setting. |
|
Returns current light attenuation setting. |
|
Returns current material settings. |
|
Returns current materialbinding setting. |
|
Returns current number of normals in the state. |
|
Returns the normal vectors at index from the current state. |
|
Returns current normalbinding setting. |
|
Returns current number of profile coordinates in the state. |
|
Returns current number of SbVec2f profile coordinates in the state. |
|
Returns current number of SbVec3f profile coordinates in the state. |
|
Returns current list of profile nodes. |
|
Returns current vertexordering shapehint setting. |
|
Returns current shapetype hint setting. |
|
Returns current facetype hint setting. |
|
Returns current creaseangle setting. |
|
Returns current number of texture coordinates in the traversal state. |
|
Returns SbVec2f texture coordinate at index from the texture coordinate pool of the traversal state. |
|
Returns SbVec4f texture coordinate at index from the texture coordinate pool of the traversal state. |
|
Returns current texturecoordinate binding setting. |
|
Returns current texture blend color setting. |
|
Returns current texture image settings. |
|
Returns current texture transformation matrix setting. |
|
Returns current texturemapping model setting. |
|
Returns current texture wrapping setting for the |
|
Returns current texture wrapping setting for the |
|
Returns current model matrix. |
|
Returns current units setting. |
|
Returns current camera focal distance setting. |
|
Returns current projection matrix. |
|
Returns current viewing matrix. |
|
Returns current view volume setting. |
|
Returns current viewport region setting. This method is an extension versus the Open Inventor API. |
|
Returns current pickstyle setting. |
|
Returns last SoSwitch::whichChild setting during the traversal. |
|
For internal use only. |
|
For internal use only. |
|
For internal use only. |
|
For internal use only. |
|
For internal use only. |
|
For internal use only. |
|
For internal use only. |
|
Returns the current tail of the traversal path for the callback action. Reimplemented from SoAction. |
|
Used from nodes during traversal to keep a current node pointer in the action. |
|
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. |