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