0022967: Boolean operations between two cylinders with orthogonal axis generate a...
[occt.git] / src / BOPTools / BOPTools_Tools3D.cdl
1 -- File:        BOP_Tools.cdl
2 -- Created:     Mon Apr  5 12:20:21 2001
3 -- Author:      Peter KURNEV
4 --              <pkv@irinox>
5 ---Copyright:    Matra Datavision 2001
6
7
8 class Tools3D from BOPTools
9
10         ---Purpose:  
11         --  The class contains handy static functions 
12         --  dealing with the topology 
13
14 uses  
15     Pln   from gp, 
16     Dir   from gp, 
17     Pnt   from gp,   
18     Pnt2d from gp,  
19     
20     Surface from Geom,
21     
22     Shape from TopoDS, 
23     Wire  from TopoDS, 
24     Face  from TopoDS,  
25     Edge  from TopoDS,
26     Solid from TopoDS,
27      
28     ShapeEnum   from TopAbs,     
29     Orientation from TopAbs, 
30     State       from TopAbs, 
31
32     ListOfShape from TopTools, 
33     Context     from IntTools, 
34
35     IndexedDataMapOfShapeListOfShape from TopTools
36
37 is  
38
39     SubShapesAmount        (myclass;  
40                     aS:  Shape from TopoDS; 
41                     aT:  ShapeEnum from TopAbs) 
42         returns Integer from Standard ;  
43         ---Purpose:   
44         -- Returns amount of sub-shapes of type <aT> 
45         -- for the shape <aS> 
46         --
47     IsConvexWire            (myclass;   
48                     aW:  Wire from TopoDS) 
49         returns Boolean from Standard ;   
50         ---Purpose:   
51         -- Returns TRUE if  
52         -- amount of the vertices <=  amount of the edges> 
53         -- for the wire <aW> 
54         --
55
56     RemoveSims  (myclass;    
57                     aF:  Face from TopoDS; 
58                     aContext: Context from IntTools); 
59         ---Purpose: 
60         -- Remove seam edges from face <aF> 
61         --
62     RemoveSims  (myclass;    
63                     aS:  Shape from TopoDS; 
64                     aContext: Context from IntTools); 
65         ---Purpose: 
66         -- Remove seam edges from all faces of shape <aS> 
67         --
68     EdgeOrientation  (myclass;  
69                     aEx:  Edge from TopoDS;          
70                     aF1:  Face from TopoDS;   
71                     aF2:  Face from TopoDS) 
72         returns Orientation from TopAbs;   
73         ---Purpose: 
74         -- For the draft section edge <aEx> computes orientation 
75         -- in accordance with vector product between normals to 
76         -- the faces <aF1>,  <aF2> 
77         --
78     IsSplitToReverse1  (myclass;  
79                     aE1:  Edge from TopoDS;          
80                     aE2:  Edge from TopoDS; 
81                     aContext: Context from IntTools) 
82         returns Boolean from Standard;
83         ---Purpose:  
84         -- Returns TRUE if direction of the edge  <aE1> is not                       
85         -- the same as for the edge <aE2>            
86         -- (using  projection) 
87         --
88     DoSplitSEAMOnFace (myclass;  
89                     aSp:  Edge from TopoDS;          
90                     aF :  Face from TopoDS);
91         ---Purpose:  
92         -- Make the edge <aSp> seam edge for the face <aF>                           
93         --
94         
95     --modified by NIZHNY-MKK  Mon Feb 17 15:02:01 2003.BEGIN
96     DoSplitSEAMOnFace (myclass;  
97                         theSplit  :  Edge from TopoDS;
98                         theSeam   :  Edge from TopoDS;
99                         theFace   :  Face from TopoDS;
100                         IsReversed: out Boolean from Standard)
101         returns Boolean from Standard;
102         ---Purpose:  
103         -- Make the edge <theSplit> seam edge for the face <theFace>
104         -- It uses pcurves of <theSeam> to make <theSplit> seam edge.
105         -- IsReversed is true if pcurves of <theSplit> and <theSeam> are
106         -- reversed according to each other.
107         -- Returns true if <theSplit> was made seam edge for <theFace>
108         --
109     --modified by NIZHNY-MKK  Mon Feb 17 15:02:04 2003.END
110     IsTouchCase  (myclass;  
111                     aEx:  Edge from TopoDS;          
112                     aF1:  Face from TopoDS;   
113                     aF2:  Face from TopoDS) 
114         returns Boolean from Standard; 
115         ---Purpose:  
116         -- Returns TRUE if the edge  <aEx> is section edge                   
117         -- between touching faces  <aF1>, <aF2>              
118         --
119     GetTangentToEdge (myclass;  
120                     aE:  Edge from TopoDS;           
121                     aT:  Real from Standard; 
122                     aD:out Dir from gp) 
123         returns Boolean from Standard;   
124         ---Purpose:   
125         -- Computes tangent (3D) for the edge <aE>  
126         -- at parameter <aT>           
127         -- Returns TRUE if the edge <aE> is not degenerated. 
128         --
129     GetTangentToEdge (myclass;  
130                     aE:  Edge from TopoDS;           
131                     aD:out Dir from gp) 
132         returns Boolean from Standard;    
133         ---Purpose:  
134         --- Computes tangent (3D) for the edge <aE>  
135         --- at arbitrary intermediate parameter           
136         --- Returns TRUE if the edge <aE> is not degenerated. 
137         ---
138     GetNormalToFaceOnEdge (myclass;  
139                     aE:  Edge from TopoDS;           
140                     aF:  Face from TopoDS;   
141                     aT:  Real from Standard; 
142                     aD:out Dir from gp); 
143         ---Purpose:  
144         --- Computes normal to the face <aF> for the point on the edge <aE>  
145         --- at parameter <aT>           
146         ---
147     GetNormalToFaceOnEdge (myclass;  
148                     aE:  Edge from TopoDS;           
149                     aF:  Face from TopoDS;   
150                     aD:out Dir from gp);         
151         ---Purpose:  
152         --- Computes normal to the face <aF> for the point on the edge <aE>  
153         --- at arbitrary intermediate parameter 
154         ---
155     GetBiNormal (myclass;  
156                     aE:  Edge from TopoDS;           
157                     aF:  Face from TopoDS; 
158                     aT:  Real from Standard;                                     
159                     aD:out Dir from gp);  
160         ---Purpose:   
161         --- Computes binormal to the face <aF> for the point on the edge <aE>  
162         --- at parameter <aT>           
163         ---
164     GetBiNormal (myclass;  
165                     aE:  Edge from TopoDS;           
166                     aF:  Face from TopoDS;   
167                     aD:out Dir from gp); 
168         ---Purpose:   
169         --- Computes binormal to the face <aF> for the point on the edge <aE>  
170         --- at arbitrary intermediate parameter            
171         ---
172     IsSplitToReverse(myclass;  
173                     aE :  Edge from TopoDS; 
174                     aSp:  Edge from TopoDS) 
175         returns Boolean from Standard; 
176         ---Purpose:  
177         --- Returns TRUE if direction of the edge  <aE1> is not                      
178         --- the same as for the edge <aE2>           
179         ---
180     GetAdjacentFace (myclass;  
181                     aF :  Face from TopoDS;
182                     aE :  Edge from TopoDS; 
183                     aEFMap: IndexedDataMapOfShapeListOfShape from TopTools; 
184                     anAdjF:out Face from TopoDS) 
185         returns Boolean from Standard;  
186         ---Purpose: 
187         --- Get face <anAdjF> that  is adjacent to the face <aF> through 
188         --- the edge <aE>  (using map EF <aEFMap>) 
189         --- Returns FALSE if adjacent face is not found 
190         ---
191     IsKeepTwice  (myclass;  
192                     aF1   :  Face from TopoDS;
193                     aF2   :  Face from TopoDS;
194                     aF2Adj:  Face from TopoDS;
195                     aSpEF2:  Edge from TopoDS) 
196         returns Boolean from Standard;  
197         ---Purpose: 
198         --- Returns TRUE if pair of faces <aF2> and <aF2Adj> 
199         --- that are adjacent faces through the edge <aSpEF2> 
200         --- crosses the face <aF1> by <aSpEF2> 
201         ---
202     SenseFlag    (myclass;  
203                     aNF1   :  Dir from gp;
204                     aNF2   :  Dir from gp) 
205         returns Integer from Standard;   
206         ---Purpose: 
207         --- Returns 1  if scalar product aNF1* aNF2>0.   
208         --- Returns 0  if directions aNF1 aNF2 coinside  
209         --- Returns -1 if scalar product aNF1* aNF2<0.      
210         ---
211     GetNormalToSurface    (myclass;  
212                     aS:  Surface from Geom; 
213                     U :  Real from Standard;
214                     V :  Real from Standard; 
215                     aD:out Dir from gp)
216         returns Boolean from Standard;   
217         ---Purpose:  
218         --- Compute normal <aD> to surface <aS> in point (U,V)  
219         --- Returns TRUE if directions aD1U, aD1V coinside 
220         ---
221     GetPlanes     (myclass;  
222                     aSp :  Edge from TopoDS;
223                     aE2 :  Edge from TopoDS; 
224                     aEFMap2: IndexedDataMapOfShapeListOfShape from TopTools; 
225                     aE1 :  Edge from TopoDS; 
226                     aF1 :  Face from TopoDS; 
227                     aST1:out State from TopAbs; 
228                     aContext: Context from IntTools); 
229         ---Purpose: 
230         --- Internal usage 
231         ---
232     Orientation  (myclass;  
233                     aE :  Edge from TopoDS; 
234                     aF :  Face from TopoDS) 
235         returns Orientation from TopAbs;  
236         ---Purpose: 
237         --- Get the orientation for the edge <aE> on the face <aF> 
238         --- Returns  TopAbs_INTERNAL if  the edge <aE> is not found 
239         --- on the face <aF> 
240         ---
241     SignDistance (myclass; 
242                     aP :  Pnt  from  gp; 
243                     aPL:  Pln  from  gp) 
244          returns Real from Standard; 
245         ---Purpose: 
246         --- Computes signed distance between the 3D-point <aP> 
247         --- and the plane <aPL>.   
248         ---
249         --  Warning:
250         --- The distance is not divided by sqrt(A*A+B*B+C*C) 
251         ---
252     GetApproxNormalToFaceOnEdge (myclass;  
253                     aE:  Edge from TopoDS;           
254                     aF:  Face from TopoDS;   
255                     aT:  Real from Standard;  
256                     aPx:out Pnt from gp;
257                     aD:out Dir from gp); 
258         ---Purpose:  
259         --- Computes normal to the face <aF> for the 3D-point that 
260         --- belonds to the edge <aE> at parameter <aT>. 
261         --  Output: 
262         --- aPx  -  the 3D-point where the normal computed 
263         --- aD   -  the normal; 
264         ---
265         --  Warning:
266         --- The normal is computed not exactly in the point on the 
267         --- edge, but in point that is near to the edge towards to 
268         --- the face material (so, we'll have approx. normal) 
269         ---
270     PointNearEdge   (myclass;   
271                     aE   :  Edge from TopoDS;        
272                     aF   :  Face from TopoDS;   
273                     aT   :  Real from Standard;  
274                     aDt2D:  Real from Standard;  
275                     aP2D :out Pnt2d from  gp; 
276                     aPx  :out Pnt from gp);  
277         ---Purpose: 
278         --- Compute the point <aPx>,  (<aP2D>)  that is near to  
279         --- the edge <aE>   at parameter <aT>  towards to the  
280         --- material of the face <aF>. The value of shifting in 
281         --- 2D is <aDt2D> 
282         ---
283     PointNearEdge   (myclass;   
284                     aE:  Edge from TopoDS;           
285                     aF:  Face from TopoDS;   
286                     aT:  Real from Standard;  
287                     aP2D:out Pnt2d from  gp; 
288                     aPx:out Pnt from gp);  
289         ---Purpose: 
290         --- Computes the point <aPx>,  (<aP2D>)  that is near to  
291         --- the edge <aE>   at parameter <aT>  towards to the  
292         --- material of the face <aF>. The value of shifting in 
293         --  2D is  dt2D=BOPTools_Tools3D::MinStepIn2d()
294         ---
295     PointNearEdge   (myclass;   
296                     aE:  Edge from TopoDS;           
297                     aF:  Face from TopoDS;   
298                     aP2D:out Pnt2d from  gp; 
299                     aPx:out Pnt from gp);   
300         ---Purpose: 
301         --- Compute the point <aPx>,  (<aP2D>)  that is near to  
302         --- the edge <aE>   at arbitrary  parameter  towards to the  
303         --- material of the face <aF>. The value of shifting in 
304         --  2D is  dt2D=BOPTools_Tools3D::MinStepIn2d()
305         ---
306     PointToCompare (myclass; 
307                     aP1: Pnt from gp;       
308                     aP2: Pnt from gp; 
309                     aF:  Face from TopoDS;                                               
310                     aPx:out Pnt from gp; 
311                     aContext:  Context from IntTools);  
312         ---Purpose: 
313         --- For 3D-point <aP1> find projection point <aPx> on the face <aF>. 
314         --- If the distance  (<aP1>, <aPx>) > TolF => 
315         --- For 3D-point <aP2> find projection point <aPx> on the face <aF>.    
316         --- If the distance  (<aP2>, <aPx>) > TolF => returns <aP1> 
317         ---
318     GetPlane       (myclass;  
319                     aSp :  Edge from TopoDS;
320                     aE1 :  Edge from TopoDS; 
321                     aF1 :  Face from TopoDS; 
322                     aF2 :  Face from TopoDS; 
323                     aST:out State from TopAbs; 
324                     aContext: Context from IntTools); 
325         ---Purpose:  
326         --- Compute 3D-state for the point on the split edge <aSp>  
327         --- (with base edge <aE1> and the face <aF1>) comparing with 
328         --- the face <aF2> 
329         ---
330     GetPointState  (myclass;  
331                     aSp    :  Edge from TopoDS;
332                     aEF2   :  Edge from TopoDS; 
333                     aF2Adj :  Face from TopoDS; 
334                     aF1    :  Face from TopoDS; 
335                     aST:out State from TopAbs);  
336         ---Purpose:  
337         --- Compute 3D-state for the point on the split edge <aSp>  
338         --- (with base edge <aEF2> and the adjacent face <aF2Adj>) comparing with 
339         --- the face <aF1> 
340         ---
341          
342     OrientEdgeOnFace  (myclass;  
343                     aE    :  Edge from TopoDS;
344                     aF    :  Face from TopoDS;  
345                     aER   : out  Edge from TopoDS); 
346         ---Purpose:  
347         --- Get the edge <aER> from the face <aF> that is the same as   
348         --- the edge <aE>    
349         ---
350
351     OrientTouchEdgeOnF1  (myclass;    
352                     aSp:  Edge from TopoDS;          
353                     aEx:  Edge from TopoDS;          
354                     aF1:  Face from TopoDS;   
355                     aF2:  Face from TopoDS) 
356         returns Orientation from TopAbs;    
357         ---Purpose: 
358         --- Computes orientation for the split edge <aSp>   
359         --- [with base edge <aEx> and face <aF2>] on the 
360         --- face <aF1> 
361         ---
362     GetSeams  (myclass;  
363                     aF    :  Face from TopoDS;  
364                     aSimm1   : out  Edge from TopoDS;
365                     aSimm2   : out  Edge from TopoDS); 
366         ---Purpose:  
367         --- Get seam edges <aSimm1>, <aSimm2> for the face <aF> 
368         ---
369     GetSeam   (myclass;  
370                     aF    :  Face from TopoDS;  
371                     aS1:  Edge from TopoDS;
372                     aS2: out  Edge from TopoDS);        
373         ---Purpose:  
374         --- Get opposite seam edge <aS2> for the face <aF> with 
375         --- known  seam edge <aS1>  
376         ---
377     IsValidArea   (myclass;   
378                     aF            :  Face from TopoDS; 
379                     aNegativeFlag :  out Boolean from Standard) 
380         returns  Boolean from Standard;  
381         ---Purpose:  
382         --- Check validity of the area of face <aF>.  
383         --- Returns TRUE if the Abs. value of the area 
384         --- is greater than  1.e-16 
385         ---
386     MinStepIn2d(myclass) 
387         returns  Real from Standard;  
388         ---Purpose:  
389         --- Returns simple step value that is used in 2D-computations 
390         --- = 1.e-5 
391         ---
392     IsEmptyShape(myclass; 
393                     aS:  Shape from TopoDS) 
394         returns Boolean from Standard; 
395         ---Purpose: 
396         --- Returns TRUE if the shape <aS> does not contain 
397         --- geometry information  (e.g. empty compound) 
398         ---
399     InvertShape(myclass; 
400                     aS   :    Shape from TopoDS; 
401                     aSInv:out Shape from TopoDS);  
402         ---Purpose:  
403         --- Change orientations to opposite for the shape <aS> 
404         --- and all its sub-shapes. Returns <aSInv>        
405         ---
406     GetStatePartIN2D(myclass;    
407              aSp    :Edge from TopoDS; 
408              aEF1   :Edge from TopoDS; 
409              aF1    :Face from TopoDS;  
410              aF2    :Face from TopoDS; 
411              aContext:  Context from IntTools)
412         returns  State from TopAbs;  
413         ---Purpose: 
414         --- Used in touch case          
415         --- Compute the 3D-state for the point on the split 
416         --- edge <aSp> (with base edge <aEF1> on face <aF1>) 
417         --- comparing with <aF2>.   
418         --- Used in touch case  <aF1>/<aF2> 
419         ---
420     CheckSameDomainFaceInside(myclass; theFace1: Face from TopoDS;
421                                        theFace2: Face from TopoDS;
422                                        theContext: Context from IntTools)
423         returns Boolean from Standard;
424
425     ComputeFaceState(myclass; theFace: Face from TopoDS;
426                               theRef : Solid from TopoDS;
427                               theContext: Context from IntTools;
428                               theState: out State from TopAbs)
429         returns Boolean from Standard;
430
431     TreatedAsAnalytic(myclass; aTx    :Real from Standard; 
432                                aPx    :Pnt  from gp;    
433                                aEx    :Edge from TopoDS; 
434                                aFx    :Face from TopoDS; 
435                                aE1    :Edge from TopoDS; 
436                                aF1    :Face from TopoDS;   
437                                aTolTangent:Real from Standard;        
438                                aTolRadius :Real from Standard;        
439                                aState  :out State from TopAbs;          
440                                aContext: Context from IntTools)
441         returns  Boolean from Standard;  
442
443     TreatedAsAnalytic (myclass; aFx    :Face from TopoDS; 
444                                 aSpE1  :Edge from TopoDS; 
445                                 aF1    :Face from TopoDS; 
446                                 aTolTangent:Real from Standard;               
447                                 aTolRadius :Real from Standard;  
448                                 aState  :out State from TopAbs;         
449                                 aContext: Context from IntTools)
450         returns  Boolean from Standard;   
451
452     HasAnalyticSurfaceType (myclass; aF: Face from TopoDS)  
453         returns  Boolean from Standard; 
454
455 end Tools3D;
456
457
458