//
// This file is part of Open CASCADE Technology software library.
//
-// This library is free software; you can redistribute it and / or modify it
-// under the terms of the GNU Lesser General Public version 2.1 as published
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
#include <BOPAlgo_PaveFiller.hxx>
#include <BOPAlgo_Operation.hxx>
#include <BOPAlgo_BOP.hxx>
+#include <BOPAlgo_Section.hxx>
//
#include <BOPTest_DrawableShape.hxx>
#include <BOPTest_Objects.hxx>
-//
-#ifdef HAVE_TBB
-#include <BOPCol_TBB.hxx>
-//=======================================================================
-//class : BOPTime_Chronometer
-//purpose :
-//=======================================================================
-class BOPTime_Chronometer {
- public:
- BOPTime_Chronometer() {
- }
- //
- ~BOPTime_Chronometer() {
- }
- //
- void Start() {
- myT0 = tick_count::now();
- }
- //
- void Stop() {
- myTime=(tick_count::now() - myT0).seconds();
- }
- //
- double Time() const{
- return myTime;
- };
- //
- protected:
- tick_count myT0;
- double myTime;
-};
-////////////////////////////////////////////////////////////////////////
-#else
-#include <OSD_Chronometer.hxx>
-//=======================================================================
-//class : BOPTime_Chronometer
-//purpose :
-//=======================================================================
-class BOPTime_Chronometer {
- public:
- BOPTime_Chronometer() {
- }
- //
- ~BOPTime_Chronometer() {
- }
- //
- void Start() {
- myChronometer.Reset();
- myChronometer.Start();
- }
- //
- void Stop() {
- myChronometer.Stop();
- myChronometer.Show(myTime);
- }
- //
- double Time() const{
- return myTime;
- };
- //
- protected:
- OSD_Chronometer myChronometer;
- double myTime;
-};
-#endif
-
-
+#include <OSD_Timer.hxx>
static Standard_Integer bfillds (Draw_Interpretor&, Standard_Integer, const char**);
static Standard_Integer bbuild (Draw_Interpretor&, Standard_Integer, const char**);
static Standard_Integer bbop (Draw_Interpretor&, Standard_Integer, const char**);
-static Standard_Integer bclear (Draw_Interpretor&, Standard_Integer, const char**);
+
//=======================================================================
//function : PartitionCommands
//purpose :
//=======================================================================
- void BOPTest::PartitionCommands(Draw_Interpretor& theCommands)
+void BOPTest::PartitionCommands(Draw_Interpretor& theCommands)
{
static Standard_Boolean done = Standard_False;
if (done) return;
done = Standard_True;
// Chapter's name
- const char* g = "Partition commands";
+ const char* g = "BOPTest commands";
// Commands
- theCommands.Add("bfillds" , "use bfillds" , __FILE__, bfillds , g);
- theCommands.Add("bbuild" , " use bbuild r [-s -t]" , __FILE__, bbuild, g);
- theCommands.Add("bbop" , "use bbop r op" , __FILE__, bbop, g);
- theCommands.Add("bclear" , "use bclear" , __FILE__, bclear, g);
-}
-
-//=======================================================================
-//function : bclear
-//purpose :
-//=======================================================================
-Standard_Integer bclear(Draw_Interpretor& di, Standard_Integer n, const char** )
-{
- if (n!=1) {
- di << " use bclear\n";
- return 0;
- }
- //
- BOPTest_Objects::Clear();
- return 0;
+ theCommands.Add("bfillds", "use bfillds [-t]" , __FILE__, bfillds, g);
+ theCommands.Add("bbuild" , "use bbuild r [-t]" , __FILE__, bbuild, g);
+ theCommands.Add("bbop" , "use bbop r op [-t]", __FILE__, bbop, g);
}
//=======================================================================
//function : bfillds
//purpose :
//=======================================================================
-Standard_Integer bfillds(Draw_Interpretor& di, Standard_Integer n, const char** )
+Standard_Integer bfillds(Draw_Interpretor& di,
+ Standard_Integer n,
+ const char** a)
{
- if (n!=1) {
- di << " Use bfillds\n";
+ if (n > 2) {
+ di << " use bfillds [-t]\n";
return 0;
}
//
char buf[32];
- Standard_Integer aNbS, aNbT, iErr;
+ Standard_Boolean bRunParallel, bShowTime;
+ Standard_Integer i, aNbS, iErr;
+ Standard_Real aTol;
BOPCol_ListIteratorOfListOfShape aIt;
BOPCol_ListOfShape aLC;
-
BOPCol_ListOfShape& aLS=BOPTest_Objects::Shapes();
aNbS=aLS.Extent();
if (!aNbS) {
return 0;
}
//
+ bShowTime = Standard_False;
+ //
+ bRunParallel=BOPTest_Objects::RunParallel();
+ aTol=BOPTest_Objects::FuzzyValue();
+ //
+ for (i=1; i<n; ++i) {
+ if (!strcmp(a[i], "-t")) {
+ bShowTime=Standard_True;
+ }
+ }
+ //
BOPCol_ListOfShape& aLT=BOPTest_Objects::Tools();
- aNbT=aLT.Extent();
//
aIt.Initialize(aLS);
for (; aIt.More(); aIt.Next()) {
BOPAlgo_PaveFiller& aPF=BOPTest_Objects::PaveFiller();
//
aPF.SetArguments(aLC);
+ aPF.SetRunParallel(bRunParallel);
+ aPF.SetFuzzyValue(aTol);
+ //
+ OSD_Timer aTimer;
+ aTimer.Start();
//
aPF.Perform();
iErr=aPF.ErrorStatus();
return 0;
}
//
+ aTimer.Stop();
+ //
+ if (bShowTime)
+ {
+ Sprintf(buf, " Tps: %7.2lf\n", aTimer.ElapsedTime());
+ di << buf;
+ }
+ //
return 0;
}
//=======================================================================
//function : bbuild
//purpose :
//=======================================================================
-Standard_Integer bbuild(Draw_Interpretor& di, Standard_Integer n, const char** a)
+Standard_Integer bbuild(Draw_Interpretor& di,
+ Standard_Integer n,
+ const char** a)
{
if (n<2) {
- di << " use bbuild r [-s -t]\n";
+ di << " use bbuild r [-t]\n";
return 0;
}
//
char buf[128];
Standard_Boolean bRunParallel, bShowTime;
Standard_Integer i, iErr;
-
- BOPTime_Chronometer aChrono;
+
BOPCol_ListIteratorOfListOfShape aIt;
- //
-
//
BOPAlgo_PaveFiller& aPF=BOPTest_Objects::PaveFiller();
//
}
//
bShowTime=Standard_False;
- bRunParallel=Standard_True;
+ bRunParallel=BOPTest_Objects::RunParallel();
for (i=2; i<n; ++i) {
- if (!strcmp(a[i], "-s")) {
- bRunParallel=Standard_False;
- }
- else if (!strcmp(a[i], "-t")) {
+ if (!strcmp(a[i], "-t")) {
bShowTime=Standard_True;
}
}
aBuilder.SetRunParallel(bRunParallel);
//
//
- aChrono.Start();
+ OSD_Timer aTimer;
+ aTimer.Start();
//
aBuilder.PerformWithFiller(aPF);
iErr=aBuilder.ErrorStatus();
return 0;
}
//
- aChrono.Stop();
+ aTimer.Stop();
//
- if (bShowTime) {
- Standard_Real aTime;
- //
- aTime=aChrono.Time();
- Sprintf(buf, " Tps: %7.2lf\n", aTime);
+ if (bShowTime)
+ {
+ Sprintf(buf, " Tps: %7.2lf\n", aTimer.ElapsedTime());
di << buf;
}
//
DBRep::Set(a[1], aR);
return 0;
}
-
//=======================================================================
//function : bbop
//purpose :
//=======================================================================
-Standard_Integer bbop(Draw_Interpretor& di, Standard_Integer n, const char** a)
+Standard_Integer bbop(Draw_Interpretor& di,
+ Standard_Integer n,
+ const char** a)
{
- if (n!=3) {
- di << " use bbop r op\n";
+ if (n<3) {
+ di << " use bbop r op [-t]\n";
return 0;
}
//
}
//
char buf[32];
- Standard_Integer iErr, iOp;
+ Standard_Boolean bRunParallel, bShowTime;
+ Standard_Integer iErr, iOp, i;
BOPAlgo_Operation aOp;
- BOPCol_ListIteratorOfListOfShape aIt;
+ BOPCol_ListIteratorOfListOfShape aIt;
//
iOp=Draw::Atoi(a[2]);
if (iOp<0 || iOp>4) {
di << " invalid operation type\n";
+ return 0;
}
aOp=(BOPAlgo_Operation)iOp;
//
+ bShowTime=Standard_False;
+ bRunParallel=BOPTest_Objects::RunParallel();
+ for (i=3; i<n; ++i) {
+ if (!strcmp(a[i], "-t")) {
+ bShowTime=Standard_True;
+ }
+ }
+ //
BOPAlgo_PaveFiller& aPF=BOPTest_Objects::PaveFiller();
//
- BOPAlgo_BOP& aBOP=BOPTest_Objects::BOP();
- aBOP.Clear();
+ BOPAlgo_Builder *pBuilder=NULL;
+
+ if (aOp!=BOPAlgo_SECTION) {
+ pBuilder=&BOPTest_Objects::BOP();
+ }
+ else {
+ pBuilder=&BOPTest_Objects::Section();
+ }
+ //
+ pBuilder->Clear();
//
BOPCol_ListOfShape& aLSObj=BOPTest_Objects::Shapes();
aIt.Initialize(aLSObj);
for (; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aS=aIt.Value();
- aBOP.AddArgument(aS);
+ pBuilder->AddArgument(aS);
}
//
- BOPCol_ListOfShape& aLSTools=BOPTest_Objects::Tools();
- aIt.Initialize(aLSTools);
- for (; aIt.More(); aIt.Next()) {
- const TopoDS_Shape& aS=aIt.Value();
- aBOP.AddTool(aS);
+ if (aOp!=BOPAlgo_SECTION) {
+ BOPAlgo_BOP *pBOP=(BOPAlgo_BOP *)pBuilder;
+ //
+ BOPCol_ListOfShape& aLSTools=BOPTest_Objects::Tools();
+ aIt.Initialize(aLSTools);
+ for (; aIt.More(); aIt.Next()) {
+ const TopoDS_Shape& aS=aIt.Value();
+ pBOP->AddTool(aS);
+ }
+ //
+ pBOP->SetOperation(aOp);
}
+ else {
+ BOPCol_ListOfShape& aLSTools=BOPTest_Objects::Tools();
+ aIt.Initialize(aLSTools);
+ for (; aIt.More(); aIt.Next()) {
+ const TopoDS_Shape& aS=aIt.Value();
+ pBuilder->AddArgument(aS);
+ }
+ }
+ //
+ pBuilder->SetRunParallel(bRunParallel);
//
- aBOP.SetOperation(aOp);
+ OSD_Timer aTimer;
+ aTimer.Start();
//
- aBOP.PerformWithFiller(aPF);
- iErr=aBOP.ErrorStatus();
+ pBuilder->PerformWithFiller(aPF);
+ iErr=pBuilder->ErrorStatus();
if (iErr) {
Sprintf(buf, " error: %d\n", iErr);
di << buf;
return 0;
}
//
- const TopoDS_Shape& aR=aBOP.Shape();
+ aTimer.Stop();
+ //
+ if (bShowTime) {
+ Sprintf(buf, " Tps: %7.2lf\n", aTimer.ElapsedTime());
+ di << buf;
+ }
+ //
+ const TopoDS_Shape& aR=pBuilder->Shape();
if (aR.IsNull()) {
di << " null shape\n";
return 0;