0022771: An extra vertex produced in result of Boolean section for the cases of close...
[occt.git] / src / BOPTools / BOPTools_PaveFiller.cdl
1 -- File:        BOPTools_PaveFiller.cdl
2 -- Created:     Thu Feb  8 14:07:33 2001
3 -- Author:      Peter KURNEV
4 --              <pkv@irinox>
5 ---Copyright:    Matra Datavision 2001
6
7
8 class PaveFiller from BOPTools 
9
10         ---Purpose:  The algorithm that provides  
11         ---  1. creation of the data structure (DS)      
12         ---  2. creation of the interferences' pool      
13         ---  3. invocation of Perform() to fill the DS 
14         ---   
15         ---
16 uses
17     
18     PShapesDataStructure    from BooleanOperations, 
19     
20     InterferencePool        from BOPTools,  
21     PInterferencePool       from BOPTools,  
22     PavePool                from BOPTools, 
23     CommonBlockPool         from BOPTools, 
24     SplitShapesPool         from BOPTools, 
25     
26     Pave                    from BOPTools,  
27     PaveBlock               from BOPTools,  
28     PaveSet                 from BOPTools, 
29     Curve                   from BOPTools,
30     SSInterference          from BOPTools, 
31     ListOfPaveBlock         from BOPTools, 
32     IteratorOfCoupleOfShape from BOPTools, 
33     SSInterference          from BOPTools, 
34     SSIntersectionAttribute from BOPTools, 
35     ShrunkRange             from IntTools, 
36     Context                 from IntTools, 
37     
38     ShapeEnum           from  TopAbs, 
39     ListOfInteger       from TColStd, 
40     IndexedMapOfInteger from TColStd, 
41     
42     Pnt     from gp,
43     Vertex  from TopoDS,
44     SetOfInteger  from  TColStd
45
46
47 is 
48  
49     Create   
50         returns PaveFiller from BOPTools; 
51         ---Purpose:  
52         --- Empty Contructor  
53         ---
54     Create  (aIP: InterferencePool from BOPTools) 
55         returns PaveFiller from BOPTools; 
56         ---Purpose:   
57         --- Constructor 
58         ---
59     Create  (theIP              : InterferencePool from BOPTools;
60              theSectionAttribute: SSIntersectionAttribute from BOPTools) 
61         returns PaveFiller from BOPTools; 
62         ---Purpose:   
63         --- Constructor
64         ---
65     Destroy (me: in out) 
66         is  virtual;     
67         ---C++: alias "Standard_EXPORT virtual ~BOPTools_PaveFiller(){Destroy();}"     
68         ---Purpose:   
69         --- Destructor
70         ---
71     Perform    (me:out) 
72         is virtual;       
73         ---Purpose:
74         --- Fills the DS               
75         ---
76  
77     PartialPerform(me:out; anObjSubSet, aToolSubSet:  SetOfInteger  from  TColStd) 
78         is virtual;       
79        
80     ToCompletePerform(me:out)              
81         is virtual;       
82  
83     PerformVV  (me:out) 
84         is  virtual protected; 
85         ---Purpose:
86         --- Computes Vertex/Vertex interferences                
87         ---
88     PerformVE  (me:out) 
89         is  virtual protected;  
90         ---Purpose:
91         --- Computes Vertex/Edge interferences                
92         ---
93     PerformVF  (me:out) 
94         is  virtual protected;  
95         ---Purpose:
96         --- Computes Vertex/Face interferences                
97         ---
98     PerformEE  (me:out) 
99         is  virtual protected;  
100         ---Purpose:
101         --- Computes Edge/Edge interferences                
102         ---
103     PerformEF  (me:out) 
104         is  virtual protected; 
105         ---Purpose:
106         --- Computes Edge/Face interferences                
107         ---
108     PerformFF  (me:out) 
109         is  virtual protected;   
110         ---Purpose:
111         --- Computes Face/Face interferences                
112         ---
113
114     -------------------------------------------------------------- 
115     --- 
116     ---   Selectors   
117     ---   
118     ---   
119     Context(me) 
120          returns Context from IntTools; 
121         ---C++:return const &   
122         ---Purpose:
123         --- Selector                
124         ---
125     ChangeContext(me:out) 
126          returns Context from IntTools;  
127         ---C++:return & 
128         ---Purpose:
129         --- Selector                
130         ---
131     SetInterferencePool(me:out; 
132          aPool:InterferencePool from BOPTools); 
133         ---Purpose:
134         --- Selector                
135         ---
136     IsDone(me) 
137         returns  Boolean  from  Standard;  
138         ---Purpose:
139         --- Selector
140         ---
141     PavePool(me) 
142         returns  PavePool from BOPTools; 
143         ---C++:return const &    
144         ---Purpose:
145         --- Selector               
146         ---
147     ChangePavePool(me:out) 
148         returns  PavePool from BOPTools; 
149         ---C++:return & 
150         ---Purpose:
151         --- Selector               
152         ---
153     CommonBlockPool(me) 
154         returns  CommonBlockPool from BOPTools; 
155         ---C++:return const &    
156         ---Purpose:
157         --- Selector               
158         ---
159     ChangeCommonBlockPool(me:out) 
160         returns  CommonBlockPool from BOPTools; 
161         ---C++:return & 
162         ---Purpose:
163         --- Selector               
164         ---
165     SplitShapesPool(me)  
166         returns  SplitShapesPool from BOPTools;
167         ---C++:return const &   
168         ---Purpose:
169         --- Selector               
170         ---
171
172     ChangeSplitShapesPool(me:out)  
173         returns  SplitShapesPool from BOPTools;
174         ---C++:return  &        
175         ---Purpose:
176         --- Selector               
177         ---
178     DS(me:out) 
179         returns PShapesDataStructure from BooleanOperations;  
180         ---Purpose:
181         --- Selector               
182         ---
183     InterfPool(me:out) 
184         returns PInterferencePool from BOPTools; 
185         ---Purpose:
186         --- Selector               
187         ---
188  
189     IteratorOfCoupleOfShape(me)  
190         returns  IteratorOfCoupleOfShape from BOPTools;
191         ---C++:return const &   
192         ---Purpose:
193         --- Selector               
194         ---
195       
196     SectionAttribute(me)
197         returns SSIntersectionAttribute from BOPTools;
198         ---C++: return const &
199         ---Purpose:
200         --- Selector   
201         ---
202
203     SetSectionAttribute(me:out; 
204         anAtt  :  SSIntersectionAttribute from BOPTools);
205         ---Purpose:
206         --- Selector       
207         ---
208     -------------------------------------------------------------- 
209     ---      
210     ---  PaveBlocks for Split Parts of Edges.  
211     ---     
212     --- 
213     SortTypes      (me;   
214             anInd1:in out Integer from Standard; 
215             anInd2:in out Integer from Standard) 
216         is protected;  
217         ---Purpose:
218         --- Sorts the types of shapes with DS-indices  
219         --- <anInd1> and  <anInd2> in increasing order of  
220         --- types of the shapes               
221         ---
222     PerformNewVertices  (me:out) 
223         is protected;                
224      
225     IsSuccesstorsComputed (me;  
226             iF1:Integer from  Standard; 
227             iF2:Integer from  Standard) 
228         returns  Boolean from Standard 
229         is protected;    
230      
231     PrepareEdges  (me:out) 
232         is virtual protected;  
233         ---Purpose:   
234         --- Prepare end paves for each edge 
235         ---
236     PreparePaveBlocks (me:out; 
237                         aType1: ShapeEnum  from  TopAbs; 
238                         aType2: ShapeEnum  from  TopAbs) 
239         is virtual protected; 
240         ---Purpose:   
241         --- Prepare PaveBlocks  for  each  edge  (EE-interferences) 
242         ---
243     PreparePaveBlocks (me:out;   
244                        anE:Integer from Standard) 
245         is virtual protected;  
246         ---Purpose:  
247         --- Prepare PaveBlocks for given edge (EE-interferences) 
248         ---
249     RefinePavePool(me:out) 
250         is protected;  
251         ---Purpose:  
252         --- Refines myPavePool taking into account new Paves obtained from EE algo 
253         ---
254     MakeSplitEdges(me:out) 
255         is protected;   
256         ---Purpose:  
257         --- Makes split edges from source edges 
258         ---
259     DoSDEdges(me:out) 
260         is protected;    
261         ---Purpose:
262         --- Update Lists of PaveBlocks with info about 
263         --- indices of split edges that are Same Domain 
264         --- with other splits or faces 
265         ---
266     CorrectShrunkRanges(me:out; 
267                         aSide:  Integer  from  Standard; 
268                         aPave:  Pave from BOPTools; 
269                         aSR  :  out ShrunkRange  from  IntTools)
270         is protected;  
271         ---Purpose:
272         --- Update Shrunk  Range <aSR> for Pave <aPave> 
273         ---
274     SplitIndex  (me:out;  aPB:PaveBlock from BOPTools)  
275         returns Integer from Standard 
276         is protected;  
277         ---Purpose:  
278         --- Returns  the Index of Split edge for the PaveBlock <aPB> 
279         --- in  DS. 
280         --- If the PaveBlock is not found, returns 0; 
281         ---
282     IsBlocksCoinside (me; 
283         aPB1:PaveBlock from BOPTools;
284         aPB2:PaveBlock from BOPTools) 
285         returns Boolean from Standard 
286         is protected;   
287         ---Purpose:      
288         --- Returns  TRUE if the two PaveBlocks have vertices 
289         --- that touch each other in terms of Tolerances of 
290         --- the vertices             
291         ---
292     -------------------------------------------------------------- 
293     ---   
294     ---  Some of API FUNCTIONS  
295     --- 
296     --- 
297     SplitsInFace(me:out; 
298                  aBid:Integer from Standard;  
299                  nF1 :Integer from Standard;  
300                  nF2 :Integer from Standard;  
301                  aLs :out ListOfInteger from TColStd) 
302         returns Integer from Standard;  
303         ---Purpose:  
304         --- For the face <nF1> get all splits that are IN-2D          
305         --- to  the face <nF2>; The result is in <aLs> 
306         --- Returns 0 if OK; 
307         ---
308     SplitsInFace(me:out; 
309                  nE1 :Integer from Standard;  
310                  nF2 :Integer from Standard;  
311                  aLs :out ListOfInteger from TColStd) 
312         returns Integer from Standard;  
313         ---Purpose:  
314         --- For the edge <nE1> get all splits that are IN-2D          
315         --- to  the face <nF1>; The result is in <aLs> 
316         --- Returns 0 if OK; 
317         ---
318     SplitsOnEdge(me:out; 
319                  nE1 :Integer from Standard;  
320                  nE2 :Integer from Standard;  
321                  aLs :out ListOfInteger from TColStd) 
322         returns Integer from Standard;  
323         ---Purpose:  
324         --- For the edge <nE1> get all splits that are ON-3D          
325         --- to  the edge <nE2>; The result is in <aLs> 
326         --- Returns 0 if OK; 
327         ---
328     SplitsOnFace(me:out; 
329                  nE1 :Integer from Standard;  
330                  nF2 :Integer from Standard;  
331                  aLs :out ListOfInteger from TColStd) 
332         returns Integer from Standard;  
333         ---Purpose:  
334         --- For the edge <nE1> get all splits that are ON-3D          
335         --- to  the face <nF2>; The result is in <aLs> 
336         --- Returns 0 if OK; 
337         ---
338     SplitsOnFace(me:out;  
339                  aBid:Integer from Standard;  
340                  nF1 :Integer from Standard;  
341                  nF2 :Integer from Standard;  
342                  aLs :out ListOfInteger from TColStd) 
343         returns Integer from Standard;  
344         ---Purpose:  
345         --- For the face <nF1> get all splits that are ON-3D          
346         --- to  the face <nF2>; The result is in <aLs> 
347         --- Returns 0 if OK; 
348         ---
349      
350     SplitsInFace(me:out; 
351                  aBid:Integer from Standard;  
352                  nF1 :Integer from Standard;  
353                  nF2 :Integer from Standard;  
354                  aLs :out ListOfPaveBlock from BOPTools) 
355         returns Integer from Standard;  
356         ---Purpose:  
357         --- For the face <nF1> get all PaveBlocks that are IN-2D          
358         --- to  the face <nF2>; The result is in <aLs> 
359         --- Returns 0 if OK; 
360         ---
361      
362     SplitsInFace(me:out; 
363                  nE1 :Integer from Standard;  
364                  nF2 :Integer from Standard;  
365                  aLs :out ListOfPaveBlock from BOPTools) 
366         returns Integer from Standard;  
367         ---Purpose:   
368         --- For the edge <nE1> get all PaveBlocks that are IN-2D          
369         --- to  the face <nF1>; The result is in <aLs> 
370         --- Returns 0 if OK; 
371         ---
372      
373     SplitsOnEdge(me:out; 
374                  nE1 :Integer from Standard;  
375                  nE2 :Integer from Standard;  
376                  aLs :out ListOfPaveBlock from BOPTools) 
377         returns Integer from Standard;  
378         ---Purpose:   
379         --- For the edge <nE1> get all PaveBlocks that are ON-3D          
380         --- to  the edge <nE2>; The result is in <aLs> 
381         --- Returns 0 if OK; 
382         ---
383      
384     SplitsOnFace(me:out; 
385                  nE1 :Integer from Standard;  
386                  nF2 :Integer from Standard;  
387                  aLs :out ListOfPaveBlock from BOPTools) 
388         returns Integer from Standard;  
389         ---Purpose:  
390         --- For the edge <nE1> get all PaveBlocks that are ON-3D          
391         --- to  the face <nF2>; The result is in <aLs> 
392         --- Returns 0 if OK; 
393         ---
394
395     SplitsOnFace(me:out;  
396                  aBid:Integer from Standard;  
397                  nF1 :Integer from Standard;  
398                  nF2 :Integer from Standard;  
399                  aLs :out ListOfPaveBlock from BOPTools) 
400         returns Integer from Standard;  
401         ---Purpose: 
402         --- For the face <nF1> get all PaveBlocks that are ON-3D          
403         --- to  the face <nF2>; The result is in <aLs> 
404         --- Returns 0 if OK; 
405         ---
406     FindSDVertex (me; 
407                     nV:  Integer  from  Standard) 
408         returns Integer from Standard; 
409         ---Purpose:
410         --- Find  for the vertex <nV> SD-vertex (if possible) and return  
411         --- its DS-index.  Otherwise it returns 0.
412         ---
413      
414     --------------------------------------------------------------- 
415     ---   
416     ---   Section  Edges.  Protected Block.
417     --- 
418     ---      
419     MakeBlocks(me:out) 
420         is protected; 
421         ---Purpose: 
422         --- Make Pave Blocks for intersection curves    
423         ---
424     MakeAloneVertices(me:out) 
425         is protected; 
426         ---Purpose: 
427         --- Make vertices that are place of intersection  
428         --- between faces       
429         ---
430     PutPaveOnCurve(me:out; 
431                    aPaveSet: PaveSet from BOPTools; 
432                    aTolR3D : Real from Standard;                                                     
433                    aBCurve :out Curve from BOPTools) 
434         is protected;   
435         ---Purpose: 
436         --- Among Paves from <aPaveSet> find ones that belong 
437         --- to intersection curve <aBCurve> with 3D-tolerance  
438         --- value <aTolR3D>
439         ---
440     PutPaveOnCurve(me:out; 
441                    aPave   : Pave from BOPTools; 
442                    aTolR3D : Real from Standard;  
443                    aBCurve :out Curve from BOPTools) 
444         is protected;     
445         ---Purpose: 
446         --- Try to put Pave <aPave> on intersection curve <aBCurve>  
447         --- with 3D-tolerance value <aTolR3D>
448         ---
449
450     PutPavesOnCurves(me:out)
451         is protected;
452
453     PrepareSetForFace(me:out;  
454                     nF1 :Integer from Standard;  
455                     nF2 :Integer from Standard;  
456                     aPaveSet:out PaveSet from BOPTools); 
457         ---Purpose:  
458         --- For couple of faces <nF1>, <nF2> prepare set of all paves 
459         --- of all edges <aPaveSet>
460         ---
461     MakeSectionEdges(me:out) 
462         is protected;  
463         ---Purpose:  
464         --- For all inrefered faces make section edges from  
465         --- intersection curves and corresp.  Paves on them      
466         ---
467     PutBoundPaveOnCurve (me:out; 
468                     aBC :out Curve from BOPTools;        
469                     aFF :out SSInterference from BOPTools) 
470         is protected; 
471         ---Purpose:          
472         --- Try to  put own  bounds of the curve on the curve <aBC> 
473         ---
474     PutBoundPaveOnCurve (me:out;  
475                     aP  : Pnt from  gp; 
476                     aT  : Real from Standard;                    
477                     aBC :out Curve from BOPTools;        
478                     aFF :out SSInterference from BOPTools) 
479         is protected;  
480         ---Purpose:          
481         --- Try to put 3D-point <aP> (parameter aT)  on the curve <aBC> 
482         ---
483     PutBoundPaveOnCurveSpec (me:out; 
484                     aBC :out Curve from BOPTools;        
485                     aFF :out SSInterference from BOPTools) 
486         is protected; 
487         ---Purpose:          
488         --- Try to  put own  bounds of the curve on the curve <aBC> 
489         --- 
490     PutBoundPaveOnCurveSpec (me:out;  
491                     aP  : Pnt from  gp; 
492                     aT  : Real from Standard;                    
493                     aBC :out Curve from BOPTools;        
494                     aFF :out SSInterference from BOPTools) 
495         is protected;  
496         ---Purpose:          
497         --- Try to put 3D-point <aP> (parameter aT)  on the curve <aBC> 
498         --- 
499  
500 --modified by NIZNHY-PKV Thu Oct 20 07:17:11 2011f 
501     PutClosingPaveOnCurve (me:out; 
502                     aBC :out Curve from BOPTools;        
503                     aFF :out SSInterference from BOPTools)  
504         is protected; 
505         ---Purpose:          
506         --- Put paves on the curve <aBC> in case when <aBC>   
507         --  is closed 3D-curve  
508         ---      
509 --modified by NIZNHY-PKV Thu Oct 20 07:17:11 2011t       
510
511     FindPave            (me:out; 
512                     aP  :Pnt from  gp;  
513                     aTpV: Real from Standard;  
514                     aPS: PaveSet from BOPTools; 
515                     aPV:out Pave from BOPTools) 
516         returns Boolean from Standard
517         is protected; 
518         ---Purpose:          
519         --- Returns TRUE if 3D-point <aP> coinsides with some Pave 
520         --- from <aPS> (with 3D-tolerance value <aTpV>); 
521         --- In  TRUE case <aPV> will contain the Pave  .             
522         ---
523     CheckCoincidence(me:out;  
524                     aPB: PaveBlock      from BOPTools;  
525                     aFF: SSInterference from BOPTools) 
526         returns Boolean from Standard 
527         is protected;  
528         ---Purpose:          
529         --- Returns TRUE if PaveBlock <aPB> lays on the faces 
530         --- from FF-interference <aFF> 
531         ---
532     CheckIntermediatePoint(me:out;  
533                     aPB : PaveBlock      from BOPTools;  
534                     aPBR: PaveBlock      from BOPTools;  
535                     aTol: Real  from  Standard) 
536         returns Integer from Standard 
537         is protected;  
538         ---Purpose:          
539         --- Returns 0 if some arbitrary intermediate point from   
540         --- PaveBlock <aPB> lays on the PaveBlock  <aPBR> 
541         --- (with 3D-tolerance value <aTol>)
542         ---
543  
544     CheckFacePaves(me:out;  
545                     aV : Vertex  from TopoDS;  
546                     nF:  Integer from Standard) 
547         returns Integer from Standard 
548         is protected; 
549         ---Purpose:      
550         --- Internal  usage 
551         ---
552     StickVertices (me:out;   
553                     nF1:  Integer from Standard;
554                     nF2:  Integer from Standard; 
555                     aMV:out IndexedMapOfInteger from TColStd) 
556         is protected;       
557         ---Purpose:      
558         --- Internal  usage 
559         ---
560     ExpectedPoolLength(me) 
561         returns  Integer from Standard 
562         is protected;
563         ---Purpose:      
564         --- Returns the value of expected length of array of interferences 
565         ---
566
567     RestrictCurveIn2d(me: in out; nE, nF1, nF2    : Integer from Standard;
568                                 theTolerance: Real from Standard;
569                                 theBC       : in out Curve from BOPTools)
570         is private;
571
572     RecomputeCommonBlocks(me: in out; nE: Integer from Standard)
573         is private;
574
575     ExtendedTolerance(me:out; 
576             nV      : Integer from Standard; 
577             aTolExt : out Real from Standard) 
578         returns Boolean from Standard                
579         is  protected;               
580
581 fields 
582  
583     myIntrPool         :  PInterferencePool from BOPTools
584         is protected;
585     myDS               :  PShapesDataStructure from BooleanOperations 
586         is protected;   
587     myPavePool         :  PavePool from BOPTools 
588         is protected; 
589     myPavePoolNew      :  PavePool from BOPTools 
590         is protected; 
591     myCommonBlockPool  :  CommonBlockPool from BOPTools 
592         is protected;  
593     mySplitShapesPool  :  SplitShapesPool from BOPTools 
594         is protected; 
595     mySectionAttribute :  SSIntersectionAttribute from BOPTools 
596         is protected;
597     myNbSources        :  Integer from Standard 
598         is protected; 
599     myNbEdges          :  Integer from Standard 
600         is protected;      
601     myIsDone           :  Boolean from Standard 
602         is protected; 
603     myDSIt             :  IteratorOfCoupleOfShape from BOPTools 
604         is protected; 
605     myContext           :  Context from IntTools 
606         is protected;        
607
608 end PaveFiller;