0027581: Logical error in Bnd_Box(2d)::SquareExtent() method.
[occt.git] / src / Bnd / Bnd_Box2d.lxx
CommitLineData
b311480e 1// Created on: 1997-11-27
2// Created by: Christophe MARION
3// Copyright (c) 1997-1999 Matra Datavision
db8e4b9a 4// Copyright (c) 1999-2012 OPEN CASCADE SAS
b311480e 5//
17470159 6// This file is part of Open CASCADE Technology software library.
b311480e 7//
17470159 8// This library is free software; you can redistribute it and/or modify it under
9// the terms of the GNU Lesser General Public License version 2.1 as published
10// by the Free Software Foundation, with special exception defined in the file
11// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12// distribution for complete text of the license and disclaimer of any warranty.
b311480e 13//
17470159 14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
7fd59977 16
17#define VoidMask 0x01
18#define XminMask 0x02
19#define XmaxMask 0x04
20#define YminMask 0x08
21#define YmaxMask 0x10
22#define WholeMask 0x1e
23
24#include <gp_Pnt2d.hxx>
25
26//=======================================================================
27//function : Bnd_Box2d
28//purpose :
29//=======================================================================
30
31inline Bnd_Box2d::Bnd_Box2d()
32 : Xmin(0.), Xmax(0.), Ymin(0.), Ymax(0.), Gap(0.), Flags (VoidMask)
33{
34}
35
36//=======================================================================
37//function : SetWhole
38//purpose :
39//=======================================================================
40
41inline void Bnd_Box2d::SetWhole ()
42{ Flags = WholeMask; }
43
44//=======================================================================
45//function : SetVoid
46//purpose :
47//=======================================================================
48
49inline void Bnd_Box2d::SetVoid ()
50{
51 Flags = VoidMask;
52 Gap=0.;
53}
54
55//=======================================================================
56//function : Set
57//purpose :
58//=======================================================================
59
60inline void Bnd_Box2d::Set(const gp_Pnt2d& P)
61{
62 Flags = VoidMask;
63 Gap=0.;
64 Add(P);
65}
66
67//=======================================================================
68//function : Set
69//purpose :
70//=======================================================================
71
72inline void Bnd_Box2d::Set(const gp_Pnt2d& P, const gp_Dir2d& D)
73{
74 Flags = VoidMask;
75 Gap=0.;
76 Add(P,D);
77}
78
79//=======================================================================
80//function : GetGap
81//purpose :
82//=======================================================================
83
84inline Standard_Real Bnd_Box2d::GetGap () const
85{
86 return Gap;
87}
88
89//=======================================================================
90//function : SetGap
91//purpose :
92//=======================================================================
93
94inline void Bnd_Box2d::SetGap (const Standard_Real Tol)
95{
96 Gap = Tol;
97}
98
99//=======================================================================
100//function : Enlarge
101//purpose :
102//=======================================================================
103
104inline void Bnd_Box2d::Enlarge (const Standard_Real Tol)
105{
106 Standard_Real t = Tol;
107 if (t < 0) t = - t;
108 if (Gap < t) Gap = t;
109}
110
111//=======================================================================
112//function : OpenXmin
113//purpose :
114//=======================================================================
115
116inline void Bnd_Box2d::OpenXmin ()
117{ Flags |= XminMask; }
118
119//=======================================================================
120//function : OpenXmax
121//purpose :
122//=======================================================================
123
124inline void Bnd_Box2d::OpenXmax ()
125{ Flags |= XmaxMask; }
126
127//=======================================================================
128//function : OpenYmin
129//purpose :
130//=======================================================================
131
132inline void Bnd_Box2d::OpenYmin ()
133{ Flags |= YminMask; }
134
135//=======================================================================
136//function : OpenYmax
137//purpose :
138//=======================================================================
139
140inline void Bnd_Box2d::OpenYmax ()
141{ Flags |= YmaxMask; }
142
143//=======================================================================
144//function : IsOpenXmin
145//purpose :
146//=======================================================================
147
148inline Standard_Boolean Bnd_Box2d::IsOpenXmin () const
149{ return Flags & XminMask; }
150
151//=======================================================================
152//function : IsOpenXmax
153//purpose :
154//=======================================================================
155
156inline Standard_Boolean Bnd_Box2d::IsOpenXmax () const
157{ return Flags & XmaxMask; }
158
159//=======================================================================
160//function : IsOpenYmin
161//purpose :
162//=======================================================================
163
164inline Standard_Boolean Bnd_Box2d::IsOpenYmin () const
165{ return Flags & YminMask; }
166
167//=======================================================================
168//function : IsOpenYmax
169//purpose :
170//=======================================================================
171
172inline Standard_Boolean Bnd_Box2d::IsOpenYmax () const
173{ return Flags & YmaxMask; }
174
175//=======================================================================
176//function : IsWhole
177//purpose :
178//=======================================================================
179
180inline Standard_Boolean Bnd_Box2d::IsWhole () const
181{ return (Flags & WholeMask) == WholeMask; }
182
183//=======================================================================
184//function : IsVoid
185//purpose :
186//=======================================================================
187
188inline Standard_Boolean Bnd_Box2d::IsVoid () const
189{ return Flags & VoidMask; }
190
191//=======================================================================
192//function : Add
193//purpose :
194//=======================================================================
195
196inline void Bnd_Box2d::Add (const gp_Pnt2d& P)
197{
198 Update(P.X(),P.Y());
199}
200
201//=======================================================================
202//function : Add
203//purpose :
204//=======================================================================
205
206inline void Bnd_Box2d::Add (const gp_Pnt2d& P, const gp_Dir2d& D)
207{
208 Add(P);
209 Add(D);
210}
211
212//=======================================================================
213//function : IsOut
214//purpose :
215//=======================================================================
216
217inline Standard_Boolean Bnd_Box2d::IsOut (const Bnd_Box2d& Other,
218 const gp_Trsf2d& T) const
219{
220 return IsOut(Other.Transformed(T));
221}
222
223//=======================================================================
224//function : IsOut
225//purpose :
226//=======================================================================
227
228inline Standard_Boolean Bnd_Box2d::IsOut (const gp_Trsf2d& T1,
229 const Bnd_Box2d& Other,
230 const gp_Trsf2d& T2) const
231{
232 return Transformed(T1).IsOut (Other.Transformed(T2));
233}
db8e4b9a 234//=======================================================================
235//function : SquareExtent
236//purpose : Computes the squared diagonal
237//=======================================================================
238inline Standard_Real Bnd_Box2d::SquareExtent() const
239{
240 if ( IsVoid() ) return 0.;
77a6c831 241 const Standard_Real aDx = Xmax - Xmin + Gap + Gap;
242 const Standard_Real aDy = Ymax - Ymin + Gap + Gap;
243 return aDx*aDx + aDy*aDy;
db8e4b9a 244}
7fd59977 245