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

# SoComposeRotationFromTo(3iv)

composes a rotation that rotates from one vector into another

## NAME

SoComposeRotationFromTo — composes a rotation that rotates from one vector into another

## INHERITS FROM

SoBase \> SoFieldContainer \> SoEngine \> SoComposeRotationFromTo

## SYNOPSIS

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

Inputs from class SoComposeRotationFromTo:

**SoMFVec3f**	**from**\
 **SoMFVec3f**	**to**

Outputs from class SoComposeRotationFromTo:

**(SoMFRotation)**	**rotation**

Methods from class SoComposeRotationFromTo:

	**SoComposeRotationFromTo()**

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 two inputs, representing a vector before and after a rotation has been applied. As output, it produces the rotation value that would cause the first vector to transform into the other.**

**The** **input fields can have multiple values, allowing the engine to compose several rotations in parallel. Some inputs may have more values than others. In such cases, the last value of the shorter inputs** **will be repeated as necessary.**

## INPUTS

**SoMFVec3f**	**from**\
 Vector before the rotation.

**SoMFVec3f**	**to**\
 Vector after the rotation.

## OUTPUTS

**(SoMFRotation)**	**rotation**\
 A rotation that transforms one vector into another.

## METHODS

	**SoComposeRotationFromTo()**\
 Constructor

## FILE FORMAT/DEFAULTS

```
ComposeRotationFromTo {
from	0 0 1
to	0 0 1
}
```

## SEE ALSO

**SoComposeRotation, SoDecomposeRotationFromTo, SoEngineOutput**
