0025332: Visualization - rewrite MinMaxValues methods to using of Bnd_Box
[occt.git] / src / Bnd / Bnd_Box.cdl
CommitLineData
b311480e 1-- Created on: 1991-01-28
2-- Created by: Remi Lequette
3-- Copyright (c) 1991-1999 Matra Datavision
973c2be1 4-- Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 5--
973c2be1 6-- This file is part of Open CASCADE Technology software library.
b311480e 7--
d5f74e42 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
973c2be1 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--
973c2be1 14-- Alternatively, this file may be used under the terms of Open CASCADE
15-- commercial license or contractual agreement.
b311480e 16
7fd59977 17-- Modified : by Maria Pumborios at fri Apr 26
18-- add the method distance
7fd59977 19
20
21class Box from Bnd
22
23 ---Purpose: Describes a bounding box in 3D space.
24 -- A bounding box is parallel to the axes of the coordinates
25 -- system. If it is finite, it is defined by the three intervals:
26 -- - [ Xmin,Xmax ],
27 -- - [ Ymin,Ymax ],
28 -- - [ Zmin,Zmax ].
29 -- A bounding box may be infinite (i.e. open) in one or more
30 -- directions. It is said to be:
31 -- - OpenXmin if it is infinite on the negative side of the "X Direction";
32 -- - OpenXmax if it is infinite on the positive side of the "X Direction";
33 -- - OpenYmin if it is infinite on the negative side of the "Y Direction";
34 -- - OpenYmax if it is infinite on the positive side of the "Y Direction";
35 -- - OpenZmin if it is infinite on the negative side of the "Z Direction";
36 -- - OpenZmax if it is infinite on the positive side of the "Z Direction";
37 -- - WholeSpace if it is infinite in all six directions. In this
38 -- case, any point of the space is inside the box;
39 -- - Void if it is empty. In this case, there is no point included in the box.
40 -- A bounding box is defined by:
41 -- - six bounds (Xmin, Xmax, Ymin, Ymax, Zmin and
42 -- Zmax) which limit the bounding box if it is finite,
43 -- - eight flags (OpenXmin, OpenXmax, OpenYmin,
44 -- OpenYmax, OpenZmin, OpenZmax,
45 -- WholeSpace and Void) which describe the
46 -- bounding box if it is infinite or empty, and
47 -- - a gap, which is included on both sides in any direction
48 -- when consulting the finite bounds of the box.
49
50
51uses Pnt from gp,
52 Lin from gp,
53 Dir from gp,
54 Trsf from gp,
55 Pln from gp
56
57raises
58 ConstructionError from Standard
59
60is
61
62 Create returns Box from Bnd;
63 ---Purpose: Creates an empty Box.
64 -- The constructed box is qualified Void. Its gap is null.
65
66 SetWhole(me : in out) is static;
67 ---Purpose: Sets this bounding box so that it covers the whole of 3D space.
68 -- It is infinitely long in all directions.
69
70 SetVoid(me : in out) is static;
71 ---Purpose: Sets this bounding box so that it is empty. All points are outside a void box.
72
73 Set(me : in out; P : Pnt) is static;
74 ---Purpose: Sets this bounding box so that it bounds
75 -- - the point P. This involves first setting this bounding box
76 -- to be void and then adding the point P.
77
78 Set(me : in out; P : Pnt; D : Dir) is static;
79 ---Purpose: Sets this bounding box so that it bounds
80 --- the half-line defined by point P and direction D, i.e. all
81 -- points M defined by M=P+u*D, where u is greater than
82 -- or equal to 0, are inside the bounding volume. This
83 -- involves first setting this box to be void and then adding the half-line.
84
85 Update(me : in out; aXmin, aYmin, aZmin, aXmax, aYmax, aZmax : Real)
86 ---Purpose: Enlarges this bounding box, if required, so that it
87 -- contains at least:
88 -- - interval [ aXmin,aXmax ] in the "X Direction",
89 -- - interval [ aYmin,aYmax ] in the "Y Direction",
90 -- - interval [ aZmin,aZmax ] in the "Z Direction";
91 is static;
92
93 Update(me : in out; X,Y,Z : Real)
94 ---Purpose: Adds a point of coordinates (X,Y,Z) to this bounding box.
95 is static;
96
97 GetGap(me) returns Real
98 ---Purpose: Returns the gap of this bounding box.
99 is static;
100
101 SetGap(me : in out; Tol : Real)
102 ---Purpose: Set the gap of this bounding box to abs(Tol).
103 is static;
104
105 Enlarge(me : in out; Tol : Real)
106 ---Purpose: Enlarges the box with a tolerance value.
107 -- (minvalues-Abs(<tol>) and maxvalues+Abs(<tol>))
108 -- This means that the minimum values of its X, Y and Z
109 -- intervals of definition, when they are finite, are reduced by
110 -- the absolute value of Tol, while the maximum values are
111 -- increased by the same amount.
112 is static;
113
ed063270 114 Get (me; theXmin, theYmin, theZmin, theXmax, theYmax, theZmax : out Real)
115 ---Purpose: Returns the bounds of this bounding box. The gap is included.
116 -- If this bounding box is infinite (i.e. "open"), returned values
117 -- may be equal to +/- Precision::Infinite().
118 -- Standard_ConstructionError exception will be thrown if the box is void.
7fd59977 119 raises ConstructionError -- if IsVoid()
120 is static;
ed063270 121
122 CornerMin(me) returns Pnt from gp
123 ---Purpose: Returns the lower corner of this bounding box. The gap is included.
124 -- If this bounding box is infinite (i.e. "open"), returned values
125 -- may be equal to +/- Precision::Infinite().
126 -- Standard_ConstructionError exception will be thrown if the box is void.
127 raises ConstructionError -- if IsVoid()
128 is static;
129
130 CornerMax(me) returns Pnt from gp
131 ---Purpose: Returns the upper corner of this bounding box. The gap is included.
132 -- If this bounding box is infinite (i.e. "open"), returned values
133 -- may be equal to +/- Precision::Infinite().
134 -- Standard_ConstructionError exception will be thrown if the box is void.
135 raises ConstructionError -- if IsVoid()
136 is static;
137
7fd59977 138 OpenXmin(me : in out)
139 ---Purpose: The Box will be infinitely long in the Xmin
140 -- direction.
141 ---Level: Public
142 is static;
143
144 OpenXmax(me : in out)
145 ---Purpose: The Box will be infinitely long in the Xmax
146 -- direction.
147 ---Level: Public
148 is static;
149
150 OpenYmin(me : in out)
151 ---Purpose: The Box will be infinitely long in the Ymin
152 -- direction.
153 ---Level: Public
154 is static;
155
156 OpenYmax(me : in out)
157 ---Purpose: The Box will be infinitely long in the Ymax
158 -- direction.
159 ---Level: Public
160 is static;
161
162 OpenZmin(me : in out)
163 ---Purpose: The Box will be infinitely long in the Zmin
164 -- direction.
165 ---Level: Public
166 is static;
167
168 OpenZmax(me : in out)
169 ---Purpose: The Box will be infinitely long in the Zmax
170 -- direction.
171 ---Level: Public
172 is static;
173
174 IsOpenXmin(me) returns Boolean
175 ---Purpose: Returns true if this bounding box is open in the Xmin direction.
176 is static;
177
178 IsOpenXmax(me) returns Boolean
179 ---Purpose: Returns true if this bounding box is open in the Xmax direction.
180 is static;
181
182 IsOpenYmin(me) returns Boolean
183 ---Purpose: Returns true if this bounding box is open in the Ymix direction.
184 is static;
185
186 IsOpenYmax(me) returns Boolean
187 ---Purpose: Returns true if this bounding box is open in the Ymax direction.
188 is static;
189
190 IsOpenZmin(me) returns Boolean
191 ---Purpose: Returns true if this bounding box is open in the Zmin direction.
192 is static;
193
194 IsOpenZmax(me) returns Boolean
195 ---Purpose: Returns true if this bounding box is open in the Zmax direction.
196 is static;
197
198 IsWhole(me) returns Boolean
199 --- Purpose: Returns true if this bounding box is infinite in all 6 directions (WholeSpace flag).
200 is static;
201
202 IsVoid(me) returns Boolean
203 ---Purpose: Returns true if this bounding box is empty (Void flag).
204 is static;
205
206 IsXThin(me; tol : Real) returns Boolean
207 ---Purpose: true if xmax-xmin < tol.
208 ---Level: Public
209 is static;
210
211 IsYThin(me; tol : Real) returns Boolean
212 ---Purpose: true if ymax-ymin < tol.
213 ---Level: Public
214 is static;
215
216 IsZThin(me; tol : Real) returns Boolean
217 ---Purpose: true if zmax-zmin < tol.
218 ---Level: Public
219 is static;
220
221 IsThin(me; tol : Real) returns Boolean
222 ---Purpose: Returns true if IsXThin, IsYThin and IsZThin are all true,
223 -- i.e. if the box is thin in all three dimensions.
224 ---Level: Public
225 is static;
226
227 Transformed(me; T : Trsf from gp)
228 ---Purpose: Returns a bounding box which is the result of applying the
229 -- transformation T to this bounding box.
230 -- Warning
231 -- Applying a geometric transformation (for example, a
232 -- rotation) to a bounding box generally increases its
233 -- dimensions. This is not optimal for algorithms which use it.
234 returns Box from Bnd
235 is static;
236
237 Add(me : in out; Other : Box)
238 is static;
239 ---Purpose: Adds the box <Other> to <me>.
240 ---Level: Public
241
242 Add(me : in out; P : Pnt)
243 is static;
244 ---Purpose: Adds a Pnt to the box.
245 ---Level: Public
246
247 Add(me : in out; P : Pnt; D : Dir)
248 is static;
249 ---Purpose: Extends <me> from the Pnt <P> in the direction <D>.
250 ---Level: Public
251
252 Add(me : in out; D : Dir)
253 is static;
254 ---Purpose: Extends the Box in the given Direction, i.e. adds
255 -- an half-line. The box may become infinite in
256 -- 1,2 or 3 directions.
257 ---Level: Public
258
259 IsOut(me; P : Pnt from gp) returns Boolean
260 ---Purpose: Returns True if the Pnt is out the box.
261 ---Level: Public
262 is static;
263
264 IsOut(me; L : Lin from gp) returns Boolean
265 ---Purpose: Returns False if the line intersects the box.
266 ---Level: Public
267 is static;
268
269 IsOut(me; P : Pln from gp) returns Boolean
270 ---Purpose: Returns False if the plane intersects the box.
271 ---Level: Public
272 is static;
273
274 IsOut(me; Other : Box) returns Boolean
275 is static;
276 ---Purpose: Returns False if the <Box> intersects or is inside <me>.
277 ---Level: Public
278
279 IsOut(me; Other : Box; T : Trsf from gp) returns Boolean
280 is static;
281 ---Purpose: Returns False if the transformed <Box> intersects
282 -- or is inside <me>.
283 ---Level: Public
284
285 IsOut(me; T1 : Trsf from gp; Other : Box; T2 : Trsf from gp)
286 returns Boolean
287 is static;
288 ---Purpose: Returns False if the transformed <Box> intersects
289 -- or is inside the transformed box <me>.
290 ---Level: Public
291
292 IsOut(me; P1, P2: Pnt from gp; D: Dir from gp)
293 returns Boolean
294 is static;
295 ---Purpose: Returns False if the flat band lying between two parallel
296 -- lines represented by their reference points <P1>, <P2> and
297 -- direction <D> intersects the box.
298 ---Level: Public
299
300 Distance (me; Other : Box) returns Real is static;
301 --- Purpose : Computes the minimum distance between two boxes.
302
303 Dump (me) is static;
304
305 SquareExtent(me) returns Real;
306 --- Purpose : Computes the squared diagonal of me.
307 ---C++: inline
308
309fields Xmin : Real;
310 Xmax : Real;
311 Ymin : Real;
312 Ymax : Real;
313 Zmin : Real;
314 Zmax : Real;
315 Gap : Real;
316 Flags : Integer; -- 8 flags
317
318end Box ;