
// This file is part of the Coriolis Project.
// Copyright (C) Laboratoire LIP6 - Departement ASIM
// Universite Pierre et Marie Curie
//
// Main contributors :
//        Christophe Alexandre   <Christophe.Alexandre@lip6.fr>
//        Sophie Belloeil             <Sophie.Belloeil@lip6.fr>
//        Hugo Clément                   <Hugo.Clement@lip6.fr>
//        Jean-Paul Chaput           <Jean-Paul.Chaput@lip6.fr>
//        Damien Dupuis                 <Damien.Dupuis@lip6.fr>
//        Christian Masson           <Christian.Masson@lip6.fr>
//        Marek Sroka                     <Marek.Sroka@lip6.fr>
// 
// The Coriolis Project  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 2  of  the
// License, or (at your option) any later version.
// 
// The Coriolis Project  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  the Coriolis Project;  if  not,  write to the  Free Software
// Foundation, inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
//
// License-Tag
//
// Date   : 19/07/2006
// Author : Christophe Alexandre  <Christophe.Alexandre@lip6.fr>
//
// Authors-Tag 
#include "mauka/MaukaBox.h"

namespace Mauka {

using Hurricane::DbU;

Box& Update(Box& box, const Point& src, const Point& dst)
{
    DbU::Unit minX = box.getXMin();
    DbU::Unit maxX = box.getXMax();
    DbU::Unit minY = box.getYMin();
    DbU::Unit maxY = box.getYMax();
    
    if (dst.getX() > src.getX())
    {
        if (src.getX() == minX)
        {
            box = Box();
            return box;
        }
        else
            if (dst.getX() > maxX)
            {
                maxX = dst.getX();
            }
    }
    else
        if (dst.getX() < src.getX())
        {
            if (src.getX() == maxX)
            {
                box = Box();
                return box;
            }
            else
                if (dst.getX() < minX)
                {
                    minX = dst.getX();
                }
        }
    if (dst.getY() > src.getY())
    {
        if (src.getY() == minY)
        {
            box = Box();
            return box;
        }
        else
            if (dst.getY() > maxY)
            {
                maxY = dst.getY();
            }
    }
    else
        if (dst.getY() < src.getY())
        {
            if (src.getY() == maxY)
            {
                box = Box();
                return box;
            }
            else
                if (dst.getY() < minY)
                {
                    minY = dst.getY();
                }
        }
    box = Box(Point(minX, minY), Point(maxX, maxY));
    return box;
}

}
