Salome HOME
Mantis issue 0021191: GlueEdges and GlueFaces problem with tolerance 1. A fix by...
[modules/geom.git] / src / NMTTools / NMTTools_PaveFiller.hxx
1 // Copyright (C) 2007-2011  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 #ifndef _NMTTools_PaveFiller_HeaderFile
23 #define _NMTTools_PaveFiller_HeaderFile
24
25 #include <Basics_OCCTVersion.hxx>
26
27 #ifndef _Standard_HeaderFile
28 #include <Standard.hxx>
29 #endif
30 #ifndef _Standard_Macro_HeaderFile
31 #include <Standard_Macro.hxx>
32 #endif
33
34 #ifndef _NMTDS_PShapesDataStructure_HeaderFile
35 #include <NMTDS_PShapesDataStructure.hxx>
36 #endif
37 #ifndef _Standard_Boolean_HeaderFile
38 #include <Standard_Boolean.hxx>
39 #endif
40 #ifndef _Standard_Integer_HeaderFile
41 #include <Standard_Integer.hxx>
42 #endif
43 #ifndef _BOPTools_PavePool_HeaderFile
44 #include <BOPTools_PavePool.hxx>
45 #endif
46 #ifndef _NMTTools_CommonBlockPool_HeaderFile
47 #include <NMTTools_CommonBlockPool.hxx>
48 #endif
49 #ifndef _BOPTools_SplitShapesPool_HeaderFile
50 #include <BOPTools_SplitShapesPool.hxx>
51 #endif
52
53 #if OCC_VERSION_LARGE > 0x06050200
54 #include <Handle_IntTools_Context.hxx>
55 #else
56 #include <IntTools_Context.hxx>
57 #endif
58
59 #ifndef _BOPTools_SSIntersectionAttribute_HeaderFile
60 #include <BOPTools_SSIntersectionAttribute.hxx>
61 #endif
62 #ifndef _NMTTools_IndexedDataMapOfIndexedMapOfInteger_HeaderFile
63 #include <NMTTools_IndexedDataMapOfIndexedMapOfInteger.hxx>
64 #endif
65 #ifndef _TColStd_DataMapOfIntegerInteger_HeaderFile
66 #include <TColStd_DataMapOfIntegerInteger.hxx>
67 #endif
68 #ifndef _NMTDS_PIterator_HeaderFile
69 #include <NMTDS_PIterator.hxx>
70 #endif
71 #ifndef _TopoDS_Shape_HeaderFile
72 #include <TopoDS_Shape.hxx>
73 #endif
74 #ifndef _NMTDS_PInterfPool_HeaderFile
75 #include <NMTDS_PInterfPool.hxx>
76 #endif
77 #ifndef _NMTTools_DataMapOfIntegerFaceInfo_HeaderFile
78 #include <NMTTools_DataMapOfIntegerFaceInfo.hxx>
79 #endif
80 #ifndef _TopAbs_ShapeEnum_HeaderFile
81 #include <TopAbs_ShapeEnum.hxx>
82 #endif
83 #ifndef _Standard_Real_HeaderFile
84 #include <Standard_Real.hxx>
85 #endif
86
87 class TopoDS_Shape;
88 class BOPTools_Pave;
89 class IntTools_ShrunkRange;
90 class BOPTools_PavePool;
91 class NMTTools_CommonBlockPool;
92 class BOPTools_SplitShapesPool;
93 class BOPTools_PaveBlock;
94 class TopoDS_Vertex;
95 class NMTTools_ListOfCommonBlock;
96 class NMTTools_CommonBlock;
97 class BOPTools_IDMapOfPaveBlockIMapOfPaveBlock;
98 class BOPTools_IDMapOfPaveBlockIMapOfInteger;
99 class BooleanOperations_IndexedDataMapOfShapeInteger;
100 class TColStd_ListOfInteger;
101 class BOPTools_ListOfPaveBlock;
102 class TopoDS_Face;
103 class BOPTools_PaveSet;
104 class BOPTools_Curve;
105 class BOPTools_SSInterference;
106 class gp_Pnt;
107 class NMTTools_IndexedDataMapOfIndexedMapOfInteger;
108 class TopTools_ListOfShape;
109 class TopoDS_Edge;
110 class TopTools_DataMapOfShapeShape;
111 class TColStd_MapOfInteger;
112
113
114 class NMTTools_PaveFiller  {
115 public:
116
117   void* operator new(size_t,void* anAddress)
118   {
119     return anAddress;
120   }
121   void* operator new(size_t size)
122   {
123     return Standard::Allocate(size);
124   }
125   void  operator delete(void *anAddress)
126   {
127     if (anAddress) Standard::Free((Standard_Address&)anAddress);
128   }
129
130
131   Standard_EXPORT   NMTTools_PaveFiller();
132 Standard_EXPORT virtual ~NMTTools_PaveFiller();
133
134   Standard_EXPORT     void SetCompositeShape(const TopoDS_Shape& aS) ;
135
136   Standard_EXPORT    const TopoDS_Shape& CompositeShape() const;
137
138   Standard_EXPORT     NMTDS_PShapesDataStructure DS() ;
139
140   Standard_EXPORT     NMTDS_PIterator DSIt() ;
141
142   Standard_EXPORT     NMTDS_PInterfPool IP() ;
143
144   Standard_EXPORT   virtual  void Perform() ;
145
146   Standard_EXPORT     Standard_Boolean IsDone() const;
147
148 #if OCC_VERSION_LARGE > 0x06050200
149   Standard_EXPORT    const Handle_IntTools_Context& Context() const;
150 #else
151   Standard_EXPORT    const IntTools_Context& Context() const;
152   Standard_EXPORT     IntTools_Context& ChangeContext() ;
153 #endif
154
155   Standard_EXPORT    const BOPTools_PavePool& PavePool() const;
156
157   Standard_EXPORT     BOPTools_PavePool& ChangePavePool() ;
158
159   Standard_EXPORT    const NMTTools_CommonBlockPool& CommonBlockPool() const;
160
161   Standard_EXPORT     NMTTools_CommonBlockPool& ChangeCommonBlockPool() ;
162
163   Standard_EXPORT    const BOPTools_SplitShapesPool& SplitShapesPool() const;
164
165   Standard_EXPORT     BOPTools_SplitShapesPool& ChangeSplitShapesPool() ;
166
167   Standard_EXPORT     Standard_Integer FindSDVertex(const Standard_Integer nV) const;
168
169   Standard_EXPORT     Standard_Integer SplitsInFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
170
171   Standard_EXPORT     Standard_Integer SplitsInFace(const Standard_Integer nE1,const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
172
173   Standard_EXPORT     Standard_Integer SplitsOnEdge(const Standard_Integer nE1,const Standard_Integer nE2,TColStd_ListOfInteger& aLs) ;
174
175   Standard_EXPORT     Standard_Integer SplitsOnFace(const Standard_Integer nE1,const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
176
177   Standard_EXPORT     Standard_Integer SplitsOnFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
178
179   Standard_EXPORT     Standard_Integer SplitsInFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
180
181   Standard_EXPORT     Standard_Integer SplitsInFace(const Standard_Integer nE1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
182
183   Standard_EXPORT     Standard_Integer SplitsOnEdge(const Standard_Integer nE1,const Standard_Integer nE2,BOPTools_ListOfPaveBlock& aLs) ;
184
185   Standard_EXPORT     Standard_Integer SplitsOnFace(const Standard_Integer nE1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
186
187   Standard_EXPORT     Standard_Integer SplitsOnFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
188
189   Standard_EXPORT     Standard_Integer SplitsFace(const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
190
191   Standard_EXPORT     Standard_Integer SplitsFace(const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
192
193   Standard_EXPORT     Standard_Integer CommonBlocksFace(const Standard_Integer nF,NMTTools_ListOfCommonBlock& aLCB) ;
194
195   Standard_EXPORT     void PrepareFace(const Standard_Integer nF,TopoDS_Face& aF) ;
196
197   Standard_EXPORT    const BOPTools_PaveBlock& RealPaveBlock(const BOPTools_PaveBlock& aPB) ;
198
199   Standard_EXPORT    const BOPTools_PaveBlock& RealPaveBlock(const BOPTools_PaveBlock& aPB,TColStd_ListOfInteger& aLB,Standard_Integer& aIsCommonBlock) ;
200
201   Standard_EXPORT     void RealSplitsFace(const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
202
203   Standard_EXPORT     Standard_Boolean HasRealSplitsInOnFace(const Standard_Integer nF1,const Standard_Integer nF2) ;
204
205   Standard_EXPORT     void RealSplitsInFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
206
207   Standard_EXPORT     void RealSplitsInFace(const Standard_Integer nE1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
208
209   Standard_EXPORT     void RealSplitsInFace(const Standard_Integer nF1,BOPTools_ListOfPaveBlock& aLPB) ;
210
211   Standard_EXPORT     void RealSplitsOnEdge(const Standard_Integer nE1,const Standard_Integer nE2,BOPTools_ListOfPaveBlock& aLs) ;
212
213   Standard_EXPORT     void RealSplitsOnFace(const Standard_Integer nE1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
214
215   Standard_EXPORT     void RealSplitsOnFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
216
217   Standard_EXPORT     void PrepareSetForFace(const Standard_Integer nF1,const Standard_Integer nF2,const BOPTools_ListOfPaveBlock& aLPB,BOPTools_PaveSet& aPSF) ;
218
219   Standard_EXPORT     void PutPaveOnCurve(const BOPTools_PaveSet& aPSF,const Standard_Real aTol,BOPTools_Curve& aBC) ;
220
221   Standard_EXPORT     void PutBoundPaveOnCurve(BOPTools_Curve& aBC,BOPTools_SSInterference& aFF) ;
222
223   Standard_EXPORT     void PutBoundPaveOnCurve(const gp_Pnt& aP,const Standard_Real aT,BOPTools_Curve& aBC,BOPTools_SSInterference& aFF) ;
224
225   Standard_EXPORT     Standard_Boolean FindPave(const gp_Pnt& aP,const Standard_Real aTpV,const BOPTools_PaveSet& aPS,BOPTools_Pave& aPV) ;
226
227   Standard_EXPORT     Standard_Integer CheckIntermediatePoint(const BOPTools_PaveBlock& aPB,const BOPTools_PaveBlock& aPBR,const Standard_Real aTol) ;
228
229   Standard_EXPORT     Standard_Boolean IsExistingPaveBlock(const BOPTools_PaveBlock& aPB,const BOPTools_ListOfPaveBlock& aLPB,const Standard_Real aTol) ;
230
231   Standard_EXPORT     void MakePCurves() ;
232
233   Standard_EXPORT    const NMTTools_IndexedDataMapOfIndexedMapOfInteger& AloneVertices() const;
234
235   Standard_EXPORT     Standard_Boolean IsExistingPaveBlock(const BOPTools_PaveBlock& aPB,const TopTools_ListOfShape& aLPB,const Standard_Real aTol) ;
236
237   Standard_EXPORT     Standard_Boolean CheckCoincidence(const BOPTools_PaveBlock& aPB,const BOPTools_ListOfPaveBlock& aLPB) ;
238
239   Standard_EXPORT     Standard_Integer CheckIntermediatePoint(const BOPTools_PaveBlock& aPB,const TopoDS_Edge& aE,const Standard_Real aTol) ;
240
241   Standard_EXPORT     void SharedEdges(const Standard_Integer nF1,const Standard_Integer nF2,TColStd_ListOfInteger& aLNE,TopTools_ListOfShape& aLSE) ;
242
243   Standard_EXPORT     void FuseVertices(const TopoDS_Shape& aC,TopTools_DataMapOfShapeShape& aDMVV) const;
244
245   Standard_EXPORT     void TreatPaveBlocks(NMTTools_ListOfCommonBlock& theLCB) ;
246
247   Standard_EXPORT     BOPTools_PavePool& ChangePavePoolNew() ;
248
249   Standard_EXPORT     Standard_Boolean CheckCoincidence(const BOPTools_PaveBlock& aPB1,const BOPTools_PaveBlock& aPB2) ;
250
251   Standard_EXPORT     void PutClosingPaveOnCurve(BOPTools_Curve& aBC,BOPTools_SSInterference& aFF) ;
252
253 protected:
254
255   Standard_EXPORT   virtual  void Init() ;
256
257   Standard_EXPORT   virtual  void Clear() ;
258
259   Standard_EXPORT   virtual  void PerformVV() ;
260
261   Standard_EXPORT   virtual  void PerformVE() ;
262
263   Standard_EXPORT   virtual  void PerformVF() ;
264
265   Standard_EXPORT   virtual  void PerformEE() ;
266
267   Standard_EXPORT   virtual  void PerformEF() ;
268
269   Standard_EXPORT   virtual  void PerformFF() ;
270
271   Standard_EXPORT     void MakeSplitEdges() ;
272
273   Standard_EXPORT   virtual  void PreparePaveBlocks(const TopAbs_ShapeEnum aType1,const TopAbs_ShapeEnum aType2) ;
274
275   Standard_EXPORT     void CorrectShrunkRanges(const Standard_Integer aSide,const BOPTools_Pave& aPave,IntTools_ShrunkRange& aSR) ;
276
277   Standard_EXPORT   virtual  void PreparePaveBlocks(const Standard_Integer anE) ;
278
279   Standard_EXPORT   virtual  void PrepareEdges() ;
280
281   Standard_EXPORT     Standard_Boolean IsSuccessorsComputed(const Standard_Integer iF1,const Standard_Integer iF2) const;
282
283   Standard_EXPORT     Standard_Boolean IsBlocksCoinside(const BOPTools_PaveBlock& aPB1,const BOPTools_PaveBlock& aPB2) const;
284
285   Standard_EXPORT     void RefinePavePool() ;
286
287   Standard_EXPORT     Standard_Integer CheckFacePaves(const TopoDS_Vertex& aV,const Standard_Integer nF) ;
288
289   Standard_EXPORT     void ReplaceCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) ;
290
291   Standard_EXPORT     void RemoveCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) ;
292
293   Standard_EXPORT     void SplitCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) ;
294
295   Standard_EXPORT     void SplitCommonBlock(const NMTTools_CommonBlock& aCB,NMTTools_ListOfCommonBlock& aLCB) ;
296
297   Standard_EXPORT     void EECommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aM) ;
298
299   Standard_EXPORT     void EFCommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfInteger& aMapCB) ;
300
301   Standard_EXPORT     void EENewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
302
303   Standard_EXPORT     void EENewVertices(const TopoDS_Vertex& aV,const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
304
305   Standard_EXPORT     void EFNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
306
307   Standard_EXPORT     void EFNewVertices(const TopoDS_Vertex& aV,const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
308
309   Standard_EXPORT     void UpdateCommonBlocks() ;
310
311   Standard_EXPORT     void UpdateCommonBlocks (const Standard_Integer aI);
312
313   Standard_EXPORT     void UpdatePaveBlocks() ;
314
315   Standard_EXPORT     Standard_Integer SplitIndex(const BOPTools_PaveBlock& aPB) const;
316
317   Standard_EXPORT     void MakeBlocks() ;
318
319   Standard_EXPORT     void PerformVF1() ;
320
321   Standard_EXPORT     void MakeAloneVertices() ;
322
323   Standard_EXPORT     void FillFaceInfo() ;
324
325   Standard_EXPORT     void CorrectTolR3D(const BOPTools_SSInterference& aFF,const TColStd_MapOfInteger& aMVStick,Standard_Real& aTolR3D) ;
326
327
328 NMTDS_PShapesDataStructure myDS;
329 Standard_Boolean myIsDone;
330 Standard_Integer myNbSources;
331 Standard_Integer myNbEdges;
332 BOPTools_PavePool myPavePool;
333 BOPTools_PavePool myPavePoolNew;
334 NMTTools_CommonBlockPool myCommonBlockPool;
335 BOPTools_SplitShapesPool mySplitShapesPool;
336 #if OCC_VERSION_LARGE > 0x06050200
337   Handle_IntTools_Context myContext;
338 #else
339   IntTools_Context myContext;
340 #endif
341 BOPTools_SSIntersectionAttribute mySectionAttribute;
342 NMTTools_IndexedDataMapOfIndexedMapOfInteger myAloneVertices;
343 TColStd_DataMapOfIntegerInteger myVSD;
344 NMTDS_PIterator myDSIt;
345 TopoDS_Shape myCompositeShape;
346 NMTDS_PInterfPool myIP;
347 NMTTools_DataMapOfIntegerFaceInfo myFaceInfo;
348
349 private:
350
351 };
352
353 // other Inline functions and methods (like "C++: function call" methods)
354
355 #endif