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

# SoDecomposeMatrix(3iv)

decomposes transformation matrices into values for translation, rotation, and scale

## NAME

SoDecomposeMatrix — decomposes transformation matrices into values for translation, rotation, and scale

## INHERITS FROM

SoBase \> SoFieldContainer \> SoEngine \> SoDecomposeMatrix

## SYNOPSIS

**#include \<Inventor/engines/SoCompose.h\>**

Inputs from class SoDecomposeMatrix:

**SoMFMatrix**	**matrix**\
 **SoMFVec3f**	**center**

Outputs from class SoDecomposeMatrix:

**(SoMFVec3f)**	**translation**\
 **(SoMFRotation)**	**rotation**\
 **(SoMFVec3f)**	**scaleFactor**\
 **(SoMFRotation)**	**scaleOrientation**

Methods from class SoDecomposeMatrix:

	**SoDecomposeMatrix()**

Methods from class SoEngine:

**static SoType**	**getClassTypeId()**\
 **virtual int**	**getOutputs(SoEngineOutputList &list) const**\
 **SoEngineOutput \***	**getOutput(const SbName &outputName) const**\
 **SbBool**	**getOutputName(const SoEngineOutput \*output, SbName &outputName) const**\
 **SoEngine \***	**copy() const**\
 **static SoEngine \***	**getByName(const SbName &name)**\
 **static int**	**getByName(const SbName &name, SoEngineList &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 engine takes as input a transformation matrix and a center of transformation. As output the engine produces the translation, rotation and scale values derived from the matrix.**

**The input fields can** **have multiple values, allowing the engine to decompose several matrices in parallel. One of the inputs may have more values than the other. In that case, the last value of the shorter input will be repeated** **as necessary.**

## INPUTS

**SoMFMatrix**	**matrix**\
 The 4x4 transformation matrix.

**SoMFVec3f**	**center**\
 The center of transformations.

## OUTPUTS

**(SoMFVec3f)**	**translation**\
 Derived translation in x, y, and z.

**(SoMFRotation)**	**rotation**\
 Derived rotation.

**(SoMFVec3f)**	**scaleFactor**\
 Derived scale values in x, y, and z.

**(SoMFRotation)**	**scaleOrientation**\
 Derived rotational space for scaling.

## METHODS

	**SoDecomposeMatrix()**\
 Constructor

## FILE FORMAT/DEFAULTS

```
DecomposeMatrix {
matrix	1 0 0 0
	0 1 0 0
	0 0 1 0
	0 0 0 1
center	0 0 0
}
```

## SEE ALSO

**SoComposeMatrix, SoEngineOutput**
