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