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

# SoComplexity(3iv)

shape complexity node

## NAME

SoComplexity — shape complexity node

## INHERITS FROM

SoBase \> SoFieldContainer \> SoNode \> SoComplexity

## SYNOPSIS

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

**enum Type {** **SoComplexity::SCREEN\_SPACE**	Set complexity based on screen size\
 **SoComplexity::OBJECT\_SPACE**	Set complexity independent of screen size\
 **SoComplexity::BOUNDING\_BOX**	Draw all shapes as bounding boxes\
 **}**

Fields from class SoComplexity:

**SoSFEnum**	**type**\
 **SoSFFloat**	**value**\
 **SoSFFloat**	**textureQuality**

Methods from class SoComplexity:

	**SoComplexity()**\
 **static SoType**	**getClassTypeId()**

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 node sets the current shape complexity value. This is a heuristic value which provides a hint at what geometric complexity to render shape nodes. Values range from 0 to 1, where 0 means minimum complexity** **and 1 means maximum complexity. Each shape node interprets complexity in its own way.**

**Shape complexity always affects rendering and primitive generation for the SoCallbackAction**. For some shapes, it also affects picking.

There are three ways to interpret shape complexity, depending on the **type** field. **BOUNDING\_BOX** complexity ignores the **value** field and renders all shapes as bounding boxes, using the current material, drawing style, etc. The other two types use the **value** field to determine the tessellation of shapes into polygons. **OBJECT\_SPACE** complexity uses **value** directly to determine the tessellation. **SCREEN\_SPACE** complexity depends on **value** and the projected size of the shape on the screen; a **value** of 0 produces the minimum tessellation for a shape, and a **value** of 1 produces a tessellation that is fine enough that each edge of a polygon is about 1 or two pixels in length. Since the projected size depends on the camera position, objects may be tessellated differently every frame if the camera is moving; note that this may have adverse effects on render caching in **SoSeparator** nodes.

The **SoComplexity** node also sets a hint for the quality of textures applied to shapes, based on the value of the **textureQuality** field. The texture quality will take effect at the next Texture2 node; Texture2 nodes previously traversed will not be affected.

## FIELDS

**SoSFEnum**	**type**\
 How shape complexity is interpreted.

**SoSFFloat**	**value**\
 Complexity value.

**SoSFFloat**	**textureQuality**\
 Hint about texture quality. A value of 0 indicates that the fastest texturing should be used, while a value of 1 indicates that the best quality texturing should be used.

## METHODS

	**SoComplexity()**\
 Creates a complexity node with default settings.

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

## ACTION BEHAVIOR

**SoGLRenderAction, SoCallbackAction, SoGetBoundingBoxAction, SoRayPickAction**\
 Sets the current complexity in the state.

## FILE FORMAT/DEFAULTS

```
Complexity {
type	OBJECT_SPACE
value	0.5
textureQuality	0.5
}
```

## SEE ALSO

**SoShape, SoShapeHints, SoTexture2**
