# class cogs::Transform

## Overview

Class used for effective management of transformation matrix by handling translation, rotation and scaling separately. More…

    #include <Transform.h>

    class Transform {
    public:
        // construction

        Transform();
        Transform(const glm::mat4& matrix);
        Transform(const std::function<void(void)>& notifier_func);
        Transform(const Transform&);
        Transform(Transform&&);
        virtual ~Transform();

        // methods

        Transform& operator=(const Transform&);
        Transform& operator=(Transform&&);
        void Translate(const glm::vec3& move_vector);
        void SetPosition(const glm::vec3& position);
        const glm::vec3 GetPosition() const;
        void Rotate(const glm::quat& rotation);
        void SetRotation(const glm::quat& rotation);
        const glm::quat GetRotation() const;
        void Scale(const glm::vec3& scale);
        void SetScaling(const glm::vec3& scale);
        const glm::vec3 GetScaling() const;
        void Set(const glm::mat4& trans_mat);
        virtual const glm::mat4& GetMat4() const;
        void AddTransform(const Transform& transform);
        void InterpolateWith(const Transform& target, const float target_weight, Transform* out_transform) const;
        virtual void SaveToStream(std::ostream& ostr) const;
        virtual void LoadFromStream(std::istream& istr);
        Transform operator*(const Transform& t) const;
        operator glm::mat4() const;

    protected:
        // methods

        virtual void OnInvariantChange();
    };

## Detailed Documentation

Class used for effective management of transformation matrix by handling translation, rotation and scaling separately.

Final transformation is computed in order: scaling > rotation > translation.

### Construction

    Transform()

Creates an identity instance.

    Transform(const glm::mat4& matrix)

Creates an instance from a given matrix.

    Transform(const std::function<void(void)>& notifier_func)

Creates an identity instance which notifies whenever its state changes.

### Methods

    void Translate(const glm::vec3& move_vector)

Changes position by a given vector.

    void SetPosition(const glm::vec3& position)

Removes current position and replaces with specified position.

    const glm::vec3 GetPosition() const

Returns position defined by transformation.

    void Rotate(const glm::quat& rotation)

Applies additional rotation to transform, relative to current rotation.

    void SetRotation(const glm::quat& rotation)

Removes current rotation and replaces with specified quaternion.

    const glm::quat GetRotation() const

Returns rotation defined by transformation.

    void Scale(const glm::vec3& scale)

Applies scale to transform, accumulated with previous scaling.

    void SetScaling(const glm::vec3& scale)

Resets scaling of transform.

    const glm::vec3 GetScaling() const

Returns scaling defined by transformation.

    void Set(const glm::mat4& trans_mat)

Resets current transform so that it represents specified matrix.

    virtual const glm::mat4& GetMat4() const

Returns composed matrix of final transformation: scaling > rotation > translation.

    void AddTransform(const Transform& transform)

Multiply this transform by a given one.

    void InterpolateWith(const Transform& target, const float target_weight, Transform* out_transform) const

Interpolates current transform with another, in a specific mix ratio.

Transformations are disassembled into translation, scale and rotation components. Translation and scale components are then interpolated linearly, rotation with SLERP function.

Parameters:

target | The Transform which to interpolate to.
target_weight | Defines how much of target should be taken. Value 0 results in 100% of this transform, value 1 results in 100% of target.
out_transform | A pointer to an object where the computed transformation will be stored.

    virtual void SaveToStream(std::ostream& ostr) const

Writes relevant information to stream.

    virtual void LoadFromStream(std::istream& istr)

Reads relevant information from stream.

    Transform operator*(const Transform& t) const

Multiply two transforms equivalently to matrix multiplication.

    virtual void OnInvariantChange()

Function called each time a change on position, rotation or scaling is performed.