57697d66b09b1753c0e8c43ae7143e630206daa7
[occt.git] / src / Bnd / Bnd_Box2d.lxx
1 // Created on: 1997-11-27
2 // Created by: Christophe MARION
3 // Copyright (c) 1997-1999 Matra Datavision
4 // Copyright (c) 1999-2012 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
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.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
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
31 inline 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
41 inline void Bnd_Box2d::SetWhole ()
42 { Flags = WholeMask; }
43
44 //=======================================================================
45 //function : SetVoid
46 //purpose  : 
47 //=======================================================================
48
49 inline void Bnd_Box2d::SetVoid ()
50 {
51   Flags = VoidMask;
52   Gap=0.;
53 }
54
55 //=======================================================================
56 //function : Set
57 //purpose  : 
58 //=======================================================================
59
60 inline 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
72 inline 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
84 inline Standard_Real Bnd_Box2d::GetGap () const
85 {
86   return Gap;
87 }
88
89 //=======================================================================
90 //function : SetGap
91 //purpose  : 
92 //=======================================================================
93
94 inline void Bnd_Box2d::SetGap (const Standard_Real Tol)
95 {
96   Gap = Tol;
97 }
98
99 //=======================================================================
100 //function : Enlarge
101 //purpose  : 
102 //=======================================================================
103
104 inline 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
116 inline void Bnd_Box2d::OpenXmin ()
117 { Flags |= XminMask; }
118
119 //=======================================================================
120 //function : OpenXmax
121 //purpose  : 
122 //=======================================================================
123
124 inline void Bnd_Box2d::OpenXmax ()
125 { Flags |= XmaxMask; }
126
127 //=======================================================================
128 //function : OpenYmin
129 //purpose  : 
130 //=======================================================================
131
132 inline void Bnd_Box2d::OpenYmin ()
133 { Flags |= YminMask; }
134
135 //=======================================================================
136 //function : OpenYmax
137 //purpose  : 
138 //=======================================================================
139
140 inline void Bnd_Box2d::OpenYmax ()
141 { Flags |= YmaxMask; }
142
143 //=======================================================================
144 //function : IsOpenXmin
145 //purpose  : 
146 //=======================================================================
147
148 inline Standard_Boolean Bnd_Box2d::IsOpenXmin () const
149 { return Flags & XminMask; }
150
151 //=======================================================================
152 //function : IsOpenXmax
153 //purpose  : 
154 //=======================================================================
155
156 inline Standard_Boolean Bnd_Box2d::IsOpenXmax () const
157 { return Flags & XmaxMask; }
158
159 //=======================================================================
160 //function : IsOpenYmin
161 //purpose  : 
162 //=======================================================================
163
164 inline Standard_Boolean Bnd_Box2d::IsOpenYmin () const
165 { return Flags & YminMask; }
166
167 //=======================================================================
168 //function : IsOpenYmax
169 //purpose  : 
170 //=======================================================================
171
172 inline Standard_Boolean Bnd_Box2d::IsOpenYmax () const
173 { return Flags & YmaxMask; }
174
175 //=======================================================================
176 //function : IsWhole
177 //purpose  : 
178 //=======================================================================
179
180 inline Standard_Boolean Bnd_Box2d::IsWhole () const
181 { return (Flags & WholeMask) == WholeMask; }
182
183 //=======================================================================
184 //function : IsVoid
185 //purpose  : 
186 //=======================================================================
187
188 inline Standard_Boolean Bnd_Box2d::IsVoid () const
189 { return Flags & VoidMask; }
190
191 //=======================================================================
192 //function : Add
193 //purpose  : 
194 //=======================================================================
195
196 inline 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
206 inline 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
217 inline 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
228 inline 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 }
234 //=======================================================================
235 //function : SquareExtent
236 //purpose  : Computes the squared diagonal
237 //=======================================================================
238 inline Standard_Real Bnd_Box2d::SquareExtent() const 
239 {
240   if ( IsVoid() ) return 0.;
241   const Standard_Real aDx = Xmax - Xmin + Gap + Gap;
242   const Standard_Real aDy = Ymax - Ymin + Gap + Gap;
243   return aDx*aDx + aDy*aDy;
244 }
245