**void TranslationAnimateLinear (float64 time)**

Installs a linear ‘Soft’ (easing function) that affects the translation.

The *time* argument changes the duration of the easing curve.

**void TranslationAnimateQuadratic (float64 time)**

Installs a quadratic ‘Soft’ (easing function) that affects the translation.

The *time* argument changes the duration of the easing curve.

**void TranslationAnimateAsymp (float64 time)**

Installs an asymptotic ‘Soft’ (easing function) that affects the translation.

The *time* argument changes the duration of the easing curve.

**void TranslationAnimateChase (float64 time)**

Installs a chase ‘Soft’ (easing function) that affects the translation.

The *time* argument affects the smoothness of the trajectory of the easing curve. The higher the value the longer it takes to reach the target.

**void TranslationAnimateSine (const Vect &litude, float64 frequency, float64 phase = 0.0)**

Installs a sinusoidal ‘Soft’ (easing function) that affects the translation.

The *amplitude* argument is the amount the translation will change per cycle.
The *frequency* argument is the number of cycles per second.
The *phase* argument is the where in the cycle the easing function starts at (in radians).

**void TranslationAnimateOrbit (const Vect &major_axis, const Vect &minor_axis, float64 frequency)**

Installs an orbital ‘Soft’ (easing function) that affects the translation.

The *major_axis* argument is the amount the translation will change by per cycle along a major axis of an ellipse.
The *minor_axis* argument is the amount the translation will change by per cycle along a minor axis of an ellipse.
The *frequency* argument is the number of cycles per second.

**void ScaleAnimateLinear (float64 time)**

Installs a linear ‘Soft’ (easing function) that affects the scale size.

The *time* argument changes the duration of the easing curve.

**void ScaleAnimateQuadratic (float64 time)**

Installs a quadratic ‘Soft’ (easing function) that affects the scale size.

The *time* argument changes the duration of the easing curve.

**void ScaleAnimateAsymp (float64 time)**

Installs an asymptotic ‘Soft’ (easing function) that affects the scale size.

The *time* argument changes the duration of the easing curve.

**void ScaleAnimateChase (float64 time)**

Installs a chase ‘Soft’ (easing function) that affects the scale size.

The *time* argument affects the smoothness of the trajectory of the easing curve. The higher the value the longer it takes to reach the target.

**void ScaleAnimateSine (const Vect &litude, float64 frequency, float64 phase = 0.0)**

Installs a sinusoidal ‘Soft’ (easing function) that affects the scale size.

The *axis* argument is the amount the scale size will change per cycle.
The *frequency* argument is the number of cycles per second.
The *phase* argument is the where in the cycle the easing function starts at (in radians).

**void RotationAnimateLinear (float64 time)**

Installs a linear ‘Soft’ (easing function) that affects the rotation.

The *time* argument changes the duration of the easing curve.

**void RotationAnimateQuadratic (float64 time)**

Installs a quadratic ‘Soft’ (easing function) that affects the rotation.

The *time* argument changes the duration of the easing curve.

**void RotationAnimateAsymp (float64 time)**

Installs an asymptotic ‘Soft’ (easing function) that affects the rotation.

The *time* argument changes the duration of the easing curve.

**void RotationAnimateChase (float64 time)**

Installs a chase ‘Soft’ (easing function) that affects the rotation.

The *time* argument affects the smoothness of the trajectory of the easing curve. The higher the value the longer it takes to reach the target.

**void RotationAnimateSine (const Vect &axis, float64 angle, float64 frequency, float64 phase = 0.0)**

Installs a sinusoidal ‘Soft’ (easing function) that affects the rotation.

The *axis* argument is the rotation axis.
The *angle* argument is the amount to rotate per cycle.
The *frequency* argument is the number of cycles per second.
The *phase* argument is the where in the cycle the easing function starts at (in radians).

**void ColorAnimateLinear (float64 time)**

Installs a linear ‘Soft’ (easing function) that affects the color.

The *time* argument changes the duration of the easing curve.

**void ColorAnimateQuadratic (float64 time)**

Installs a quadratic ‘Soft’ (easing function) that affects the color.

The *time* argument changes the duration of the easing curve.

**void ColorAnimateAsymp (float64 time)**

Installs an asymptotic ‘Soft’ (easing function) that affects the color.

