// Created on: 2005-09-08 // Created by: Alexander GRIGORIEV // Copyright (c) 2005-2014 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #include #ifndef Bnd_B2x_RealLast #define Bnd_B2x_RealLast RealType(1e30); #endif /** * Empty constructor */ inline Bnd_B2x::Bnd_B2x () { Clear(); } /** * Constructor. * @param theCenter * Center of the created box * @param theHSize * Half-diagonal of the box, both X and Y should be non-negative */ inline Bnd_B2x::Bnd_B2x (const gp_XY& theCenter, const gp_XY& theHSize) { myCenter[0] = RealType(theCenter.X()); myCenter[1] = RealType(theCenter.Y()); myHSize[0] = RealType(theHSize.X()); myHSize[1] = RealType(theHSize.Y()); } /** * Reset the box data. */ inline void Bnd_B2x::Clear () { myCenter[0] = Bnd_B2x_RealLast; myCenter[1] = Bnd_B2x_RealLast; myHSize[0] = -Bnd_B2x_RealLast; myHSize[1] = -Bnd_B2x_RealLast; } /** * Check if the box is empty. */ inline Standard_Boolean Bnd_B2x::IsVoid () const { return (myHSize[0] < -1e-5); } /** * Update the box by point. */ inline void Bnd_B2x::Add (const gp_Pnt2d& thePnt) { Add (thePnt.XY()); } /** * Update the box by another box. */ inline void Bnd_B2x::Add (const Bnd_B2x& theBox) { if (theBox.IsVoid() == Standard_False) { Add (theBox.CornerMin()); Add (theBox.CornerMax()); } } /** * Query a box corner. */ inline gp_XY Bnd_B2x::CornerMin () const { return gp_XY (myCenter[0] - myHSize[0], myCenter[1] - myHSize[1]); } /** * Query a box corner. */ inline gp_XY Bnd_B2x::CornerMax () const { return gp_XY (myCenter[0] + myHSize[0], myCenter[1] + myHSize[1]); } /** * Query the square diagonal. */ inline Standard_Real Bnd_B2x::SquareExtent () const { return 4 * (myHSize[0] * myHSize[0] + myHSize[1] * myHSize[1]); } /** * Set the Center coordinates. */ inline void Bnd_B2x::SetCenter (const gp_XY& theCenter) { myCenter[0] = RealType(theCenter.X()); myCenter[1] = RealType(theCenter.Y()); } /** * Set the HSize coordinates. */ inline void Bnd_B2x::SetHSize (const gp_XY& theHSize) { myHSize[0] = RealType(theHSize.X()); myHSize[1] = RealType(theHSize.Y()); } /** * Increase the box. * @param aDiff * absolute value of this parameter is added to the box size in all dimensions. */ inline void Bnd_B2x::Enlarge (const Standard_Real aDiff) { const RealType aD = RealType(Abs(aDiff)); myHSize[0] += aD; myHSize[1] += aD; } /** * Intersection Box - Point */ inline Standard_Boolean Bnd_B2x::IsOut (const gp_XY& thePnt) const { return (Abs(RealType(thePnt.X()) - myCenter[0]) > myHSize[0] || Abs(RealType(thePnt.Y()) - myCenter[1]) > myHSize[1]); } /** * Intersection Box-Box. */ inline Standard_Boolean Bnd_B2x::IsOut (const Bnd_B2x& theBox) const { return (Abs(theBox.myCenter[0]-myCenter[0]) > theBox.myHSize[0]+myHSize[0] || Abs(theBox.myCenter[1]-myCenter[1]) > theBox.myHSize[1]+myHSize[1]); } /** * Test the complete inclusion of this box in theBox. */ inline Standard_Boolean Bnd_B2x::IsIn (const Bnd_B2x& theBox) const { return (Abs(theBox.myCenter[0]-myCenter[0]) < theBox.myHSize[0]-myHSize[0] && Abs(theBox.myCenter[1]-myCenter[1]) < theBox.myHSize[1]-myHSize[1]); }