0026619: Tolerances of operands are modified using bop
[occt.git] / src / BOPTest / BOPTest_Objects.cxx
1 // Created by: Peter KURNEV
2 // Copyright (c) 1999-2014 OPEN CASCADE SAS
3 //
4 // This file is part of Open CASCADE Technology software library.
5 //
6 // This library is free software; you can redistribute it and/or modify it under
7 // the terms of the GNU Lesser General Public License version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
11 //
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
14
15
16 #include <BOPAlgo_BOP.hxx>
17 #include <BOPAlgo_Builder.hxx>
18 #include <BOPAlgo_PaveFiller.hxx>
19 #include <BOPAlgo_Section.hxx>
20 #include <BOPTest_Objects.hxx>
21 #include <BOPAlgo_CellsBuilder.hxx>
22 #include <NCollection_BaseAllocator.hxx>
23
24 static Handle(NCollection_BaseAllocator)& Allocator1();
25
26 //=======================================================================
27 //function : BOPTest_Session
28 //purpose  : 
29 //=======================================================================
30 class BOPTest_Session {
31  public:
32   //
33   BOPTest_Session() {
34     Init();
35   };
36   //
37   ~BOPTest_Session(){
38     Clear();
39   };
40   //
41   // Init
42   void Init() {
43     Handle(NCollection_BaseAllocator) pA1, pA2;
44     //
45     pA1=NCollection_BaseAllocator::CommonBaseAllocator();
46     pA2=NCollection_BaseAllocator::CommonBaseAllocator();
47     //
48     myPaveFiller=new BOPAlgo_PaveFiller(pA1);
49     myBuilderDefault=new BOPAlgo_Builder(pA2);
50     //
51     myBuilder=myBuilderDefault;
52     myRunParallel=Standard_False;
53     myNonDestructive = Standard_False;
54     myFuzzyValue = 0.;
55   };
56   //
57   // Clear
58   void Clear() {
59     if (myPaveFiller) {
60       delete myPaveFiller;
61       myPaveFiller=NULL;
62     }
63     //
64     if (myBuilderDefault) {
65       delete myBuilderDefault;
66       myBuilderDefault=NULL;
67     }
68   };
69   //
70   // IsValid
71   Standard_Boolean IsValid() const {
72     return (myPaveFiller!=NULL);
73   }
74   // PaveFiller
75   BOPAlgo_PaveFiller& PaveFiller() {
76     return *myPaveFiller;
77   };
78   //
79   // Builder
80   BOPAlgo_Builder& Builder() {
81     return *myBuilder;
82   };
83   // 
84   // SetBuilder
85   void SetBuilder(BOPAlgo_Builder* pBuilder) {
86     myBuilder=pBuilder;
87   };
88   //
89   // SetBuilderDef
90   void SetBuilderDefault() {
91     myBuilder=myBuilderDefault;
92   };
93   //
94   BOPCol_ListOfShape& Shapes() {
95     return myShapes;
96   }
97   //
98   BOPCol_ListOfShape& Tools() {
99     return myTools;
100   }
101   //
102   void SetRunParallel(const Standard_Boolean bFlag) {
103     myRunParallel=bFlag;
104   };
105   //
106   Standard_Boolean RunParallel()const {
107     return myRunParallel;
108   };
109   //
110   void SetFuzzyValue(const Standard_Real aValue) {
111     myFuzzyValue=aValue;
112   };
113   //
114   Standard_Real FuzzyValue()const {
115     return myFuzzyValue;
116   };
117   //
118   void SetNonDestructive(const Standard_Boolean theFlag) {
119     myNonDestructive = theFlag;
120   };
121   //
122   Standard_Boolean NonDestructive()const {
123     return myNonDestructive;
124   };
125   //
126 protected:
127   //
128   BOPTest_Session(const BOPTest_Session&);
129   BOPTest_Session& operator=(const BOPTest_Session&);
130   //
131 protected:
132   //
133   BOPAlgo_PaveFiller* myPaveFiller;
134   BOPAlgo_Builder* myBuilder;
135   BOPAlgo_Builder* myBuilderDefault;
136   //
137   BOPCol_ListOfShape myShapes;
138   BOPCol_ListOfShape myTools;
139   Standard_Boolean myRunParallel;
140   Standard_Boolean myNonDestructive;
141   Standard_Real myFuzzyValue;
142 };
143 //
144 //=======================================================================
145 //function : GetSession
146 //purpose  : 
147 //=======================================================================
148 static BOPTest_Session& GetSession()
149 {
150   static BOPTest_Session* pSession=new BOPTest_Session;
151   //
152   if (!pSession->IsValid()) {
153     pSession->Init();
154   }
155   return *pSession;
156 }
157 //
158 //=======================================================================
159 //function : Init
160 //purpose  : 
161 //=======================================================================
162 void BOPTest_Objects::Init() 
163 {
164   GetSession().Init();
165 }
166 //=======================================================================
167 //function : Clear
168 //purpose  : 
169 //=======================================================================
170 void BOPTest_Objects::Clear() 
171 {
172   GetSession().Clear();
173   Shapes().Clear();
174   Tools().Clear();
175 }
176 //=======================================================================
177 //function : PaveFiller
178 //purpose  : 
179 //=======================================================================
180 BOPAlgo_PaveFiller& BOPTest_Objects::PaveFiller() 
181 {
182   return GetSession().PaveFiller();
183 }
184 //=======================================================================
185 //function : PDS
186 //purpose  : 
187 //=======================================================================
188 BOPDS_PDS BOPTest_Objects::PDS() 
189 {
190   return BOPTest_Objects::PaveFiller().PDS();
191 }
192 //=======================================================================
193 //function : Builder
194 //purpose  : 
195 //=======================================================================
196 BOPAlgo_Builder& BOPTest_Objects::Builder()
197 {
198   return GetSession().Builder();
199 }
200 //=======================================================================
201 //function : SetBuilder
202 //purpose  : 
203 //=======================================================================
204 void BOPTest_Objects::SetBuilder(const BOPAlgo_PBuilder& theBuilder)
205 {
206   BOPAlgo_Builder* pB;
207   //
208   pB=(BOPAlgo_Builder*)theBuilder;
209   GetSession().SetBuilder(pB);
210 }
211 //=======================================================================
212 //function : SetBuilderDefault
213 //purpose  : 
214 //=======================================================================
215 void BOPTest_Objects::SetBuilderDefault()
216 {
217   GetSession().SetBuilderDefault();
218 }
219 //=======================================================================
220 //function : BOP
221 //purpose  : 
222 //=======================================================================
223 BOPAlgo_BOP& BOPTest_Objects::BOP()
224 {
225   static BOPAlgo_BOP sBOP(Allocator1());
226   return sBOP;
227 }
228 //=======================================================================
229 //function : Section
230 //purpose  : 
231 //=======================================================================
232 BOPAlgo_Section& BOPTest_Objects::Section()
233 {
234   static BOPAlgo_Section sSection(Allocator1());
235   return sSection;
236 }
237 //=======================================================================
238 //function : CellsBuilder
239 //purpose  : 
240 //=======================================================================
241 BOPAlgo_CellsBuilder& BOPTest_Objects::CellsBuilder()
242 {
243   static BOPAlgo_CellsBuilder sCBuilder(Allocator1());
244   return sCBuilder;
245 }
246 //=======================================================================
247 //function : Shapes
248 //purpose  : 
249 //=======================================================================
250 BOPCol_ListOfShape& BOPTest_Objects::Shapes()
251 {
252   return GetSession().Shapes();
253 }
254 //=======================================================================
255 //function : Tools
256 //purpose  : 
257 //=======================================================================
258 BOPCol_ListOfShape& BOPTest_Objects::Tools()
259 {
260   return GetSession().Tools();
261 }
262 //=======================================================================
263 //function : SetRunParallel
264 //purpose  : 
265 //=======================================================================
266 void BOPTest_Objects::SetRunParallel(const Standard_Boolean bFlag)
267 {
268   GetSession().SetRunParallel(bFlag);
269 }
270 //=======================================================================
271 //function : RunParallel
272 //purpose  : 
273 //=======================================================================
274 Standard_Boolean BOPTest_Objects::RunParallel()
275 {
276   return GetSession().RunParallel();
277 }
278 //=======================================================================
279 //function : SetFuzzyValue
280 //purpose  : 
281 //=======================================================================
282 void BOPTest_Objects::SetFuzzyValue(const Standard_Real aValue)
283 {
284   GetSession().SetFuzzyValue(aValue);
285 }
286 //=======================================================================
287 //function : FuzzyValue
288 //purpose  : 
289 //=======================================================================
290 Standard_Real BOPTest_Objects::FuzzyValue()
291 {
292   return GetSession().FuzzyValue();
293 }
294 //=======================================================================
295 //function : SetNonDestructive
296 //purpose  : 
297 //=======================================================================
298 void BOPTest_Objects::SetNonDestructive(const Standard_Boolean theFlag)
299 {
300   GetSession().SetNonDestructive(theFlag);
301 }
302 //=======================================================================
303 //function : NonDestructive
304 //purpose  : 
305 //=======================================================================
306 Standard_Boolean BOPTest_Objects::NonDestructive()
307 {
308   return GetSession().NonDestructive();
309 }
310 //=======================================================================
311 //function : Allocator1
312 //purpose  : 
313 //=======================================================================
314 Handle(NCollection_BaseAllocator)& Allocator1() 
315 {
316   static Handle(NCollection_BaseAllocator) sAL1=
317     NCollection_BaseAllocator::CommonBaseAllocator();
318   return sAL1;
319 }