The *time* argument changes the duration of the easing curve.

**void ColorAnimateSine (const Color &litude, float64 frequency, float64 phase = 0.0)**

Installs a sinusoidal ‘Soft’ (easing function) that affects the color.

The *amplitude* argument is the amount the color will change per cycle.
The *frequency* argument is the number of cycles per second.
The *phase* argument is the where in the cycle the easing function starts at (in radians).

**bool TranslationIsStatic ()**

Returns a Boolean, true if the Translation () is not changing, false if it is (e.g. if there is a Soft installed and SetTranslation () has been recently called on the instance, TranslationIsStatic () could return false).

**bool ScaleIsStatic ()**

Returns a Boolean, true if the Scale () is not changing, false if it is (e.g. if there is a Soft installed and SetScale () has been recently called on the instance, ScaleIsStatic () could return false).

**bool RotationIsStatic ()**

Returns a Boolean, true if the Rotation () is not changing, false if it is (e.g. if there is a Soft installed and SetRotation () has been recently called on the instance, RotationIsStatic () could return false).

**bool AdjColorIsStatic ()**

Returns a Boolean, true if the AdjColor () is not changing, false if it is (e.g. if there is a Soft installed and SetAdjColor () has been recently called on the instance, AdjColorIsStatic () could return false).

### Example

//Create a CustomText () class and install a variety of softs
#include "Greenhouse.h"
class CustomText : public Text
{
public:
CustomText (const Str &s) : Text (s)
{ }
void Travail ()
{ if (!TranslationIsStatic ())
INFORM ("Translation = " + ToStr (Translation ()));
if (!ScaleIsStatic ())
INFORM ("Scale = " + ToStr (Scale ()));
if (!RotationIsStatic ())
INFORM ("Rotation = " + ToStr (Angle ()));
if (!AdjColorIsStatic ())
INFORM ("AdjColor = " + ToStr (AdjColor ()));
}
void PointingHarden (PointingEvent *e)
{ SetTranslation (Intersection (e, Feld () -> Loc ()));
SetScale (Random (.2, 2));
SetRotation (Vect (0, 0, 1), Random (0, 2 * PI));
SetAdjColor (Color (Random(1), Random(1), Random(1)));
}
};
void Setup ()
{ CustomText *ct = new CustomText ("Hello, softs!");
ct -> SlapOnFeld ();
ct -> TranslationAnimateQuadratic (1); //seconds
//ct -> TranslationAnimateLinear (1); //seconds
//ct -> TranslationAnimateAsymp (1); //seconds
//ct -> TranslationAnimateChase (1); //seconds
// amount, frequency, and phase
//ct -> TranslationAnimateSine (Vect (100, 90, 0), 1, 0);
// major_axis, minor_axis, and frequency
//ct -> TranslationAnimateOrbit (Vect (100, 0, 0), Vect (0, 90, 0), 1);
ct -> SetTranslationHard (Vect (Inside (Feld (), Vect (Random(0,.5), Random(0,.5), 0))));
ct -> ScaleAnimateQuadratic (2); //seconds
//ct -> ScaleAnimateLinear (2); //seconds
//ct -> ScaleAnimateAsymp (2); //seconds
//ct -> ScaleAnimateChase (2); //seconds
// amount, frequency, and phase
//ct -> ScaleAnimateSine (Vect (0.3, 0.1, 0), 0.5, 0);
ct -> SetScaleHard (Random (.2, 1));
ct -> RotationAnimateQuadratic (1.5); //seconds
//ct -> RotationAnimateLinear (1.5); //seconds
//ct -> RotationAnimateAsymp (1.5); //seconds
//ct -> RotationAnimateChase (1.5); //seconds
// axis, angle, frequency, and phase
//ct -> RotationAnimateSine (Vect (0, 0, 1), M_PI / 2, 1, 0);
ct -> SetRotationHard (Vect (0, 0, 1), Random (0, 2 * PI));
ct -> ColorAnimateQuadratic (3); //seconds
//ct -> ColorAnimateLinear (3); //seconds
//ct -> ColorAnimateAsymp (3); //seconds
// amount, frequency, and phase
//ct -> ColorAnimateSine (Color (0.5), 1, 0);
ct -> SetAdjColorHard (Color (Random(0,1), Random(0,1), Random(0,1)));
}