Salome HOME
untabify
[modules/geom.git] / src / NMTTools / NMTTools_PaveFiller.hxx
1 // Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 // File:        NMTTools_PaveFiller.hxx
24 // Created:     Fri Dec  5 14:58:54 2003
25 // Author:      Peter KURNEV
26 //              <pkv@irinox>
27 //
28 #ifndef _NMTTools_PaveFiller_HeaderFile
29 #define _NMTTools_PaveFiller_HeaderFile
30
31 #include <Standard.hxx>
32 #include <Standard_Macro.hxx>
33 #include <NMTDS_PShapesDataStructure.hxx>
34 #include <Standard_Boolean.hxx>
35 #include <Standard_Integer.hxx>
36 #include <BOPTools_PavePool.hxx>
37 #include <NMTTools_CommonBlockPool.hxx>
38 #include <BOPTools_SplitShapesPool.hxx>
39 #include <Handle_IntTools_Context.hxx>
40 #include <BOPTools_SSIntersectionAttribute.hxx>
41 #include <NMTTools_IndexedDataMapOfIndexedMapOfInteger.hxx>
42 #include <TColStd_DataMapOfIntegerInteger.hxx>
43 #include <NMTDS_PIterator.hxx>
44 #include <TopoDS_Shape.hxx>
45 #include <NMTDS_PInterfPool.hxx>
46 #include <NMTTools_DataMapOfIntegerFaceInfo.hxx>
47 #include <TopAbs_ShapeEnum.hxx>
48 #include <NMTTools_CommonBlock.hxx>
49 #include <Standard_Real.hxx>
50
51 #include <TopoDS_Shape.hxx>
52 #include <BOPTools_Pave.hxx>
53 #include <IntTools_ShrunkRange.hxx>
54 #include <BOPTools_PavePool.hxx>
55 #include <NMTTools_CommonBlockPool.hxx>
56 #include <BOPTools_SplitShapesPool.hxx>
57 #include <BOPTools_PaveBlock.hxx>
58 #include <TopoDS_Vertex.hxx>
59 #include <NMTTools_ListOfCommonBlock.hxx>
60 #include <BOPTools_IDMapOfPaveBlockIMapOfPaveBlock.hxx>
61 #include <BOPTools_IDMapOfPaveBlockIMapOfInteger.hxx>
62 #include <BooleanOperations_IndexedDataMapOfShapeInteger.hxx>
63 #include <TColStd_ListOfInteger.hxx>
64 #include <BOPTools_ListOfPaveBlock.hxx>
65 #include <TopoDS_Face.hxx>
66 #include <BOPTools_PaveSet.hxx>
67 #include <BOPTools_Curve.hxx>
68 #include <BOPTools_SSInterference.hxx>
69 #include <gp_Pnt.hxx>
70 #include <NMTTools_IndexedDataMapOfIndexedMapOfInteger.hxx>
71 #include <TopTools_ListOfShape.hxx>
72 #include <TopoDS_Edge.hxx>
73 #include <TopTools_DataMapOfShapeShape.hxx>
74
75
76 /*
77 class TopoDS_Shape;
78 class BOPTools_Pave;
79 class IntTools_ShrunkRange;
80 class BOPTools_PavePool;
81 class NMTTools_CommonBlockPool;
82 class BOPTools_SplitShapesPool;
83 class BOPTools_PaveBlock;
84 class TopoDS_Vertex;
85 class NMTTools_ListOfCommonBlock;
86 class BOPTools_IDMapOfPaveBlockIMapOfPaveBlock;
87 class BOPTools_IDMapOfPaveBlockIMapOfInteger;
88 class BooleanOperations_IndexedDataMapOfShapeInteger;
89 class TColStd_ListOfInteger;
90 class BOPTools_ListOfPaveBlock;
91 class TopoDS_Face;
92 class BOPTools_PaveSet;
93 class BOPTools_Curve;
94 class BOPTools_SSInterference;
95 class gp_Pnt;
96 class NMTTools_IndexedDataMapOfIndexedMapOfInteger;
97 class TopTools_ListOfShape;
98 class TopoDS_Edge;
99 class TopTools_DataMapOfShapeShape;
100 class TCoLSTD_MapOfInteger;
101 */
102
103
104 //=======================================================================
105 //function : NMTTools_PaveFiller
106 //purpose  :
107 //=======================================================================
108 class NMTTools_PaveFiller  {
109  public:
110   Standard_EXPORT
111     NMTTools_PaveFiller();
112
113   Standard_EXPORT
114   virtual ~NMTTools_PaveFiller();
115
116   Standard_EXPORT
117     void SetCompositeShape(const TopoDS_Shape& aS) ;
118
119   Standard_EXPORT
120     const TopoDS_Shape& CompositeShape() const;
121
122   Standard_EXPORT
123     NMTDS_PShapesDataStructure DS() ;
124
125   Standard_EXPORT
126     NMTDS_PIterator DSIt() ;
127
128   Standard_EXPORT
129     NMTDS_PInterfPool IP() ;
130
131   Standard_EXPORT
132     virtual  void Perform() ;
133
134   Standard_EXPORT
135     Standard_Boolean IsDone() const;
136
137   Standard_EXPORT
138     const Handle_IntTools_Context& Context() const;
139
140   Standard_EXPORT
141     const BOPTools_PavePool& PavePool() const;
142
143   Standard_EXPORT
144     BOPTools_PavePool& ChangePavePool() ;
145
146   Standard_EXPORT
147     const NMTTools_CommonBlockPool& CommonBlockPool() const;
148
149   Standard_EXPORT
150     NMTTools_CommonBlockPool& ChangeCommonBlockPool() ;
151
152   Standard_EXPORT
153     const BOPTools_SplitShapesPool& SplitShapesPool() const;
154
155   Standard_EXPORT
156     BOPTools_SplitShapesPool& ChangeSplitShapesPool() ;
157
158   Standard_EXPORT
159     Standard_Integer FindSDVertex(const Standard_Integer nV) const;
160
161   Standard_EXPORT
162     Standard_Integer SplitsInFace(const Standard_Integer aBid,
163                                   const Standard_Integer nF1,
164                                   const Standard_Integer nF2,
165                                   TColStd_ListOfInteger& aLs) ;
166
167   Standard_EXPORT
168     Standard_Integer SplitsInFace(const Standard_Integer nE1,
169                                   const Standard_Integer nF2,
170                                   TColStd_ListOfInteger& aLs) ;
171
172   Standard_EXPORT
173     Standard_Integer SplitsOnEdge(const Standard_Integer nE1,
174                                   const Standard_Integer nE2,
175                                   TColStd_ListOfInteger& aLs) ;
176
177   Standard_EXPORT
178     Standard_Integer SplitsOnFace(const Standard_Integer nE1,
179                                   const Standard_Integer nF2,
180                                   TColStd_ListOfInteger& aLs) ;
181
182   Standard_EXPORT
183     Standard_Integer SplitsOnFace(const Standard_Integer aBid,
184                                   const Standard_Integer nF1,
185                                   const Standard_Integer nF2,
186                                   TColStd_ListOfInteger& aLs) ;
187
188   Standard_EXPORT
189     Standard_Integer SplitsInFace(const Standard_Integer aBid,
190                                   const Standard_Integer nF1,
191                                   const Standard_Integer nF2,
192                                   BOPTools_ListOfPaveBlock& aLs) ;
193
194   Standard_EXPORT
195     Standard_Integer SplitsInFace(const Standard_Integer nE1,
196                                   const Standard_Integer nF2,
197                                   BOPTools_ListOfPaveBlock& aLs) ;
198
199   Standard_EXPORT
200     Standard_Integer SplitsOnEdge(const Standard_Integer nE1,
201                                   const Standard_Integer nE2,
202                                   BOPTools_ListOfPaveBlock& aLs) ;
203
204   Standard_EXPORT
205     Standard_Integer SplitsOnFace(const Standard_Integer nE1,
206                                   const Standard_Integer nF2,
207                                   BOPTools_ListOfPaveBlock& aLs) ;
208
209   Standard_EXPORT
210     Standard_Integer SplitsOnFace(const Standard_Integer aBid,
211                                   const Standard_Integer nF1,
212                                   const Standard_Integer nF2,
213                                   BOPTools_ListOfPaveBlock& aLs) ;
214
215   Standard_EXPORT
216     Standard_Integer SplitsFace(const Standard_Integer nF2,
217                                 BOPTools_ListOfPaveBlock& aLs) ;
218
219   Standard_EXPORT
220     Standard_Integer SplitsFace(const Standard_Integer nF2,
221                                 TColStd_ListOfInteger& aLs) ;
222
223   Standard_EXPORT
224     Standard_Integer CommonBlocksFace(const Standard_Integer nF,
225                                       NMTTools_ListOfCommonBlock& aLCB) ;
226
227   Standard_EXPORT
228     void PrepareFace(const Standard_Integer nF,
229                      TopoDS_Face& aF) ;
230
231   Standard_EXPORT
232     const BOPTools_PaveBlock& RealPaveBlock(const BOPTools_PaveBlock& aPB) ;
233
234   Standard_EXPORT
235     const BOPTools_PaveBlock& RealPaveBlock(const BOPTools_PaveBlock& aPB,
236                                             TColStd_ListOfInteger& aLB,
237                                             Standard_Integer& aIsCommonBlock) ;
238
239   Standard_EXPORT
240     void RealSplitsFace(const Standard_Integer nF2,
241                         BOPTools_ListOfPaveBlock& aLs) ;
242
243   Standard_EXPORT
244     Standard_Boolean HasRealSplitsInOnFace(const Standard_Integer nF1,
245                                            const Standard_Integer nF2) ;
246
247   Standard_EXPORT
248     void RealSplitsInFace(const Standard_Integer aBid,
249                           const Standard_Integer nF1,
250                           const Standard_Integer nF2,
251                           BOPTools_ListOfPaveBlock& aLs) ;
252
253   Standard_EXPORT
254     void RealSplitsInFace(const Standard_Integer nE1,
255                           const Standard_Integer nF2,
256                           BOPTools_ListOfPaveBlock& aLs) ;
257
258   Standard_EXPORT
259     void RealSplitsInFace(const Standard_Integer nF1,
260                           BOPTools_ListOfPaveBlock& aLPB) ;
261
262   Standard_EXPORT
263     void RealSplitsOnEdge(const Standard_Integer nE1,
264                           const Standard_Integer nE2,
265                           BOPTools_ListOfPaveBlock& aLs) ;
266
267   Standard_EXPORT
268     void RealSplitsOnFace(const Standard_Integer nE1,
269                           const Standard_Integer nF2,
270                           BOPTools_ListOfPaveBlock& aLs) ;
271
272   Standard_EXPORT
273     void RealSplitsOnFace(const Standard_Integer aBid,
274                           const Standard_Integer nF1,
275                           const Standard_Integer nF2,
276                           BOPTools_ListOfPaveBlock& aLs) ;
277
278   Standard_EXPORT
279     void PrepareSetForFace(const Standard_Integer nF1,
280                            const Standard_Integer nF2,
281                            const BOPTools_ListOfPaveBlock& aLPB,
282                            BOPTools_PaveSet& aPSF) ;
283
284   Standard_EXPORT
285     void PutPaveOnCurve(const BOPTools_PaveSet& aPSF,
286                         const Standard_Real aTol,
287                         BOPTools_Curve& aBC) ;
288
289   Standard_EXPORT
290     void PutBoundPaveOnCurve(BOPTools_Curve& aBC,
291                              BOPTools_SSInterference& aFF) ;
292
293   Standard_EXPORT
294     void PutBoundPaveOnCurve(const gp_Pnt& aP,
295                              const Standard_Real aT,
296                              BOPTools_Curve& aBC,
297                              BOPTools_SSInterference& aFF) ;
298
299   Standard_EXPORT
300     Standard_Boolean FindPave(const gp_Pnt& aP,
301                               const Standard_Real aTpV,
302                               const BOPTools_PaveSet& aPS,
303                               BOPTools_Pave& aPV) ;
304
305   Standard_EXPORT
306     Standard_Integer CheckIntermediatePoint(const BOPTools_PaveBlock& aPB,
307                                             const BOPTools_PaveBlock& aPBR,
308                                             const Standard_Real aTol) ;
309
310   Standard_EXPORT
311     Standard_Boolean IsExistingPaveBlock(const BOPTools_PaveBlock& aPB,
312                                          const BOPTools_ListOfPaveBlock& aLPB,
313                                          const Standard_Real aTol) ;
314
315   Standard_EXPORT
316     void MakePCurves() ;
317
318   Standard_EXPORT
319     const NMTTools_IndexedDataMapOfIndexedMapOfInteger& AloneVertices() const;
320
321   Standard_EXPORT
322     Standard_Boolean IsExistingPaveBlock(const BOPTools_PaveBlock& aPB,
323                                          const TopTools_ListOfShape& aLPB,
324                                          const Standard_Real aTol) ;
325
326   Standard_EXPORT
327     Standard_Boolean CheckCoincidence(const BOPTools_PaveBlock& aPB,
328                                       const BOPTools_ListOfPaveBlock& aLPB) ;
329
330   Standard_EXPORT
331     Standard_Integer CheckIntermediatePoint(const BOPTools_PaveBlock& aPB,
332                                             const TopoDS_Edge& aE,
333                                             const Standard_Real aTol) ;
334
335   Standard_EXPORT
336     void SharedEdges(const Standard_Integer nF1,
337                      const Standard_Integer nF2,
338                      TColStd_ListOfInteger& aLNE,
339                      TopTools_ListOfShape& aLSE) ;
340
341   Standard_EXPORT
342     void FuseVertices(const TopoDS_Shape& aC,
343                       TopTools_DataMapOfShapeShape& aDMVV) const;
344
345   Standard_EXPORT
346     void TreatPaveBlocks(NMTTools_ListOfCommonBlock& theLCB) ;
347
348   Standard_EXPORT
349     BOPTools_PavePool& ChangePavePoolNew() ;
350
351   Standard_EXPORT
352     Standard_Boolean CheckCoincidence(const BOPTools_PaveBlock& aPB1,
353                                       const BOPTools_PaveBlock& aPB2) ;
354
355   Standard_EXPORT
356     void PutClosingPaveOnCurve(BOPTools_Curve& aBC,
357                                BOPTools_SSInterference& aFF) ;
358
359  protected:
360   Standard_EXPORT
361     virtual  void Init() ;
362
363   Standard_EXPORT
364     virtual  void Clear() ;
365
366   Standard_EXPORT
367     virtual  void PerformVV() ;
368
369   Standard_EXPORT
370     virtual  void PerformVE() ;
371
372   Standard_EXPORT
373     virtual  void PerformVF() ;
374
375   Standard_EXPORT
376     virtual  void PerformEE() ;
377
378   Standard_EXPORT
379     virtual  void PerformEF() ;
380
381   Standard_EXPORT
382     virtual  void PerformFF() ;
383
384   Standard_EXPORT
385     void MakeSplitEdges() ;
386
387   Standard_EXPORT
388     virtual  void PreparePaveBlocks(const TopAbs_ShapeEnum aType1,
389                                     const TopAbs_ShapeEnum aType2) ;
390
391   Standard_EXPORT
392     void CorrectShrunkRanges(const Standard_Integer aSide,
393                              const BOPTools_Pave& aPave,
394                              IntTools_ShrunkRange& aSR) ;
395
396   Standard_EXPORT
397     virtual  void PreparePaveBlocks(const Standard_Integer anE) ;
398
399   Standard_EXPORT
400     virtual  void PrepareEdges() ;
401
402   Standard_EXPORT
403     Standard_Boolean IsSuccessorsComputed(const Standard_Integer iF1,
404                                           const Standard_Integer iF2) const;
405
406   Standard_EXPORT
407     Standard_Boolean IsBlocksCoinside(const BOPTools_PaveBlock& aPB1,
408                                       const BOPTools_PaveBlock& aPB2) const;
409
410   Standard_EXPORT
411     void RefinePavePool() ;
412
413   Standard_EXPORT
414     Standard_Integer CheckFacePaves(const TopoDS_Vertex& aV,
415                                     const Standard_Integer nF) ;
416
417   Standard_EXPORT
418     void ReplaceCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) ;
419
420   Standard_EXPORT
421     void RemoveCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) ;
422
423   Standard_EXPORT
424     void SplitCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) ;
425
426   Standard_EXPORT
427     void SplitCommonBlock(const NMTTools_CommonBlock& aCB,NMTTools_ListOfCommonBlock& aLCB) ;
428
429   Standard_EXPORT
430     void EECommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aM) ;
431
432   Standard_EXPORT
433     void EFCommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfInteger& aMapCB) ;
434
435   Standard_EXPORT
436     void EENewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
437
438   Standard_EXPORT
439     void EENewVertices(const TopoDS_Vertex& aV,
440                        const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
441
442   Standard_EXPORT
443     void EFNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
444
445   Standard_EXPORT
446      void EFNewVertices(const TopoDS_Vertex& aV,
447                         const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
448
449   Standard_EXPORT
450     void UpdateCommonBlocks() ;
451
452   Standard_EXPORT
453     void UpdateCommonBlocks(const Standard_Integer aI) ;
454
455   Standard_EXPORT
456     void UpdatePaveBlocks() ;
457
458   Standard_EXPORT
459     Standard_Integer SplitIndex(const BOPTools_PaveBlock& aPB) const;
460
461   Standard_EXPORT
462     void MakeBlocks() ;
463
464   Standard_EXPORT
465     void PerformVF1() ;
466
467   Standard_EXPORT
468     void MakeAloneVertices() ;
469
470   Standard_EXPORT
471     void FillFaceInfo() ;
472
473   Standard_EXPORT
474     void CorrectTolR3D(const BOPTools_SSInterference& aFF,
475                        const TColStd_MapOfInteger& aMVStick,
476                        Standard_Real& aTolR3D) ;
477
478
479   NMTDS_PShapesDataStructure myDS;
480   Standard_Boolean myIsDone;
481   Standard_Integer myNbSources;
482   Standard_Integer myNbEdges;
483   BOPTools_PavePool myPavePool;
484   BOPTools_PavePool myPavePoolNew;
485   NMTTools_CommonBlockPool myCommonBlockPool;
486   BOPTools_SplitShapesPool mySplitShapesPool;
487   Handle_IntTools_Context myContext;
488   BOPTools_SSIntersectionAttribute mySectionAttribute;
489   NMTTools_IndexedDataMapOfIndexedMapOfInteger myAloneVertices;
490   TColStd_DataMapOfIntegerInteger myVSD;
491   NMTDS_PIterator myDSIt;
492   TopoDS_Shape myCompositeShape;
493   NMTDS_PInterfPool myIP;
494   NMTTools_DataMapOfIntegerFaceInfo myFaceInfo;
495
496
497   // private:
498
499 };
500 #endif