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

# SoArray(3iv)

group node that creates a regular IxJxK array of copies of its children

## NAME

SoArray — group node that creates a regular IxJxK array of copies of its children

## INHERITS FROM

SoBase \> SoFieldContainer \> SoNode \> SoGroup \> SoArray

## SYNOPSIS

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

**enum Origin {** **SoArray::FIRST**	First copy is rendered at the current local origin; all other copies are distributed relative to it\
 **SoArray::CENTER**	Copies are distributed relative to the center of the array\
 **SoArray::LAST**	Last copy is rendered at the current local origin; all other copies are distributed relative to it\
 **}**

Fields from class SoArray:

**SoSFShort**	**numElements1**\
 **SoSFShort**	**numElements2**\
 **SoSFShort**	**numElements3**\
 **SoSFVec3f**	**separation1**\
 **SoSFVec3f**	**separation2**\
 **SoSFVec3f**	**separation3**\
 **SoSFEnum**	**origin**

Methods from class SoArray:

	**SoArray()**\
 **static SoType**	**getClassTypeId()**

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 traverses its children, in order, several times, creating a regular 3D array of copies of them. The number of copies in each of the three directions is specified by fields, as are the vectors** **used to separate the copies in each of the three dimensions.**

**For example, an SoArray** node can be used to create a 2x3x4 array of copies of its children, where the separation vectors between adjacent copies in the three array dimensions are (1,2,3), (-4,-5,-6), and (7,8,9), respectively. The base point of the array can be set to one of several values, as described in the **origin** field.

Copies are traversed so that the first dimension cycles most quickly, followed by the second, and then the third. This order is important because **SoArray** sets the current switch value to N before traversing the children for the Nth time (for use with inherited switch values - see **SoSwitch**).

## FIELDS

**SoSFShort**	**numElements1**\
 **SoSFShort**	**numElements2**\
 **SoSFShort**	**numElements3**\
 Number of elements in each of the three array dimensions.

**SoSFVec3f**	**separation1**\
 **SoSFVec3f**	**separation2**\
 **SoSFVec3f**	**separation3**\
 Separation vector in each of the three array dimensions.

**SoSFEnum**	**origin**\
 Defines the base point from which copies are distributed.

## METHODS

	**SoArray()**\
 Creates an array node with default settings.

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

## ACTION BEHAVIOR

**SoGLRenderAction, SoCallbackAction, SoGetBoundingBoxAction, SoRayPickAction**\
 Traverses all children for each array element, saving and restoring state before and after each traversal.

**SoSearchAction**\
 Traverses all children once, setting the inherited switch value to **SO\_SWITCH\_ALL** first.

## FILE FORMAT/DEFAULTS

```
Array {
numElements1	1
numElements2	1
numElements3	1
separation1	1 0 0
separation2	0 1 0
separation3	0 0 1
origin	FIRST
}
```

## SEE ALSO

**SoMultipleCopy, SoSwitch**
