Searches for nodes in a scene graph. More...
#include <Inventor/actions/SoSearchAction.h>
Public Types | |
enum | LookFor { NODE = 0x01, TYPE = 0x02, NAME = 0x04 } |
enum | Interest { FIRST, LAST, ALL } |
Public Member Functions | |
virtual SoType | getTypeId () const |
SoSearchAction () | |
virtual void | reset () |
virtual void | clearApplyResult () |
void | setFind (int what) |
int | getFind () |
SoNode * | getNode () const |
void | setNode (SoNode *n) |
SoType | getType (SbBool &derivedIsOk) const |
void | setType (SoType t, SbBool derivedIsOk=TRUE) |
const SbName & | getName () const |
void | setName (const SbName &n) |
Interest | getInterest () const |
void | setInterest (Interest i) |
SbBool | isSearchingAll () const |
void | setSearchingAll (SbBool flag) |
SoPath * | getPath () const |
SoPathList & | getPaths () |
Static Public Member Functions | |
static SoType | getClassTypeId () |
Searches for nodes in a scene graph.
This class is used to search scene graphs for specific nodes, nodes of a specific type, nodes with a specific name, or any combination of these. It can search for just the first or last node satisfying the criteria or for all such nodes. The action returns a path (SoPath) to each node found. The searched for node is the "tail" of each path.
Note that the search criteria are cumulative. For example, if you do a search by name (setName()), then reuse the same SoSearchAction object to do a search by type (setType()), the action will actually search for a node that satisfies both criteria. To avoid this problem, call reset() before reusing the action object.
By default SoSearchAction only searches nodes that are actually traversed. For example it would not search all the children of an SoSwitch node unless the whichChild field is set to SO_SWITCH_ALL. To search all nodes in the scene graph (except nodekits - see next paragraph) call setSearchingAll(TRUE).
Nodekits:
Hidden references:
Efficiency:
SoSearchAction sa; sa.setNode( coneNode ); sa.setSearchingAll( TRUE ); // Optional: Search all nodes SoBaseKit::setSearchingChildren( TRUE ); // Optional: Search inside nodekits sa.apply( root ); SoFullPath* path = (SoFullPath*)sa.getPath(); // Get path if (path != NULL) { SoNode* node = path.getTail(); }
Example 2: Find all the SoFont nodes in the scene graph:
SoSearchAction sa; sa.setType( SoFont::getClassTypeId() ); sa.setInterest( SoSearchAction::ALL ); // Find ALL instances sa.setSearchingAll( TRUE ); // Optional: Search all nodes SoBaseKit::setSearchingChildren( TRUE ); // Optional: Search inside nodekits sa.apply( rootNode ); SoPathList& pathList = sa.getPaths(); // Get list of paths int numPaths = pathList.getLength(); // How many found? for (int i = 0; i < numPaths; i++) { SoFullPath* path = (SoFullPath*)pathList[i]; SoFont* fontNode = (SoFont*)path->getTail(); . . . }
SoPath, SoBaseKit, SoSearchPathAction, SoSearchStepAction
SoSearchAction::SoSearchAction | ( | ) |
Constructor.
virtual void SoSearchAction::clearApplyResult | ( | ) | [virtual] |
When applied, an action may reference nodes or create objects (e.g. SoPath) that reference nodes. This is especially true for SoSearchAction and SoRayPickAction. These references will prevent the nodes from being destroyed and so may appear to be a "memory leak".All references are cleared when the action is destroyed or re-applied. However it may be useful to clear them explicitly to remove references to nodes.
See also reset()
Reimplemented from SoAction.
static SoType SoSearchAction::getClassTypeId | ( | ) | [static] |
Returns the type identifier for this class.
Reimplemented from SoAction.
Reimplemented in SoSearchPathAction, and SoSearchStepAction.
int SoSearchAction::getFind | ( | ) | [inline] |
Returns what to look for.
Interest SoSearchAction::getInterest | ( | ) | const [inline] |
Returns which paths to return.
const SbName& SoSearchAction::getName | ( | ) | const [inline] |
Returns the name of the node to search for.
SoNode* SoSearchAction::getNode | ( | ) | const [inline] |
Returns the node to search for.
SoPath* SoSearchAction::getPath | ( | ) | const [inline] |
Returns resulting path, or NULL if no path was found.
This should be used if the interest is FIRST or LAST.
SoPathList& SoSearchAction::getPaths | ( | ) | [inline] |
Returns resulting path list.
This should be used if the interest is ALL.
Returns the node type to search for.
virtual SoType SoSearchAction::getTypeId | ( | ) | const [virtual] |
Returns the type identifier for this specific instance.
Implements SoTypedObject.
Reimplemented in SoSearchPathAction, and SoSearchStepAction.
SbBool SoSearchAction::isSearchingAll | ( | ) | const [inline] |
Returns FALSE if searching uses regular traversal, TRUE if it traverses every single node.
Default is FALSE.
virtual void SoSearchAction::reset | ( | ) | [virtual] |
Resets options back to default values; clears list of returned paths.
This can be used to apply the action again with a different set of search criteria. See also clearApplyResult().
Reimplemented in SoSearchPathAction.
void SoSearchAction::setFind | ( | int | what | ) | [inline] |
Sets what to look for; what is a bitmask of LookFor enum values.
Default is no flags at all. Note that setting a node, type, and/or name to search for activates the relevant flag, so you may never need to call this method directly.
void SoSearchAction::setInterest | ( | Interest | i | ) | [inline] |
Sets which paths to return.
Default is FIRST.
void SoSearchAction::setName | ( | const SbName & | n | ) |
Sets the name of the node to search for.
void SoSearchAction::setNode | ( | SoNode * | n | ) |
Sets the node to search for.
void SoSearchAction::setSearchingAll | ( | SbBool | flag | ) | [inline] |
Sets whether searching uses regular traversal or whether it traverses every single node.
For example, if this flag is FALSE, an SoSwitch node will traverse only the child or children it would normally traverse for an action. If the flag is TRUE, the switch would always traverse all of its children. The default is FALSE.
Sets the node type to search for.
If derivedIsOk is TRUE, a node that is of a type that is derived from t will pass this search criterion.