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

# SoMultipleCopy(3iv)

group node that traverses multiple times, applying matrices

## NAME

SoMultipleCopy — group node that traverses multiple times, applying matrices

## INHERITS FROM

SoBase \> SoFieldContainer \> SoNode \> SoGroup \> SoMultipleCopy

## SYNOPSIS

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

Fields from class SoMultipleCopy:

**SoMFMatrix**	**matrix**

Methods from class SoMultipleCopy:

	**SoMultipleCopy()**\
 **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, applying a different matrix each time. The matrices are stored in the multiple-value matrix** field. Each matrix is concatenated to the current transformation matrix, and all of the children are traversed. This allows the user to put multiple copies of the same data in different locations easily and efficiently.

Traversing the **N**th child sets the current switch value to **N**, for use with inherited switch values (see **SoSwitch**).

## FIELDS

**SoMFMatrix**	**matrix**\
 Set of matrices to apply to children.

## METHODS

	**SoMultipleCopy()**\
 Creates a multiple copy node with default settings.

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

## ACTION BEHAVIOR

**SoGLRenderAction, SoCallbackAction, SoGetBoundingBoxAction, SoRayPickAction**\
 Traverses all children for each matrix, 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

```
MultipleCopy {
matrix	1 0 0 0
	0 1 0 0
	0 0 1 0
	0 0 0 1
}
```

## SEE ALSO

**SoArray, SoSwitch**
