---
name: "SoElement"
section: "3"
platform: "linux"
package: "coin"
version: "1:4.0.10-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/SoElement"
---

# SoElement(3)

SoElement is the abstract base class for all elements.

## NAME

SoElement - **SoElement** is the abstract base class for all elements.

## SYNOPSIS

\#include \<Inventor/elements/SoElement.h\>

Inherited by **SoAccumulatedElement**, **SoCacheElement**, **SoCacheHintElement**, **SoCullElement**, **SoDepthBufferElement**, **SoFloatElement**, **SoGLCacheContextElement**, **SoGLRenderPassElement**, **SoGLUpdateAreaElement**, **SoGLVBOElement**, **SoInt32Element**, **SoLazyElement**, **SoLocalBBoxMatrixElement**, **SoMultiTextureCoordinateElement**, **SoMultiTextureEnabledElement**, **SoMultiTextureImageElement**, **SoOverrideElement**, **SoPickRayElement**, **SoProfilerElement**, **SoReplacedElement**, **SoResetMatrixElement**, **SoShapeHintsElement**, **SoShapeStyleElement**, **SoTextureCombineElement**, **SoTextureOverrideElement**, **SoViewportRegionElement**, and **SoWindowElement**.

### Public Member Functions

const **SoType** **getTypeId** (void) const\
 int **getStackIndex** (void) const\
 virtual void **init** (**SoState** \*state)\
 virtual void **push** (**SoState** \*state)\
 virtual void **pop** (**SoState** \*state, const **SoElement** \*prevTopElement)\
 virtual SbBool **matches** (const **SoElement** \*element) const =0\
 virtual **SoElement** \* **copyMatchInfo** (void) const =0\
 void **setDepth** (const int **depth**)\
 int **getDepth** (void) const\
 virtual void **print** (FILE \*file=stdout) const\
 virtual **~SoElement** ()\

### Static Public Member Functions

static void **initClass** (void)\
 static **SoType** **getClassTypeId** (void)\
 static int **getClassStackIndex** (void)\
 static void **initElements** (void)\
 static int **getNumStackIndices** (void)\
 static **SoType** **getIdFromStackIndex** (const int **stackIndex**)\

### Protected Member Functions

**SoElement** (void)\
 void **capture** (**SoState** \*const state) const\
 virtual void **captureThis** (**SoState** \*state) const\
 void **setTypeId** (const **SoType** **typeId**)\
 void **setStackIndex** (const int index)\
 **SoElement** \* **getNextInStack** (void) const\
 **SoElement** \* **getNextFree** (void) const\

### Static Protected Member Functions

static **SoElement** \* **getElement** (**SoState** \*const state, const int **stackIndex**)\
 static const **SoElement** \* **getConstElement** (**SoState** \*const state, const int **stackIndex**)\
 static int **createStackIndex** (const **SoType** id)\

### Protected Attributes

**SoType** **typeId**\
 int **stackIndex**\
 int **depth**\

### Static Protected Attributes

static int **classStackIndex**\
 static **SoTypeList** \* **stackToType**\

## Detailed Description

**SoElement** is the abstract base class for all elements.

This is the base class for all the element classes in Coin.

## Constructor & Destructor Documentation

### SoElement::~SoElement () \[virtual\]

The destructor.

### SoElement::SoElement (void ) \[protected\]

The constructor. To create element instances, use **SoType::createInstance()** for the elements type identifier.

## Member Function Documentation

### void SoElement::initClass (void ) \[static\]

Initialize relevant common data for all instances, like the type system.

### SoType SoElement::getClassTypeId (void ) \[static\]

This static method returns the **SoType** object associated with objects of this class.

### int SoElement::getClassStackIndex (void ) \[static\]

This static method returns the state stack index for the class.

### const SoType SoElement::getTypeId (void ) const

Returns the type identification of an object derived from a class inheriting **SoElement**. This is used for runtime type checking and "downward" casting.

For a more thorough explanation of the runtime type identification functionality, see the documentation of **SoBase::getTypeId()**.

### int SoElement::getStackIndex (void ) const

Returns the stack index for an element instance.

### void SoElement::init (SoState \* state) \[virtual\]

This function initializes the element type in the given **SoState**. It is called for the first element of each enabled element type in **SoState** objects.

