// conducteö - free software for 2d thermal bridges computation.
// Copyright (C) 2009-2020, Clément MARCEL.
//
// This file is part of conducteö software.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the  Free Software Foundation,  either version 3 of the License,  or
// (at your option) any later version.
//
// This program is  distributed  in  the  hope that it  will be useful,
// but  WITHOUT ANY WARRANTY ;  without even  the  implied  warranty of
// MERCHANTABILITY  or  FITNESS  FOR  A  PARTICULAR  PURPOSE.  See  the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU  General  Public  License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

#include <geometry/transformations/Transformations.h>

Transformations::Transformations()
{
}

Transformations::~Transformations()
{
    for (unsigned int i=0 ; i<_transformations.size() ; i++)
        delete _transformations.at(i);
}

void Transformations::append(Transformation *transformation)
{
    _transformations.push_back(transformation);
}

Point Transformations::apply(const Point &point) const
{
    Point p=point;
    for (unsigned int i=0 ; i<_transformations.size() ; i++)
    {
        Transformation *transformation=_transformations.at(i);
        p=transformation->apply(p);
    }
    return p;
}

Point Transformations::applyInverse(const Point &point) const
{
    Point p=point;
    for (int i=_transformations.size()-1 ; i>=0 ; i--)
    {
        Transformation *transformation=_transformations.at(i);
        p=transformation->applyInverse(p);
    }
    return p;
}
