1 // Created by: Peter KURNEV
2 // Copyright (c) 1999-2014 OPEN CASCADE SAS
4 // This file is part of Open CASCADE Technology software library.
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.
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
16 #include <BOPAlgo_BOP.hxx>
17 #include <BOPAlgo_Builder.hxx>
18 #include <BOPAlgo_Operation.hxx>
19 #include <BOPAlgo_PaveFiller.hxx>
20 #include <BOPAlgo_Section.hxx>
21 #include <BOPTest.hxx>
22 #include <BOPTest_DrawableShape.hxx>
23 #include <BOPTest_Objects.hxx>
26 #include <Draw_Color.hxx>
27 #include <DrawTrSurf.hxx>
28 #include <OSD_Timer.hxx>
29 #include <TopoDS_Shape.hxx>
35 static Standard_Integer bfillds (Draw_Interpretor&, Standard_Integer, const char**);
36 static Standard_Integer bbuild (Draw_Interpretor&, Standard_Integer, const char**);
37 static Standard_Integer bbop (Draw_Interpretor&, Standard_Integer, const char**);
39 //=======================================================================
40 //function : PartitionCommands
42 //=======================================================================
43 void BOPTest::PartitionCommands(Draw_Interpretor& theCommands)
45 static Standard_Boolean done = Standard_False;
49 const char* g = "BOPTest commands";
51 theCommands.Add("bfillds", "use bfillds [-t]" , __FILE__, bfillds, g);
52 theCommands.Add("bbuild" , "use bbuild r [-t]" , __FILE__, bbuild, g);
53 theCommands.Add("bbop" , "use bbop r op [-t]", __FILE__, bbop, g);
55 //=======================================================================
58 //=======================================================================
59 Standard_Integer bfillds(Draw_Interpretor& di,
64 di << " use bfillds [-t]\n";
69 Standard_Boolean bRunParallel, bNonDestructive, bShowTime;
70 Standard_Integer i, aNbS, iErr;
72 BOPCol_ListIteratorOfListOfShape aIt;
73 BOPCol_ListOfShape aLC;
74 BOPCol_ListOfShape& aLS=BOPTest_Objects::Shapes();
77 di << " no objects to process\n";
81 bShowTime = Standard_False;
83 bRunParallel=BOPTest_Objects::RunParallel();
84 bNonDestructive = BOPTest_Objects::NonDestructive();
85 aTol = BOPTest_Objects::FuzzyValue();
86 BOPAlgo_GlueEnum aGlue = BOPTest_Objects::Glue();
89 if (!strcmp(a[i], "-t")) {
90 bShowTime=Standard_True;
94 BOPCol_ListOfShape& aLT=BOPTest_Objects::Tools();
97 for (; aIt.More(); aIt.Next()) {
98 const TopoDS_Shape& aS=aIt.Value();
103 for (; aIt.More(); aIt.Next()) {
104 const TopoDS_Shape& aS=aIt.Value();
108 BOPAlgo_PaveFiller& aPF=BOPTest_Objects::PaveFiller();
110 aPF.SetArguments(aLC);
111 aPF.SetRunParallel(bRunParallel);
112 aPF.SetNonDestructive(bNonDestructive);
113 aPF.SetFuzzyValue(aTol);
120 iErr=aPF.ErrorStatus();
122 Sprintf(buf, " error: %d\n", iErr);
131 Sprintf(buf, " Tps: %7.2lf\n", aTimer.ElapsedTime());
137 //=======================================================================
140 //=======================================================================
141 Standard_Integer bbuild(Draw_Interpretor& di,
146 di << " use bbuild r [-t]\n";
150 BOPDS_PDS pDS=BOPTest_Objects::PDS();
152 di << " prepare PaveFiller first\n";
157 Standard_Boolean bRunParallel, bShowTime;
158 Standard_Integer i, iErr;
160 BOPCol_ListIteratorOfListOfShape aIt;
162 BOPAlgo_PaveFiller& aPF=BOPTest_Objects::PaveFiller();
164 BOPTest_Objects::SetBuilderDefault();
165 BOPAlgo_Builder& aBuilder=BOPTest_Objects::Builder();
168 BOPCol_ListOfShape& aLSObj=BOPTest_Objects::Shapes();
169 aIt.Initialize(aLSObj);
170 for (; aIt.More(); aIt.Next()) {
171 const TopoDS_Shape& aS=aIt.Value();
172 aBuilder.AddArgument(aS);
175 BOPCol_ListOfShape& aLSTool=BOPTest_Objects::Tools();
176 aIt.Initialize(aLSTool);
177 for (; aIt.More(); aIt.Next()) {
178 const TopoDS_Shape& aS=aIt.Value();
179 aBuilder.AddArgument(aS);
182 bShowTime=Standard_False;
183 bRunParallel=BOPTest_Objects::RunParallel();
184 for (i=2; i<n; ++i) {
185 if (!strcmp(a[i], "-t")) {
186 bShowTime=Standard_True;
189 aBuilder.SetRunParallel(bRunParallel);
195 aBuilder.PerformWithFiller(aPF);
196 iErr=aBuilder.ErrorStatus();
198 Sprintf(buf, " error: %d\n", iErr);
207 Sprintf(buf, " Tps: %7.2lf\n", aTimer.ElapsedTime());
211 const TopoDS_Shape& aR=aBuilder.Shape();
213 di << " null shape\n";
217 DBRep::Set(a[1], aR);
220 //=======================================================================
223 //=======================================================================
224 Standard_Integer bbop(Draw_Interpretor& di,
229 di << " use bbop r op [-t]\n";
233 BOPDS_PDS pDS=BOPTest_Objects::PDS();
235 di << " prepare PaveFiller first\n";
240 Standard_Boolean bRunParallel, bShowTime;
241 Standard_Integer iErr, iOp, i;
242 BOPAlgo_Operation aOp;
243 BOPCol_ListIteratorOfListOfShape aIt;
245 iOp=Draw::Atoi(a[2]);
246 if (iOp<0 || iOp>4) {
247 di << " invalid operation type\n";
250 aOp=(BOPAlgo_Operation)iOp;
252 bShowTime=Standard_False;
253 bRunParallel=BOPTest_Objects::RunParallel();
254 for (i=3; i<n; ++i) {
255 if (!strcmp(a[i], "-t")) {
256 bShowTime=Standard_True;
260 BOPAlgo_PaveFiller& aPF=BOPTest_Objects::PaveFiller();
262 BOPAlgo_Builder *pBuilder=NULL;
264 if (aOp!=BOPAlgo_SECTION) {
265 pBuilder=&BOPTest_Objects::BOP();
268 pBuilder=&BOPTest_Objects::Section();
273 BOPCol_ListOfShape& aLSObj=BOPTest_Objects::Shapes();
274 aIt.Initialize(aLSObj);
275 for (; aIt.More(); aIt.Next()) {
276 const TopoDS_Shape& aS=aIt.Value();
277 pBuilder->AddArgument(aS);
280 if (aOp!=BOPAlgo_SECTION) {
281 BOPAlgo_BOP *pBOP=(BOPAlgo_BOP *)pBuilder;
283 BOPCol_ListOfShape& aLSTools=BOPTest_Objects::Tools();
284 aIt.Initialize(aLSTools);
285 for (; aIt.More(); aIt.Next()) {
286 const TopoDS_Shape& aS=aIt.Value();
290 pBOP->SetOperation(aOp);
293 BOPCol_ListOfShape& aLSTools=BOPTest_Objects::Tools();
294 aIt.Initialize(aLSTools);
295 for (; aIt.More(); aIt.Next()) {
296 const TopoDS_Shape& aS=aIt.Value();
297 pBuilder->AddArgument(aS);
301 pBuilder->SetRunParallel(bRunParallel);
306 pBuilder->PerformWithFiller(aPF);
307 iErr=pBuilder->ErrorStatus();
309 Sprintf(buf, " error: %d\n", iErr);
317 Sprintf(buf, " Tps: %7.2lf\n", aTimer.ElapsedTime());
321 const TopoDS_Shape& aR=pBuilder->Shape();
323 di << " null shape\n";
327 BOPTest_Objects::SetBuilder(pBuilder);
329 DBRep::Set(a[1], aR);