Reimplemented in **SoAccumulatedElement**, **SoAmbientColorElement**, **SoAnnoText3CharOrientElement**, **SoAnnoText3FontSizeHintElement**, **SoAnnoText3RenderPrintElement**, **SoBBoxModelMatrixElement**, **SoBumpMapCoordinateElement**, **SoBumpMapElement**, **SoBumpMapMatrixElement**, **SoCacheElement**, **SoCacheHintElement**, **SoClipPlaneElement**, **SoComplexityElement**, **SoComplexityTypeElement**, **SoCoordinateElement**, **SoCreaseAngleElement**, **SoCullElement**, **SoDecimationPercentageElement**, **SoDecimationTypeElement**, **SoDepthBufferElement**, **SoDiffuseColorElement**, **SoDrawStyleElement**, **SoEmissiveColorElement**, **SoEnvironmentElement**, **SoFloatElement**, **SoFocalDistanceElement**, **SoFontNameElement**, **SoFontSizeElement**, **SoGeoElement**, **SoGLCacheContextElement**, **SoGLClipPlaneElement**, **SoGLColorIndexElement**, **SoGLDepthBufferElement**, **SoGLDrawStyleElement**, **SoGLEnvironmentElement**, **SoGLLazyElement**, **SoGLLightIdElement**, **SoGLLinePatternElement**, **SoGLLineWidthElement**, **SoGLModelMatrixElement**, **SoGLMultiTextureCoordinateElement**, **SoGLMultiTextureEnabledElement**, **SoGLMultiTextureImageElement**, **SoGLMultiTextureMatrixElement**, **SoGLNormalElement**, **SoGLPointSizeElement**, **SoGLPolygonOffsetElement**, **SoGLRenderPassElement**, **SoGLShaderProgramElement**, **SoGLShadowCullingElement**, **SoGLShapeHintsElement**, **SoGLUpdateAreaElement**, **SoGLVBOElement**, **SoGLVertexAttributeElement**, **SoGLViewingMatrixElement**, **SoGLViewportRegionElement**, **SoInt32Element**, **SoLazyElement**, **SoLightAttenuationElement**, **SoLightElement**, **SoLightModelElement**, **SoLinePatternElement**, **SoLineWidthElement**, **SoListenerDopplerElement**, **SoListenerGainElement**, **SoListenerOrientationElement**, **SoListenerPositionElement**, **SoLocalBBoxMatrixElement**, **SoMaterialBindingElement**, **SoModelMatrixElement**, **SoMultiTextureCoordinateElement**, **SoMultiTextureEnabledElement**, **SoMultiTextureImageElement**, **SoMultiTextureMatrixElement**, **SoNormalBindingElement**, **SoNormalElement**, **SoOverrideElement**, **SoPickRayElement**, **SoPickStyleElement**, **SoPointSizeElement**, **SoPolygonOffsetElement**, **SoProfileCoordinateElement**, **SoProfileElement**, **SoProjectionMatrixElement**, **SoReplacedElement**, **SoResetMatrixElement**, **SoShadowStyleElement**, **SoShapeHintsElement**, **SoShapeStyleElement**, **SoShininessElement**, **SoSoundElement**, **SoSpecularColorElement**, **SoSwitchElement**, **SoTextOutlineEnabledElement**, **SoTextureCombineElement**, **SoTextureCoordinateBindingElement**, **SoTextureOverrideElement**, **SoTextureQualityElement**, **SoTextureUnitElement**, **SoTransparencyElement**, **SoUnitsElement**, **SoVertexAttributeBindingElement**, **SoVertexAttributeElement**, **SoViewingMatrixElement**, **SoViewportRegionElement**, **SoViewVolumeElement**, and **SoWindowElement**.

### void SoElement::push (SoState \* state) \[virtual\]

This method is called every time a new element is required in one of the stacks. This happens when a writable element is requested, using **SoState::getElement()** or indirectly **SoElement::getElement()**, and the depth of the current element is less than the state depth.

Override this method if your element needs to copy data from the previous top of stack. The **push()** method is called on the new element, and the previous element can be found using **SoElement::getNextInStack()**.

