0025477: Boolean Operations with additional tolerance - Fuzzy Boolean operations
[occt.git] / src / BRepAlgoAPI / BRepAlgoAPI_Section.cdl
1 -- Created on: 1994-02-18
2 -- Created by: Remi LEQUETTE
3 -- Copyright (c) 1994-1999 Matra Datavision
4 -- Copyright (c) 1999-2014 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 -- modified by Michael KLOKOV  Wed Mar  6 15:01:25 2002
18
19 class Section from BRepAlgoAPI  
20     inherits BooleanOperation from BRepAlgoAPI
21
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. 
45
46 uses
47     Pln   from gp,
48     Shape from TopoDS,
49     Surface from Geom,
50     Curve   from Geom2d,
51     PaveFiller from BOPAlgo,
52     ListOfShape from TopTools
53     
54 is
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     
66
67     Create(Sh1,Sh2 : Shape from TopoDS;
68             PerformNow : Boolean = Standard_True) 
69         returns Section from BRepAlgoAPI;
70     ---Purpose: see upper
71     ---Level: Public
72      
73
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      
81
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      
89
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  
172
173     Init1(me : out; 
174             S1 : Shape from TopoDS);
175      ---Purpose: initialize first part
176      ---Level: Public
177  
178     Init1(me : out; 
179             Pl : Pln from gp);
180      ---Purpose: initialize first part
181      ---Level: Public
182  
183     Init1(me : out; 
184             Sf : Surface from Geom);
185      ---Purpose: initialize first part
186      ---Level: Public
187  
188     Init2(me : out; 
189             S2 : Shape from TopoDS);
190      ---Purpose: initialize second part
191      ---Level: Public
192  
193     Init2(me : out; 
194             Pl : Pln from gp);
195      ---Purpose: initialize second part
196      ---Level: Public
197  
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.
205  
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.
226  
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. 
232
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.
248  
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      
296
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.
310
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.
333
334     InitParameters(me: out) 
335         is private;
336     ---Level: Private
337      
338
339 fields
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     
346 end Section from BRepAlgoAPI;