0025584: Wrong result obtained by PerformInfinitePoint Test
[occt.git] / src / BRepAlgoAPI / BRepAlgoAPI_Section.cdl
CommitLineData
b311480e 1-- Created on: 1994-02-18
2-- Created by: Remi LEQUETTE
3-- Copyright (c) 1994-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 Michael KLOKOV Wed Mar 6 15:01:25 2002
7fd59977 18
b1d15f53 19class Section from BRepAlgoAPI
20 inherits BooleanOperation from BRepAlgoAPI
7fd59977 21
b1d15f53 22 ---Purpose: Computes the intersection of two shapes or geometries.
23 -- Geometries can be surfaces of planes.
24 -- Geometries are converted to faces
25 -- When a geometry has been converted to
26 -- topology the created shape can be found using
27 -- the methods Shape1 and Shape2 inherited from the class BooleanOperation.
28 -- The result (Shape() method) is a compound containing
29 -- edges built on intersection curves.
30 -- By default, the section is performed immediatly in
31 -- class constructors, with default values :
32 -- - geometries built are NOT approximated.
33 -- - PCurves are NOT computed on both parts.
34 -- Example : giving two shapes S1,S2 accessing faces,
35 -- let compute the section edges R on S1,S2,
36 -- performing approximation on new curves,
37 -- performing PCurve on part 1 but not on part 2 :
38 -- Standard_Boolean PerformNow = Standard_False;
39 -- BRepBoolAPI_Section S(S1,S2,PerformNow);
40 -- S.ComputePCurveOn1(Standard_True);
41 -- S.Approximation(Standard_True);
42 -- S.Build();
43 -- TopoDS_Shape R = S.Shape();
44 -- On Null Shapes of geometries, NotDone() is called.
7fd59977 45
46uses
47 Pln from gp,
48 Shape from TopoDS,
49 Surface from Geom,
50 Curve from Geom2d,
4e57c75e 51 PaveFiller from BOPAlgo,
7fd59977 52 ListOfShape from TopTools
53
54is
b1d15f53 55 Create
56 returns Section from BRepAlgoAPI;
57 ---C++: alias "Standard_EXPORT virtual ~BRepAlgoAPI_Section();"
58 --- Purpose: Empty constructor
59
60
61 Create (S1,S2 : Shape from TopoDS;
62 aDSF:PaveFiller from BOPAlgo;
63 PerformNow : Boolean = Standard_True)
64 returns Section from BRepAlgoAPI;
65
7fd59977 66
67 Create(Sh1,Sh2 : Shape from TopoDS;
b1d15f53 68 PerformNow : Boolean = Standard_True)
69 returns Section from BRepAlgoAPI;
70 ---Purpose: see upper
71 ---Level: Public
72
7fd59977 73
b1d15f53 74 Create(Sh : Shape from TopoDS;
75 Pl : Pln from gp;
76 PerformNow : Boolean = Standard_True)
77 returns Section from BRepAlgoAPI;
78 ---Purpose: see upper
79 ---Level: Public
80
7fd59977 81
b1d15f53 82 Create(Sh : Shape from TopoDS;
83 Sf : Surface from Geom;
84 PerformNow : Boolean = Standard_True)
85 returns Section from BRepAlgoAPI;
86 ---Purpose: see upper
87 ---Level: Public
88
7fd59977 89
b1d15f53 90 Create(Sf : Surface from Geom;
91 Sh : Shape from TopoDS;
92 PerformNow : Boolean = Standard_True)
93 returns Section from BRepAlgoAPI;
94 ---Purpose: see upper
95 ---Level: Public
96
97 Create(Sf1 : Surface from Geom;
98 Sf2 : Surface from Geom;
99 PerformNow : Boolean = Standard_True)
100 returns Section from BRepAlgoAPI;
101 ---Purpose: This and the above classes construct a framework for
102 -- computing the section lines of:
103 -- - two shapes Sh1 and Sh2, or
104 -- - shape Sh and plane Pl, or
105 -- - shape Sh and surface Sf, or
106 -- - surface Sf and shape Sh, or
107 -- - two surfaces Sf1 and Sf2,
108 -- and builds a result if PerformNow equals true, its
109 -- default value. If PerformNow equals false, the intersection
110 -- will be computed later by the function Build.
111 -- The constructed shape will be returned by the function Shape.
112 -- This is a compound object composed of edges. These
113 -- intersection edges may be built:
114 -- - on new intersection lines, or
115 -- - on coincident portions of edges in the two intersected shapes.
116 -- These intersection edges are independent: they are not
117 -- chained or grouped in wires. If no intersection edge exists, the
118 -- result is an empty compound object.
119 -- Note that other objects than TopoDS_Shape shapes involved in
120 -- these syntaxes are converted into faces or shells before
121 -- performing the computation of the intersection. A shape
122 -- resulting from this conversion can be retrieved with the
123 -- function Shape1 or Shape2.
124 -- Parametric 2D curves on intersection edges
125 -- No parametric 2D curve (pcurve) is defined for each elementary
126 -- edge of the result. To attach such parametric curves to the
127 -- constructed edges you may use a constructor with the PerformNow
128 -- flag equal to false; then you use:
129 -- - the function ComputePCurveOn1 to ask for
130 -- the additional computation of a pcurve in the parametric
131 -- space of the first shape,
132 -- - the function ComputePCurveOn2 to ask for
133 -- the additional computation of a pcurve in the parametric
134 -- space of the second shape, in the end,
135 -- - the function Build to construct the result.
136 -- Approximation of intersection edges
137 -- The underlying 3D geometry attached to each elementary edge
138 -- of the result is:
139 -- - analytic where possible, provided the corresponding
140 -- geometry corresponds to a type of analytic curve
141 -- defined in the Geom package; for example, the intersection
142 -- of a cylindrical shape with a plane gives an ellipse or a circle;
143 -- - or elsewhere, given as a succession of points grouped
144 -- together in a BSpline curve of degree 1.
145 -- If you prefer to have an attached 3D geometry which is a
146 -- BSpline approximation of the computed set of points on
147 -- computed elementary intersection edges whose underlying geometry
148 -- is not analytic, you may use a constructor with the PerformNow
149 -- flag equal to false. Then you use:
150 -- - the function Approximation to ask for this
151 -- computation option, and
152 -- - the function Build to construct the result.
153 -- - Note that as a result, approximations will only be
154 -- computed on edges built on new intersection lines.
155 -- - Example
156 -- You may also combine these computation options. In the following example:
157 -- - each elementary edge of the computed intersection,
158 -- built on a new intersection line, which does not
159 -- correspond to an analytic Geom curve, will be approximated by
160 -- a BSpline curve whose degree is not greater than 8.
161 -- - each elementary edge built on a new intersection line, will have:
162 -- - a pcurve in the parametric space of the intersected face of shape S1,
163 -- - no pcurve in the parametric space of the intersected face of shape S2.
164 -- // TopoDS_Shape S1 = ... , S2 = ... ;
165 -- Standard_Boolean PerformNow = Standard_False;
166 -- BRepAlgoAPI_Section S ( S1, S2, PerformNow );
167 -- S.ComputePCurveOn1 (Standard_True);
168 -- S.Approximation (Standard_True);
169 -- S.Build();
170 -- TopoDS_Shape R = S.Shape();
171
7fd59977 172
b1d15f53 173 Init1(me : out;
174 S1 : Shape from TopoDS);
175 ---Purpose: initialize first part
176 ---Level: Public
7fd59977 177
b1d15f53 178 Init1(me : out;
179 Pl : Pln from gp);
180 ---Purpose: initialize first part
181 ---Level: Public
7fd59977 182
b1d15f53 183 Init1(me : out;
184 Sf : Surface from Geom);
185 ---Purpose: initialize first part
186 ---Level: Public
7fd59977 187
b1d15f53 188 Init2(me : out;
189 S2 : Shape from TopoDS);
190 ---Purpose: initialize second part
191 ---Level: Public
7fd59977 192
b1d15f53 193 Init2(me : out;
194 Pl : Pln from gp);
195 ---Purpose: initialize second part
196 ---Level: Public
7fd59977 197
b1d15f53 198 Init2(me : out;
199 Sf : Surface from Geom);
200 ---Purpose: Reinitializes the first and the
201 -- second parts on which this algorithm is going to perform
202 -- the intersection computation. This is done with either: the
203 -- surface Sf, the plane Pl or the shape Sh.
204 -- You use the function Build to construct the result.
7fd59977 205
b1d15f53 206 Approximation(me : out;
207 B : Boolean from Standard);
208 ---Level: Public
209 ---Purpose: Defines an option for computation
210 -- of further intersections. This computation will be performed by
211 -- the function Build in this framework.
212 -- By default, the underlying 3D geometry attached to each
213 -- elementary edge of the result of a computed intersection is:
214 -- - analytic where possible, provided the corresponding
215 -- geometry corresponds to a type of analytic curve defined in
216 -- the Geom package; for example the intersection of a
217 -- cylindrical shape with a plane gives an ellipse or a circle;
218 -- - or elsewhere, given as a succession of points grouped
219 -- together in a BSpline curve of degree 1. If Approx equals
220 -- true, when further computations are performed in this framework
221 -- with the function Build, these edges will have an attached 3D
222 -- geometry which is a BSpline approximation of the computed
223 -- set of points.
224 -- Note that as a result, approximations will be computed
225 -- on edges built only on new intersection lines.
7fd59977 226
b1d15f53 227 ComputePCurveOn1(me : out;
228 B : Boolean from Standard);
229 ---Level: Public
230 ---Purpose:
231 -- Indicates if the Pcurve must be (or not) performed on first part.
7fd59977 232
b1d15f53 233 ComputePCurveOn2(me : out;
234 B : Boolean from Standard);
235 ---Level: Public
236 ---Purpose: Define options for the computation of further
237 -- intersections, which will be performed by the function Build
238 -- in this framework.
239 -- By default, no parametric 2D curve (pcurve) is defined for the
240 -- elementary edges of the result. If ComputePCurve1 equals true,
241 -- further computations performed in this framework with the function
242 -- Build will attach an additional pcurve in the parametric space of
243 -- the first shape to the constructed edges.
244 -- If ComputePCurve2 equals true, the additional pcurve will be
245 -- attached to the constructed edges in the parametric space of the
246 -- second shape.
247 -- These two functions may be used together.
7fd59977 248
b1d15f53 249 Build(me : in out)
250 is redefined;
251 ---Purpose: Performs the computation of
252 -- section lines between two parts defined at the time of
253 -- construction of this framework or reinitialized with the Init1 and
254 -- Init2 functions.
255 -- The constructed shape will be returned by the function Shape.
256 -- This is a compound object composed of edges. These
257 -- intersection edges may be built:
258 -- - on new intersection lines, or
259 -- - on coincident portions of edges in the two intersected shapes.
260 -- These intersection edges are independent: they are not chained
261 -- or grouped into wires.
262 -- If no intersection edge exists, the result is an empty compound object.
263 -- The shapes involved in the construction of section lines can
264 -- be retrieved with the function Shape1 or Shape2. Note that other
265 -- objects than TopoDS_Shape shapes given as arguments at the
266 -- construction time of this framework, or to the Init1 or
267 -- Init2 function, are converted into faces or shells before
268 -- performing the computation of the intersection.
269 -- Parametric 2D curves on intersection edges
270 -- No parametric 2D curve (pcurve) is defined for the elementary
271 -- edges of the result. To attach parametric curves like this to
272 -- the constructed edges you have to use:
273 -- - the function
274 -- ComputePCurveOn1 to ask for the additional computation of a
275 -- pcurve in the parametric space of the first shape,
276 -- - the function
277 -- ComputePCurveOn2 to ask for the additional computation of a
278 -- pcurve in the parametric space of the second shape.
279 -- This must be done before calling this function.
280 -- Approximation of intersection edges
281 -- The underlying 3D geometry attached to each elementary edge of the result is:
282 -- - analytic (where possible) provided the corresponding
283 -- geometry corresponds to a type of analytic curve defined in
284 -- the Geom package; for example, the intersection of a
285 -- cylindrical shape with a plane gives an ellipse or a circle; or
286 -- - elsewhere, given as a succession of points grouped
287 -- together in a BSpline curve of degree 1.
288 -- If, on computed elementary intersection edges whose
289 -- underlying geometry is not analytic, you prefer to have an
290 -- attached 3D geometry which is a Bspline approximation of the
291 -- computed set of points, you have to use the function Approximation
292 -- to ask for this computation option before calling this function.
293 -- You may also have combined these computation options: look at the
294 -- example given above to illustrate the use of the constructors.
295
7fd59977 296
b1d15f53 297 HasAncestorFaceOn1(me;
298 E : Shape from TopoDS;
299 F : out Shape from TopoDS)
300 returns Boolean from Standard;
301 ---Level: Public
302 ---Purpose:
303 -- get the face of the first part giving section edge <E>.
304 -- Returns True on the 3 following conditions :
305 -- 1/ <E> is an edge returned by the Shape() method.
306 -- 2/ First part of section performed is a shape.
307 -- 3/ <E> is built on a intersection curve (i.e <E>
308 -- is not the result of common edges)
309 -- When False, F remains untouched.
7fd59977 310
b1d15f53 311 HasAncestorFaceOn2(me;
312 E : Shape from TopoDS;
313 F : out Shape from TopoDS)
314 returns Boolean from Standard;
315 ---Purpose: Identifies the ancestor faces of
316 -- the intersection edge E resulting from the last
317 -- computation performed in this framework, that is, the faces of
318 -- the two original shapes on which the edge E lies:
319 -- - HasAncestorFaceOn1 gives the ancestor face in the first shape, and
320 -- - HasAncestorFaceOn2 gives the ancestor face in the second shape.
321 -- These functions return true if an ancestor face F is found, or false if not.
322 -- An ancestor face is identifiable for the edge E if the following
323 -- conditions are satisfied:
324 -- - the first part on which this algorithm performed its
325 -- last computation is a shape, that is, it was not given as
326 -- a surface or a plane at the time of construction of this
327 -- algorithm or at a later time by the Init1 function,
328 -- - E is one of the elementary edges built by the
329 -- last computation of this section algorithm.
330 -- To use these functions properly, you have to test the returned
331 -- Boolean value before using the ancestor face: F is significant
332 -- only if the returned Boolean value equals true.
7fd59977 333
b1d15f53 334 InitParameters(me: out)
335 is private;
336 ---Level: Private
337
7fd59977 338
339fields
340 myshapeisnull : Boolean from Standard;
341 myparameterschanged : Boolean from Standard;
342 myApprox : Boolean from Standard;
343 myComputePCurve1 : Boolean from Standard;
344 myComputePCurve2 : Boolean from Standard;
345
346end Section from BRepAlgoAPI;