CommitLineData
7fd59977 1-- File: Box2d.cdl
2-- Created: Mon Jan 28 11:51:08 1991
3-- Author: Remi Lequette
4-- <rle@topsn3>
6
7
8class Box2d from Bnd
9
10 ---Purpose: Describes a bounding box in 2D space.
11 -- A bounding box is parallel to the axes of the coordinates
12 -- system. If it is finite, it is defined by the two intervals:
13 -- - [ Xmin,Xmax ], and
14 -- - [ Ymin,Ymax ].
15 -- A bounding box may be infinite (i.e. open) in one or more
16 -- directions. It is said to be:
17 -- - OpenXmin if it is infinite on the negative side of the "X Direction";
18 -- - OpenXmax if it is infinite on the positive side of the "X Direction";
19 -- - OpenYmin if it is infinite on the negative side of the "Y Direction";
20 -- - OpenYmax if it is infinite on the positive side of the "Y Direction";
21 -- - WholeSpace if it is infinite in all four directions. In
22 -- this case, any point of the space is inside the box;
23 -- - Void if it is empty. In this case, there is no point included in the box.
24 -- A bounding box is defined by four bounds (Xmin, Xmax, Ymin and Ymax) which
25 -- limit the bounding box if it is finite, six flags (OpenXmin, OpenXmax, OpenYmin,
26 -- OpenYmax, WholeSpace and Void) which describe the bounding box if it is infinite or empty, and
27 -- - a gap, which is included on both sides in any direction when consulting the finite bounds of the box.
28
29
30uses Pnt2d from gp,
31 Dir2d from gp,
32 Lin2d from gp,
33 Trsf2d from gp
34
35raises
36 ConstructionError from Standard
37
38is
39
40 Create returns Box2d from Bnd;
41 ---Purpose: Creates an empty 2D bounding box.
42 -- The constructed box is qualified Void. Its gap is null.
43 ---C++: inline
44
45 SetWhole(me : in out) is static;
46 ---Purpose: Sets this bounding box so that it covers the whole 2D
47 -- space, i.e. it is infinite in all directions.
48 ---C++: inline
49
50 SetVoid(me : in out) is static;
51 ---Purpose: Sets this 2D bounding box so that it is empty. All points are outside a void box.
52 ---C++: inline
53
54 Set(me : in out; P : Pnt2d) is static;
55 ---Purpose: Sets this 2D bounding box so that it bounds
56 -- the point P. This involves first setting this bounding box
57 -- to be void and then adding the point PThe rectangle bounds the point <P>.
58 ---C++: inline
59
60 Set(me : in out; P : Pnt2d; D : Dir2d) is static;
61 ---Purpose: Sets this 2D bounding box so that it bounds
62 -- the half-line defined by point P and direction D, i.e. all
63 -- points M defined by M=P+u*D, where u is greater than
64 -- or equal to 0, are inside the bounding area. This involves
65 -- first setting this 2D box to be void and then adding the half-line.
66 ---C++: inline
67
68 Update(me : in out; aXmin, aYmin, aXmax, aYmax : Real)
69 ---Purpose: Enlarges this 2D bounding box, if required, so that it
70 -- contains at least:
71 -- - interval [ aXmin,aXmax ] in the "X Direction",
72 -- - interval [ aYmin,aYmax ] in the "Y Direction"
73 is static;
74
75 Update(me : in out; X,Y : Real)
76 ---Purpose: Adds a point of coordinates (X,Y) to this bounding box.
77 is static;
78
79 GetGap(me) returns Real
80 ---Purpose: Returns the gap of this 2D bounding box.
81 ---C++: inline
82 is static;
83
84 SetGap(me : in out; Tol : Real)
85 ---Purpose: Set the gap of this 2D bounding box to abs(Tol).
86 ---C++: inline
87 is static;
88
89 Enlarge(me : in out; Tol : Real)
90 ---Purpose: Enlarges the box with a tolerance value.
91 -- This means that the minimum values of its X and Y
92 -- intervals of definition, when they are finite, are reduced by
93 -- the absolute value of Tol, while the maximum values are
94 -- increased by the same amount.
95 ---C++: inline
96 is static;
97
98 Get(me; aXmin, aYmin, aXmax, aYmax : out Real)
99 ---Purpose: Returns the bounds of this 2D bounding box.
100 -- The gap is included. If this bounding box is infinite (i.e. "open"), returned values
101 -- may be equal to +/- Precision::Infinite().
102 raises ConstructionError -- if IsVoid()
103 is static;
104
105 OpenXmin(me : in out)
106 ---Purpose: The Box will be infinitely long in the Xmin direction.
107 ---Level: Public
108 ---C++: inline
109 is static;
110
111 OpenXmax(me : in out)
112 ---Purpose: The Box will be infinitely long in the Xmax direction.
113 ---Level: Public
114 ---C++: inline
115 is static;
116
117 OpenYmin(me : in out)
118 ---Purpose: The Box will be infinitely long in the Ymin direction.
119 ---Level: Public
120 ---C++: inline
121 is static;
122
123 OpenYmax(me : in out)
124 ---Purpose: The Box will be infinitely long in the Ymax direction.
125 ---Level: Public
126 ---C++: inline
127 is static;
128
129 IsOpenXmin(me) returns Boolean
130 ---Purpose: Returns true if this bounding box is open in the Xmin direction.
131 ---C++: inline
132 is static;
133
134 IsOpenXmax(me) returns Boolean
135 ---Purpose: Returns true if this bounding box is open in the Xmax direction.
136 ---C++: inline
137 is static;
138
139 IsOpenYmin(me) returns Boolean
140 ---Purpose: Returns true if this bounding box is open in the Ymin direction.
141 ---C++: inline
142 is static;
143
144 IsOpenYmax(me) returns Boolean
145 ---Purpose: Returns true if this bounding box is open in the Ymax direction.
146 ---C++: inline
147 is static;
148
149 IsWhole(me) returns Boolean is static;
150 ---Purpose:
151 -- Returns true if this bounding box is infinite in all 4
152 -- directions (Whole Space flag).
153 ---C++: inline
154
155 IsVoid(me) returns Boolean is static;
156 ---Purpose:
157 -- Returns true if this 2D bounding box is empty (Void flag).
158 ---C++: inline
159
160 Transformed(me; T : Trsf2d from gp)
161 ---Purpose: Returns a bounding box which is the result of applying the
162 -- transformation T to this bounding box.
163 -- Warning
164 -- Applying a geometric transformation (for example, a
165 -- rotation) to a bounding box generally increases its
166 -- dimensions. This is not optimal for algorithms which use it.
167
168 returns Box2d from Bnd is static;
169
170 Add(me : in out; Other : Box2d) is static;
171 ---Purpose: Adds the 2d box <Other> to <me>.
172 ---Level: Public
173
174 Add(me : in out; P : Pnt2d) is static;
175 ---Purpose: Adds the 2d pnt <P> to <me>.
176 ---Level: Public
177 ---C++: inline
178
179 Add(me : in out; P : Pnt2d; D : Dir2d) is static;
180 ---Purpose: Extends <me> from the Pnt <P> in the direction <D>.
181 ---Level: Public
182 ---C++: inline
183
184 Add(me : in out; D : Dir2d) is static;
185 ---Purpose: Extends the Box in the given Direction, i.e. adds
186 -- a half-line. The box may become infinite in 1 or 2
187 -- directions.
188 ---Level: Public
189
190 IsOut(me; P : Pnt2d) returns Boolean is static;
191 ---Purpose: Returns True if the 2d pnt <P> is out <me>.
192 ---Level: Public
193
194 IsOut(me; Other : Box2d) returns Boolean is static;
195 ---Purpose: Returns True if <Box2d> is out <me>.
196 ---Level: Public
197
198 IsOut(me; Other : Box2d; T : Trsf2d from gp) returns Boolean is static;
199 ---Purpose: Returns True if transformed <Box2d> is out <me>.
200 ---Level: Public
201 ---C++: inline
202
203 IsOut(me; T1 : Trsf2d from gp; Other : Box2d; T2 : Trsf2d from gp)
204 returns Boolean is static;
205 ---Purpose: Compares a transformed bounding with a transformed
206 -- bounding. The default implementation is to make a copy
207 -- of <me> and <Other>, to transform them and to test.
208 ---Level: Public
209 ---C++: inline
210
211 Dump(me) is static;
212
213
214fields Xmin : Real;
215 Xmax : Real;
216 Ymin : Real;
217 Ymax : Real;
218 Gap : Real;
219 Flags : Integer; -- 6 flags
220
221end Box2d;