1114acf6c35a658e583804673e383963da5a8fda
[occt.git] / src / BOPAlgo / BOPAlgo_PaveFiller.cxx
1 // Created by: Peter KURNEV
2 // Copyright (c) 2010-2014 OPEN CASCADE SAS
3 // Copyright (c) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
4 // Copyright (c) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT,
5 //                         EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 //
7 // This file is part of Open CASCADE Technology software library.
8 //
9 // This library is free software; you can redistribute it and/or modify it under
10 // the terms of the GNU Lesser General Public License version 2.1 as published
11 // by the Free Software Foundation, with special exception defined in the file
12 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
13 // distribution for complete text of the license and disclaimer of any warranty.
14 //
15 // Alternatively, this file may be used under the terms of Open CASCADE
16 // commercial license or contractual agreement.
17
18 #include <BOPAlgo_PaveFiller.ixx>
19
20 #include <Standard_ErrorHandler.hxx>
21 #include <Standard_Failure.hxx>
22
23 #include <NCollection_BaseAllocator.hxx>
24
25 #include <IntTools_Context.hxx>
26 #include <BOPDS_DS.hxx>
27 #include <BOPDS_Iterator.hxx>
28
29
30 //=======================================================================
31 //function : 
32 //purpose  : 
33 //=======================================================================
34 BOPAlgo_PaveFiller::BOPAlgo_PaveFiller()
35 :
36   BOPAlgo_Algo(),
37   myFuzzyValue(0.)
38 {
39   myDS=NULL;
40   myIterator=NULL;
41 }
42 //=======================================================================
43 //function : 
44 //purpose  : 
45 //=======================================================================
46 BOPAlgo_PaveFiller::BOPAlgo_PaveFiller
47   (const Handle(NCollection_BaseAllocator)& theAllocator)
48 :
49   BOPAlgo_Algo(theAllocator),
50   myFuzzyValue(0.)
51 {
52   myDS=NULL;
53   myIterator=NULL;
54 }
55 //=======================================================================
56 //function : ~
57 //purpose  : 
58 //=======================================================================
59 BOPAlgo_PaveFiller::~BOPAlgo_PaveFiller()
60 {
61   Clear();
62 }
63 //=======================================================================
64 //function : Clear
65 //purpose  : 
66 //=======================================================================
67 void BOPAlgo_PaveFiller::Clear()
68 {
69   if (myIterator) {
70     delete myIterator;
71     myIterator=NULL;
72   }
73   if (myDS) {
74     delete myDS;
75     myDS=NULL;
76   }
77 }
78 //=======================================================================
79 //function : DS
80 //purpose  : 
81 //=======================================================================
82 const BOPDS_DS& BOPAlgo_PaveFiller::DS()
83 {
84   return *myDS;
85 }
86 //=======================================================================
87 //function : PDS
88 //purpose  : 
89 //=======================================================================
90 BOPDS_PDS BOPAlgo_PaveFiller::PDS()
91 {
92   return myDS;
93 }
94 //=======================================================================
95 //function : Context
96 //purpose  : 
97 //=======================================================================
98 Handle(IntTools_Context) BOPAlgo_PaveFiller::Context()
99 {
100   return myContext;
101 }
102 //=======================================================================
103 //function : SectionAttribute
104 //purpose  : 
105 //=======================================================================
106 void BOPAlgo_PaveFiller::SetSectionAttribute
107   (const BOPAlgo_SectionAttribute& theSecAttr)
108 {
109   mySectionAttribute = theSecAttr;
110 }
111 //=======================================================================
112 //function : SetArguments
113 //purpose  : 
114 //=======================================================================
115 void BOPAlgo_PaveFiller::SetArguments(const BOPCol_ListOfShape& theLS)
116 {
117   myArguments=theLS;
118 }
119 //=======================================================================
120 //function : Arguments
121 //purpose  : 
122 //=======================================================================
123 const BOPCol_ListOfShape& BOPAlgo_PaveFiller::Arguments()const
124 {
125   return myArguments;
126 }
127 //=======================================================================
128 //function : SetFuzzyValue
129 //purpose  : 
130 //=======================================================================
131 void BOPAlgo_PaveFiller::SetFuzzyValue(const Standard_Real theFuzz)
132 {
133   if (theFuzz > 0.) {
134     myFuzzyValue = theFuzz;
135   }
136 }
137 //=======================================================================
138 //function : FuzzyValue
139 //purpose  : 
140 //=======================================================================
141 Standard_Real BOPAlgo_PaveFiller::FuzzyValue() const
142 {
143   return myFuzzyValue;
144 }
145 //=======================================================================
146 // function: Init
147 // purpose: 
148 //=======================================================================
149 void BOPAlgo_PaveFiller::Init()
150 {
151   myErrorStatus=0;
152   //
153   if (!myArguments.Extent()) {
154     myErrorStatus=10;
155     return;
156   }
157   //
158   // 0 Clear
159   Clear();
160   //
161   // 1.myDS 
162   myDS=new BOPDS_DS(myAllocator);
163   myDS->SetArguments(myArguments);
164   myDS->SetFuzzyValue(myFuzzyValue);
165   myDS->Init();
166   //
167   // 2.myIterator 
168   myIterator=new BOPDS_Iterator(myAllocator);
169   myIterator->SetRunParallel(myRunParallel);
170   myIterator->SetDS(myDS);
171   myIterator->Prepare();
172   //
173   // 3 myContext
174   myContext=new IntTools_Context;
175   //
176   myErrorStatus=0;
177 }
178 //=======================================================================
179 // function: Perform
180 // purpose: 
181 //=======================================================================
182 void BOPAlgo_PaveFiller::Perform()
183 {
184   myErrorStatus=0;
185   try { 
186     OCC_CATCH_SIGNALS
187     //
188     PerformInternal();
189   }
190   //
191   catch (Standard_Failure) {
192     myErrorStatus=11;
193   } 
194   //
195   myDS->SetDefaultTolerances();
196 }
197 //=======================================================================
198 // function: PerformInternal
199 // purpose: 
200 //=======================================================================
201 void BOPAlgo_PaveFiller::PerformInternal()
202 {
203   myErrorStatus=0;
204   //
205   Init();
206   if (myErrorStatus) {
207     return; 
208   }
209   //
210   Prepare();
211   if (myErrorStatus) {
212     return; 
213   }
214   // 00
215   PerformVV();
216   if (myErrorStatus) {
217     return; 
218   }
219   // 01
220   PerformVE();
221   if (myErrorStatus) {
222     return; 
223   }
224   //
225   myDS->UpdatePaveBlocks();
226   // 11
227   PerformEE();
228   if (myErrorStatus) {
229     return; 
230   }
231   // 02
232   PerformVF();
233   if (myErrorStatus) {
234     return; 
235   }
236   // 12
237   PerformEF();
238   if (myErrorStatus) {
239     return; 
240   }
241   //
242   MakeSplitEdges();
243   if (myErrorStatus) {
244     return; 
245   }
246   //
247   // 22
248   PerformFF();
249   if (myErrorStatus) {
250     return; 
251   }
252   //
253   MakeBlocks();
254   if (myErrorStatus) {
255     return; 
256   }
257   //
258   RefineFaceInfoOn();
259   //
260   MakePCurves();
261   if (myErrorStatus) {
262     return; 
263   }
264   //
265   ProcessDE();
266   if (myErrorStatus) {
267     return; 
268   }
269   //
270   // 03
271   PerformVZ();
272   if (myErrorStatus) {
273     return;
274   }
275   // 13
276   PerformEZ();
277   if (myErrorStatus) {
278     return;
279   }
280   // 23
281   PerformFZ();
282   if (myErrorStatus) {
283     return;
284   }
285   // 33
286   PerformZZ();
287   if (myErrorStatus) {
288     return;
289   }
290