Reimplemented in **SoAccumulatedElement**, **SoBBoxModelMatrixElement**, **SoBumpMapMatrixElement**, **SoCacheElement**, **SoCacheHintElement**, **SoClipPlaneElement**, **SoCullElement**, **SoDepthBufferElement**, **SoGLDepthBufferElement**, **SoGLDrawStyleElement**, **SoGLLazyElement**, **SoGLLightIdElement**, **SoGLLinePatternElement**, **SoGLLineWidthElement**, **SoGLModelMatrixElement**, **SoGLMultiTextureCoordinateElement**, **SoGLMultiTextureEnabledElement**, **SoGLMultiTextureImageElement**, **SoGLMultiTextureMatrixElement**, **SoGLPointSizeElement**, **SoGLPolygonOffsetElement**, **SoGLShaderProgramElement**, **SoGLShadowCullingElement**, **SoGLShapeHintsElement**, **SoGLUpdateAreaElement**, **SoGLVBOElement**, **SoGLViewingMatrixElement**, **SoGLViewportRegionElement**, **SoLazyElement**, **SoLightElement**, **SoLocalBBoxMatrixElement**, **SoModelMatrixElement**, **SoMultiTextureCoordinateElement**, **SoMultiTextureEnabledElement**, **SoMultiTextureImageElement**, **SoMultiTextureMatrixElement**, **SoOverrideElement**, **SoProfileElement**, **SoShapeHintsElement**, **SoShapeStyleElement**, **SoSoundElement**, **SoTextOutlineEnabledElement**, **SoTextureCombineElement**, **SoTextureOverrideElement**, **SoVertexAttributeElement**, and **SoWindowElement**.

### void SoElement::pop (SoState \* state, const SoElement \* prevTopElement) \[virtual\]

This method is called when the state is popped, and the depth of the element is bigger than the current state depth. **pop()** is called on the new top of stack, and a pointer to the previous top of stack is passed in *prevTopElement*.

Override this method if you need to copy some state information from the previous top of stack.

Reimplemented in **SoCacheElement**, **SoCacheHintElement**, **SoDepthBufferElement**, **SoGLClipPlaneElement**, **SoGLDepthBufferElement**, **SoGLDrawStyleElement**, **SoGLEnvironmentElement**, **SoGLLazyElement**, **SoGLLightIdElement**, **SoGLLinePatternElement**, **SoGLLineWidthElement**, **SoGLModelMatrixElement**, **SoGLMultiTextureCoordinateElement**, **SoGLMultiTextureEnabledElement**, **SoGLMultiTextureImageElement**, **SoGLMultiTextureMatrixElement**, **SoGLPointSizeElement**, **SoGLPolygonOffsetElement**, **SoGLProjectionMatrixElement**, **SoGLShaderProgramElement**, **SoGLShadowCullingElement**, **SoGLShapeHintsElement**, **SoGLUpdateAreaElement**, **SoGLVBOElement**, **SoGLViewingMatrixElement**, **SoGLViewportRegionElement**, **SoShapeHintsElement**, **SoShapeStyleElement**, **SoSoundElement**, **SoTextOutlineEnabledElement**, and **SoWindowElement**.

### SbBool SoElement::matches (const SoElement \* element) const \[pure virtual\]

This function returns TRUE is the element matches another element (of the same class), with respect to cache validity.

If the application programmer's extension element has a **matches()** function, it should also have a **copyMatchInfo()** function.

Implemented in **SoAccumulatedElement**, **SoCacheElement**, **SoCacheHintElement**, **SoCullElement**, **SoDepthBufferElement**, **SoFloatElement**, **SoFontNameElement**, **SoGLCacheContextElement**, **SoGLRenderPassElement**, **SoGLShaderProgramElement**, **SoGLUpdateAreaElement**, **SoGLVBOElement**, **SoInt32Element**, **SoLazyElement**, **SoLightAttenuationElement**, **SoLocalBBoxMatrixElement**, **SoModelMatrixElement**, **SoMultiTextureCoordinateElement**, **SoMultiTextureEnabledElement**, **SoMultiTextureImageElement**, **SoOverrideElement**, **SoPickRayElement**, **SoProfilerElement**, **SoReplacedElement**, **SoResetMatrixElement**, **SoShapeHintsElement**, **SoShapeStyleElement**, **SoTextureCombineElement**, **SoTextureOverrideElement**, **SoViewportRegionElement**, and **SoWindowElement**.

### virtual SoElement \* SoElement::copyMatchInfo (void ) const \[pure virtual\]

This function creates a copy of the element that contains enough information to enable the **matches()** function to work.

Used to help with scene graph traversal caching operations.

