**NOTE: **this article was made for the old version of Slice-Up. The new Slice-Up Beta features a new interface, and all transformation modules are condensed in a single module, which is * Transform*. All other information provided in this tutorial are still useful and relevant to the new Slice-Up Beta.

This article provides a detailed overview of how the transformation modules work.

It includes an explanation of the inner logic, parameters, and mathematical functions that are common to *translateModule*, *rotateModule* and *scaleModule*.

**Note: ***in order to illustrate the different concepts I will use a simple wall toolpath, which was generated by importing a straight line into the importCurve module.*

**Inner logic**

All transformations are applied incrementally from the first layer, up.

In other words - each layer is *normally* assigned a different transformation value. I said *normally *because it is technically possible to define a single value to all layers.

**Range of values**

In all transformation modules you are required to specify two values:

a

**starting value**(e.g. starting rotation, starting scale factor, ...)a

**target value**(e.g. target rotation, target scale factor, ...)

Those are the maximum and minimum transformation value. Each layer gets assigned a value in between these two. If you set the two values equal, then the same transformation value is applied to all layers.

You can define how to map transformation values in this range to each layer by selecting a transformation type: *Linear *or *Function.*

**Linear Transformation**

In a linear transformation, all transformation values are applied incrementally from the first layer to the last one. In other words - __the first layer gets assigned the __* starting value.* Every other layer gets a slightly larger value until

__the__

__target value____is reached at the top layer__.

**Function Transformation**

You can map the outcome of a single variable function to the range of transformation values. The steps are the following:

**Type in a function:**this will dictate how the transformation values will change within the previously defined range**Define a domain:**this let you focus on a specific area of that function, and will also have an impact on the shape

**Note: ***f**unction syntax follow that of standard text editors (e.g. x^2, sqrt(x), sin(x)*cos(x), tan(x), ln(x))*

Here is a neat trick: you can google "*[insert function here] plot" - *so that you can have a visual tool to predict the outcome of your transformation.

The following examples show how the *cos(x)* function map to a scale transformation with factor scale factor ranging from 0.9 to 1.1

**Offsetting the transformation center**

In the *rotatePath *and *scalePath *modules, you can choose to offset that center to the side using the *offset transformation center parameter*.

By default, the center of the transformation is set to the area centroid for closed curves or mid of curve for open curves.

**Direction and Amplitude in Translations**

The translatePath module requires two inputs by definition:

*Direction vector:*you can express it with a number between 0 and 360 (degrees), with 0 and 360 being 3 o' clock, and values increasing in counter-clockwise direction*Amplitude value:*this is the amplitude of the translation vector, expressed in mm

**Conclusion**

This article should have cleared some doubts regarding the inner workings of transformation modules. Any doubt you may have left is probably better solved experimenting with it.

However, you can ask for help or share questions and ideas in the __discourse forum.__

In future tutorial I will show some examples of how different transformation modules can be employed creatively to achieve different results: sign up to our newsletter to stay up to date with all documentation releases!

## Comments