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