---
name: "SoAction"
section: "3iv"
platform: "linux"
package: "inventor-doc"
version: "2.1.6+ds-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SoAction/3iv"
---

# SoAction(3iv)

abstract base class for all actions

## NAME

SoAction — abstract base class for all actions

## INHERITS FROM

SoAction

## SYNOPSIS

**#include \<Inventor/actions/SoAction.h\>**

Methods from class SoAction:

**virtual** 	**~SoAction()**\
 **virtual void**	**apply(SoNode \*node)**\
 **virtual void**	**apply(SoPath \*path)**\
 **virtual void**	**apply(const SoPathList &pathList, SbBool obeysRules = FALSE)**\
 **static SoType**	**getClassTypeId()**\
 **virtual SoType**	**getTypeId()**\
 **virtual SbBool**	**isOfType(SoType type)**\
 **virtual void**	**invalidateState()**

## DESCRIPTION

**SoAction** is the abstract base class for all actions. Classes derived from **SoAction** define operations to be applied at each node encountered during traversal of a scene graph. The function that gets called to implement the action for a particular node type is determined by a lookup table in the global database.

## METHODS

**virtual** 	**~SoAction()**\
 Destructor.

**virtual void**	**apply(SoNode \*node)**\
 **virtual void**	**apply(SoPath \*path)**\
 **virtual void**	**apply(const SoPathList &pathList, SbBool obeysRules = FALSE)**\
 Initiates an action on the graph defined either by a node, path, or list of paths. TRUE can be passed for the **obeysRules** flag if the given path list has the following 4 properties:

```
1 - All paths have the same head node
2 - Paths are sorted in traversal order
3 - If one path ends at node A, no other path
    continues through A
4 - No two paths are the same
```

These rules will be obeyed by path lists returned by picking and by searches for non-group nodes.

**static SoType**	**getClassTypeId()**\
 Returns the type identifier for this class.

**virtual SoType**	**getTypeId()**\
 Returns the type identifier for a specific instance.

**virtual SbBool**	**isOfType(SoType type)**\
 Returns TRUE if this instance is of the type specified in **type** or is derived from that type. Otherwise, it returns FALSE. For example,

```
actionPtr->isOfType(SoGetMatrixAction::getClassTypeId())
```

returns TRUE if **actionPtr** is an instance of **SoGetMatrixAction** or one of its subclasses.

**virtual void**	**invalidateState()**\
 Invalidates the current traversal state in the action, forcing it to be recreated when the action is next applied. This is typically unnecessary in most applications.

## SEE ALSO

**SoNode, SoPath, SoPathList, SoCallbackAction, SoGLRenderAction, SoGetBoundingBoxAction, SoGetMatrixAction, SoHandleEventAction, SoPickAction, SoRayPickAction, SoSearchAction, SoWriteAction**