Implemented in **SoAccumulatedElement**, **SoCacheElement**, **SoCacheHintElement**, **SoCullElement**, **SoDepthBufferElement**, **SoFloatElement**, **SoFontNameElement**, **SoGLCacheContextElement**, **SoGLRenderPassElement**, **SoGLShaderProgramElement**, **SoGLUpdateAreaElement**, **SoGLVBOElement**, **SoInt32Element**, **SoLazyElement**, **SoLightAttenuationElement**, **SoLocalBBoxMatrixElement**, **SoMultiTextureCoordinateElement**, **SoMultiTextureEnabledElement**, **SoMultiTextureImageElement**, **SoOverrideElement**, **SoPickRayElement**, **SoProfilerElement**, **SoReplacedElement**, **SoResetMatrixElement**, **SoShapeHintsElement**, **SoShapeStyleElement**, **SoTextureCombineElement**, **SoTextureOverrideElement**, **SoViewportRegionElement**, and **SoWindowElement**.

### void SoElement::initElements (void ) \[static\]

This function initializes all the built-in Coin element classes.

### int SoElement::getNumStackIndices (void ) \[static\]

Returns the number of allocated element stack index slots.

### SoType SoElement::getIdFromStackIndex (const int stackIndex) \[static\]

Returns the **SoType** identifier for the element class with element state stack index *stackIndex*.

### void SoElement::setDepth (const int depth)

Sets the depth value of the element instance in the state stack.

### int SoElement::getDepth (void ) const

Returns the state stack depth value of the element instance.

### void SoElement::print (FILE \* file = stdout) const \[virtual\]

This function is for printing element information, and is used mostly for debugging purposes.

Reimplemented in **SoCoordinateElement**, **SoEnvironmentElement**, **SoFloatElement**, **SoFontNameElement**, **SoInt32Element**, **SoLightAttenuationElement**, **SoListenerDopplerElement**, **SoListenerOrientationElement**, **SoListenerPositionElement**, **SoOverrideElement**, **SoReplacedElement**, **SoShapeHintsElement**, **SoSoundElement**, **SoTextureOverrideElement**, and **SoViewportRegionElement**.

### SoElement \* SoElement::getElement (SoState \*const state, const int stackIndex) \[inline\], \[static\], \[protected\]

This method returns the top instance (in the *state* stack) of the element class with stack index *stackIndex*.

The returned instance is writable. To make this instance, some lazy evaluation may have to be performed, so use **getConstElement()** instead if the instance shouldn't be modified.

If no instance is available and cannot be made, NULL is returned.

**See also**

const **SoElement** \* **SoElement::getConstElement(SoState \* const state, const int stackIndex)**

### const SoElement \* SoElement::getConstElement (SoState \*const state, const int stackIndex) \[inline\], \[static\], \[protected\]

This method returns a reference to the top element of the class with stack index *stackIndex*. The returned element is non-mutable.

(Don't try to be clever and cast away the constness -- if the returned instance is modified, strange, hard to find and generally wonderful bugs will most likely start to happen.)

If no instance can be returned, NULL is returned.

**See also**

**SoElement** \* **SoElement::getElement(SoState \* const state, const int stackIndex)**

### void SoElement::capture (SoState \*const state) const \[inline\], \[protected\]

This function does whatever is necessary in the state for caching purposes. If should be called by subclasses of **SoElement** whenever any value in the element is accessed.

### void SoElement::captureThis (SoState \* state) const \[protected\], \[virtual\]

Adds the element to the cache.

Reimplemented in **SoAccumulatedElement**.

### void SoElement::setTypeId (const SoType typeId) \[protected\]

Sets the type identifier of an instance.

Note that this is fundamentally different from the **SoNode** runtime type system.

### void SoElement::setStackIndex (const int stackIndex) \[protected\]

Sets the stack index in an instance. Used in constructors of derived elements.

### int SoElement::createStackIndex (const SoType typeId) \[static\], \[protected\]

Returns the value of a new available stack index.

### SoElement \* SoElement::getNextInStack (void ) const \[protected\]

Returns the next element down in the stack. Should be used in **push()** to get the previous element.

This method has a slightly misleading name, but we didn't change it to stay compatible with the original SGI Inventor API.

### SoElement \* SoElement::getNextFree (void ) const \[protected\]

Returns the next free element, i.e. the next element up in the stack.

## Member Data Documentation

### int SoElement::classStackIndex \[static\], \[protected\]

This is the static state stack index for the class.

### SoType SoElement::typeId \[protected\]

The element's unique **SoType** type identification.

### int SoElement::stackIndex \[protected\]

The index in the state stack for this particular element instance.

### SoTypeList \* SoElement::stackToType \[static\], \[protected\]

Provides mapping from state stack indices to element types.

### int SoElement::depth \[protected\]

The depth of the element instance in the state stack.

## Author

Generated automatically by Doxygen for Coin from the source code.
