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

# SoAnnotation(3iv)

Annotation group node

## NAME

SoAnnotation — Annotation group node

## INHERITS FROM

SoBase \> SoFieldContainer \> SoNode \> SoGroup \> SoSeparator \> SoAnnotation

## SYNOPSIS

**#include \<Inventor/nodes/SoAnnotation.h\>**

Fields from class SoSeparator:

**SoSFEnum**	**renderCaching**\
 **SoSFEnum**	**boundingBoxCaching**\
 **SoSFEnum**	**renderCulling**\
 **SoSFEnum**	**pickCulling**

Methods from class SoAnnotation:

	**SoAnnotation()**\
 **static SoType**	**getClassTypeId()**

Methods from class SoSeparator:

**static void**	**setNumRenderCaches(int howMany)**\
 **static int**	**getNumRenderCaches()**

Methods from class SoGroup:

**void**	**addChild(SoNode \*child)**\
 **void**	**insertChild(SoNode \*child, int newChildIndex)**\
 **SoNode \***	**getChild(int index) const**\
 **int**	**findChild(const SoNode \*child) const**\
 **int**	**getNumChildren() const**\
 **void**	**removeChild(int index)**\
 **void**	**removeChild(SoNode \*child)**\
 **void**	**removeAllChildren()**\
 **void**	**replaceChild(int index, SoNode \*newChild)**\
 **void**	**replaceChild(SoNode \*oldChild, SoNode \*newChild)**

Methods from class SoNode:

**void**	**setOverride(SbBool state)**\
 **SbBool**	**isOverride() const**\
 **SoNode \***	**copy(SbBool copyConnections = FALSE) const**\
 **virtual SbBool**	**affectsState() const**\
 **static SoNode \***	**getByName(const SbName &name)**\
 **static int**	**getByName(const SbName &name, SoNodeList &list)**

Methods from class SoFieldContainer:

**void**	**setToDefaults()**\
 **SbBool**	**hasDefaultValues() const**\
 **SbBool**	**fieldsAreEqual(const SoFieldContainer \*fc) const**\
 **void**	**copyFieldValues(const SoFieldContainer \*fc, SbBool copyConnections = FALSE)**\
 **SbBool**	**set(const char \*fieldDataString)**\
 **void**	**get(SbString &fieldDataString)**\
 **virtual int**	**getFields(SoFieldList &resultList) const**\
 **virtual SoField \***	**getField(const SbName &fieldName) const**\
 **SbBool**	**getFieldName(const SoField \*field, SbName &fieldName) const**\
 **SbBool**	**isNotifyEnabled() const**\
 **SbBool**	**enableNotify(SbBool flag)**

Methods from class SoBase:

**void**	**ref()**\
 **void**	**unref() const**\
 **void**	**unrefNoDelete() const**\
 **void**	**touch()**\
 **virtual SoType**	**getTypeId() const**\
 **SbBool**	**isOfType(SoType type) const**\
 **virtual void**	**setName(const SbName &name)**\
 **virtual SbName**	**getName() const**

## DESCRIPTION

**This group node delays rendering its children until all other nodes have been traversed, turning off depth buffer comparisons first. The result is that the shapes under the annotation node are rendered** **on top of the rest of the scene. This node is derived from SoSeparator**, so it saves and restores traversal state for all actions.

Note that if more than one annotation node is present in a graph, the order in which they are traversed determines the stacking order — later nodes are rendered on top of earlier ones. Also note that since depth buffer comparisons are disabled, complex 3D objects may not be rendered correctly when used under annotation nodes.

Also note that the annotation node does nothing special when picking along a ray. That is, it does not modify the sorting order of intersected objects based on which ones are under annotation nodes. If your application uses annotation nodes and you want to ensure that objects under them are picked "in front of" other objects, you can tell the pick action that you want to pick all objects along the ray and then scan through the paths in the resulting picked point instances to see if any of them passes through an annotation node. Your program can then decide what to do in such a case.

## METHODS

	**SoAnnotation()**\
 Creates an annotation node with default settings.

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

## ACTION BEHAVIOR

**SoGLRenderAction**\
 Delays rendering its children until all other nodes have been traversed, turning off depth buffer comparisons first.

**SoCallbackAction, SoGetBoundingBoxAction, SoGetMatrixAction, SoRayPickAction, SoSearchAction**\
 Same as **SoSeparator**

## FILE FORMAT/DEFAULTS

```
Annotation {
renderCaching	AUTO
boundingBoxCaching	AUTO
renderCulling	AUTO
pickCulling	AUTO
}
```
