# RotateFromTo Action

This **Node** has different versions for [**Scenes**](https://docs.incari.com/incari-studio/2023.1/objects-and-types/project-objects/scene) and [**Scene2Ds**](https://docs.incari.com/incari-studio/2023.1/objects-and-types/project-objects/scene2d). Find in the tabs below the documentation for both versions.

{% tabs %}
{% tab title="Scene" %}

#### Overview

![The RotateFromTo Action Node.](https://2628349686-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fwnv17cpjDin2deSlOz0z%2Fuploads%2Fgit-blob-500a04ed122a1682c8b05359d5ec1aa4ae8ac7c9%2Frotatefromtoactionupdatedimage.png?alt=media)

The **RotateFromTo Action Node** continuously rotates a [**Scene Object**](https://docs.incari.com/incari-studio/2023.1/objects-and-types/scene-objects) from the *Euler angles* specified in `From` to those specified in `To` for a given period of time, thus creating an **Animation**.

Furthermore, visit the [**Actions Nodes**](https://docs.incari.com/incari-studio/2023.1/toolbox/actions) page for a general introduction to these **Nodes**, and [**Rotation**](https://docs.incari.com/incari-studio/2023.1/objects-and-types/attributes/common-attributes/transformation#rotation) for more detail about the `Rotation` **Attribute**.

[**Scope**](https://docs.incari.com/incari-studio/2023.1/overview#scopes): **Scene**, **Function**, **Prefab**.

#### Attributes

![The RotateFromTo Action Node Attributes.](https://2628349686-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fwnv17cpjDin2deSlOz0z%2Fuploads%2Fgit-blob-df2807b68117a71f16b58bdf8ec6800d6e3d6824%2Frotatefromtoactionattributes.png?alt=media)

| Attribute        | Type          | Description                                                                                                                                                                                                                                                                                                                                     |
| ---------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `From`           | **Vector3**   | The *Euler angles* along the X, Y, and Z axes to rotate from, if none are received in the `From` **Input Socket**.                                                                                                                                                                                                                              |
| `To`             | **Vector3**   | The *Euler angles* along the X, Y, and Z axes to rotate to, if none are received in the `To` **Input Socket**.                                                                                                                                                                                                                                  |
| `Duration (sec)` | **Float**     | The total time of the **Action**, if none is received in the `Duration` **Input Socket**.                                                                                                                                                                                                                                                       |
| `Interpolation`  | **Drop-down** | The `Interpolation` method to use for calculating the intermediate values of the *Euler Angles*. It can be [*Linear*](https://en.wikipedia.org/wiki/Linear_interpolation), [*Sine Ease In*](https://easings.net/#easeInSine), [*Sine Ease In Out*](https://easings.net/#easeInOutSine), or [*Sine Ease Out*](https://easings.net/#easeOutSine). |

#### Inputs

| Input         | Type           | Description                                                                                                                                                                                               |
| ------------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Instance ID` | **InstanceID** | The assigned [**Instance ID**](https://docs.incari.com/incari-studio/2023.1/toolbox/actions/..#instance-id) of the **Action**. If nothing is received, it automatically assigns 0 as the **Instance ID**. |
| (►) `Start`   | **Pulse**      | A standard **Input Pulse**, to trigger the execution of the **Node**.                                                                                                                                     |
| `Object ID`   | **ObjectID**   | The ID of the target **Object**.                                                                                                                                                                          |
| `Duration`    | **Float**      | The total time (in seconds).                                                                                                                                                                              |
| `From`        | **Vector3**    | The *Euler angles* along the X, Y, and Z axes to rotate from.                                                                                                                                             |
| `To`          | **Vector3**    | The *Euler angles* along the X, Y, and Z axes to rotate to.                                                                                                                                               |

#### Outputs

| Output        | Type           | Description                                                                                                                    |
| ------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `Instance ID` | **InstanceID** | The assigned [**Instance ID**](https://docs.incari.com/incari-studio/2023.1/toolbox/actions/..#instance-id) of the **Action**. |
| `OnStart` (►) | **Pulse**      | Flows to the next **Node** following **RotateFromTo Action** when the **Action** starts.                                       |
| `OnEnd` (►)   | **Pulse**      | Flows to the next **Node** following **RotateFromTo Action** when the **Action** stops.                                        |
| {% endtab %}  |                |                                                                                                                                |

{% tab title="Scene2D" %}

#### Overview

![The RotateFromTo Action Node.](https://2628349686-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fwnv17cpjDin2deSlOz0z%2Fuploads%2Fgit-blob-845be8ec6dc5bcafe76761f323408a5efe1b6831%2Frotatefromtoactionnode2d.png?alt=media)

The **RotateFromTo Action Node** continuously rotates a [**Scene2D Object**](https://docs.incari.com/incari-studio/2023.1/objects-and-types/scene2d-objects) from the value specified in `From` to that specified in `To` for a given period of time, thus creating an **Animation**.

Furthermore, visit the [**Actions Nodes**](https://docs.incari.com/incari-studio/2023.1/toolbox/actions) page for a general introduction to these **Nodes**, and [**Rotation**](https://docs.incari.com/incari-studio/2023.1/objects-and-types/attributes/common-attributes/transformation#rotation) for more detail about the `Rotation` **Attribute**.

[**Scope**](https://docs.incari.com/incari-studio/2023.1/overview#scopes): **Scene**, **Function**, **Prefab**.

#### Attributes

![The RotateFromTo Action Node Attributes.](https://2628349686-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fwnv17cpjDin2deSlOz0z%2Fuploads%2Fgit-blob-a85350f91438446454f78051e4c4f9283a5e2e16%2Frotatefromtoactionatts2d.png?alt=media)

| Attribute        | Type          | Description                                                                                                                                                                                                                                                                                                                                     |
| ---------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `From`           | **Float**     | The value to rotate from, if none are received in the `From` **Input Socket**.                                                                                                                                                                                                                                                                  |
| `To`             | **Float**     | The value to rotate to, if none are received in the `To` **Input Socket**.                                                                                                                                                                                                                                                                      |
| `Duration (sec)` | **Float**     | The total time of the **Action**, if none is received in the `Duration` **Input Socket**.                                                                                                                                                                                                                                                       |
| `Interpolation`  | **Drop-down** | The `Interpolation` method to use for calculating the intermediate values of the *Euler Angles*. It can be [*Linear*](https://en.wikipedia.org/wiki/Linear_interpolation), [*Sine Ease In*](https://easings.net/#easeInSine), [*Sine Ease In Out*](https://easings.net/#easeInOutSine), or [*Sine Ease Out*](https://easings.net/#easeOutSine). |

#### Inputs

| Input         | Type           | Description                                                                                                                                                                                               |
| ------------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Instance ID` | **InstanceID** | The assigned [**Instance ID**](https://docs.incari.com/incari-studio/2023.1/toolbox/actions/..#instance-id) of the **Action**. If nothing is received, it automatically assigns 0 as the **Instance ID**. |
| (►) `Start`   | **Pulse**      | A standard **Input Pulse**, to trigger the execution of the **Node**.                                                                                                                                     |
| `Object ID`   | **ObjectID**   | The ID of the target **Object**.                                                                                                                                                                          |
| `Duration`    | **Float**      | The total time (in seconds).                                                                                                                                                                              |
| `From`        | **Float**      | The value to rotate from.                                                                                                                                                                                 |
| `To`          | **Float**      | The value to rotate to.                                                                                                                                                                                   |

#### Outputs

| Output        | Type           | Description                                                                                                                    |
| ------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `Instance ID` | **InstanceID** | The assigned [**Instance ID**](https://docs.incari.com/incari-studio/2023.1/toolbox/actions/..#instance-id) of the **Action**. |
| `OnStart` (►) | **Pulse**      | Flows to the next **Node** following **RotateFromTo Action** when the **Action** starts.                                       |
| `OnEnd` (►)   | **Pulse**      | Flows to the next **Node** following **RotateFromTo Action** when the **Action** stops.                                        |
| {% endtab %}  |                |                                                                                                                                |
| {% endtabs %} |                |                                                                                                                                |

## Example

This section shows a simple example of how to use the **RotateFromTo Action** **Node** and the effect it has on a **Scene Object**. This concept can be applied as well to a **Scene2D Object**.

We start by [configuring the **Scene**](#scene-configuration), then [build the **Logic**](#logic), and finally show the [result](#final-result).

### Scene Configuration

We consider a [**Scene**](https://docs.incari.com/incari-studio/2023.1/objects-and-types/project-objects/scene) with two [**Objects**](https://docs.incari.com/incari-studio/2023.1/objects-and-types/scene-objects): a red [**Torus**](https://docs.incari.com/incari-studio/2023.1/objects-and-types/scene-objects/primitives#torus) and a [**Directional Light**](https://docs.incari.com/incari-studio/2023.1/objects-and-types/scene-objects/lights), both of which can be easily created in the [**Scene Outliner**](https://docs.incari.com/incari-studio/2023.1/modules/scene-outliner). Then, we set the `Scale` **Attribute** of the **Torus** to $$(2, 2, 2)$$, its `Rotation` to $$(30, 30, 0)$$, and the `Position` of the **Light** to $$(0, 200, 0)$$. See this configuration in the following image:

![Scene configuration.](https://2628349686-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fwnv17cpjDin2deSlOz0z%2Fuploads%2Fgit-blob-4296c822d62b37fce95d67b7cd79aa57db747807%2FExampleRotateBy_1.png?alt=media)

### Logic

We then need to configure the **Logic**. This is done in the [**Logic Editor**](https://docs.incari.com/incari-studio/2023.1/modules/logic-editor).

We use first a [**Get Rotation** **Node**](https://docs.incari.com/incari-studio/2023.1/toolbox/incari/object/get-rotation), which allows us to obtain an **Object's** current `Rotation` values, and then the **RotateFromTo Action** **Node**, to which we will feed the value previously obtained and configure it for it to *rotate* the **Object** from there to a fixed value of our choosing.

For this purpose, we set the **Attributes** of the **RotateFromTo Action** **Node** in the following way:

* `To`: $$(60, 60, 0)$$
* `Duration (sec)`: $$2$$
* `Interpolation`: `Linear`

We just leave the `From` **Attribute** as it is, since this value will be obtained through the corresponding **Input Socket**.

Then, we connect the **Object ID** from the red **Torus** [**Object Node**](https://docs.incari.com/incari-studio/2023.1/objects-and-types/scene-objects#objects-in-the-logic) to the `Object ID` **Input Socket** of both **Nodes**, the `Rotation` **Output** from the **Get Rotation** **Node** to the `From` **Input Socket** in the **RotateFromTo** **Node**, and a **Pulse** through the **Get Rotation** **Node** and to the `Start` **Input** in **RotateFromTo**. Thus, having the following **Logic** configuration:

![Logic configuration.](https://2628349686-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fwnv17cpjDin2deSlOz0z%2Fuploads%2Fgit-blob-474b704084100624fb01b124ab3ae6591061e806%2FExampleRotateFromTo_2.png?alt=media)

### Final result

Finally, the effect of the **RotateFromTo Action** **Node** when triggered is the following:

![Final result.](https://2628349686-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fwnv17cpjDin2deSlOz0z%2Fuploads%2Fgit-blob-2b7c9431d80217a208ba2daa4baf734a25ee4ed7%2FExampleRotateFromTo_3.gif?alt=media)

## See Also

* [**RotateTo Action**](https://docs.incari.com/incari-studio/2023.1/toolbox/actions/rotatetoaction)
* [**RotateBy Action**](https://docs.incari.com/incari-studio/2023.1/toolbox/actions/rotatebyaction)

## External Links

* [*Rotation*](https://en.wikipedia.org/wiki/Rotation) on Wikipedia
* [*Euler angles*](https://en.wikipedia.org/wiki/Euler_angles) on Wikipedia
