/* * Copyright (c) 2015 Tricoire Sebastien 3dsman@free.fr * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. * */ #include "OE_utils.h" BoundingBox::BoundingBox(float minX, float minY, float maxX, float maxY) { min.x = minX; min.y = minY; max.x = maxX; max.y = maxY; init = true; } const vector_2d& BoundingBox::getMax() { return max; } const vector_2d& BoundingBox::getMin() { return min; } const vector_2d BoundingBox::getCenter() { return (min+max)/2; } void BoundingBox::operator+= (const BoundingBox& box) { if (!box.init) { return; } if (!init) { min = box.min; max = box.max; init = true; return; } min.x = std::min(min.x,box.min.x); min.y = std::min(min.y,box.min.y); max.x = std::max(max.x,box.max.x); max.y = std::max(max.y,box.max.y); } void BoundingBox::operator+= (const vector_2d& point) { if (!init) { min.x = point.x; max.x = point.x; min.y = point.y; max.y = point.y; init = true; return; } min.x = std::min(min.x,point.x); min.y = std::min(min.y,point.y); max.x = std::max(max.x,point.x); max.y = std::max(max.y,point.y); } BoundingBox BoundingBox::operator+ (const BoundingBox& box) { if (init) { if(box.init) { return BoundingBox(std::min(min.x,box.min.x),std::min(min.y,box.min.y),std::max(max.x,box.max.x),std::max(max.y,box.max.y)); } else { return BoundingBox(min.x,min.y,max.x,max.y); } } else { if(box.init) { return BoundingBox(box.min.x,box.min.y,box.max.x,box.max.y); } } return BoundingBox(); } BoundingBox BoundingBox::operator+ (const vector_2d& point) { if(init) { return BoundingBox(std::min(min.x,point.x),std::min(min.y,point.y),std::max(max.x,point.x),std::max(max.y,point.y)); } else { return BoundingBox(point.x,point.y,point.x,point.y); } }