0025748: Parallel version of progress indicator
[occt.git] / src / StepToTopoDS / StepToTopoDS_Builder.cxx
index 2d80105..1fcbc66 100644 (file)
@@ -32,7 +32,7 @@
 #include <Geom_Surface.hxx>
 #include <Interface_Static.hxx>
 #include <Message_Messenger.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 #include <Precision.hxx>
 #include <ShapeFix_ShapeTolerance.hxx>
 #include <Standard_ErrorHandler.hxx>
@@ -111,74 +111,14 @@ StepToTopoDS_Builder::StepToTopoDS_Builder()
 }
 
 // ============================================================================
-// Method  : StepToTopoDS_Builder::StepToTopoDS_Builder
-// Purpose : Constructor with a ManifoldSolidBrep
-// ============================================================================
-
-StepToTopoDS_Builder::StepToTopoDS_Builder
-(const Handle(StepShape_ManifoldSolidBrep)& aManifoldSolid, 
- const Handle(Transfer_TransientProcess)& TP)
-{
-  Init(aManifoldSolid, TP);
-}
-
-// ============================================================================
-// Method  : StepToTopoDS_Builder::StepToTopoDS_Builder
-// Purpose : Constructor woth a BrepWithVoids
-// ============================================================================
-
-StepToTopoDS_Builder::StepToTopoDS_Builder
-(const Handle(StepShape_BrepWithVoids)& aBRepWithVoids,
- const Handle(Transfer_TransientProcess)& TP)
-{
-  Init(aBRepWithVoids, TP);
-}
-
-// ============================================================================
-// Method  : StepToTopoDS_Builder::StepToTopoDS_Builder
-// Purpose : Constructor with a FacetedBrep
-// ============================================================================
-
-StepToTopoDS_Builder::StepToTopoDS_Builder
-(const Handle(StepShape_FacetedBrep)& aFB,
- const Handle(Transfer_TransientProcess)& TP)
-{
-  Init(aFB, TP);
-}
-
-// ============================================================================
-// Method  : StepToTopoDS_Builder::StepToTopoDS_Builder
-// Purpose : Constructor with a FacetedBrepAndBrepWithVoids
-// ============================================================================
-
-StepToTopoDS_Builder::StepToTopoDS_Builder
-(const Handle(StepShape_FacetedBrepAndBrepWithVoids)& aFBABWV,
- const Handle(Transfer_TransientProcess)& TP)
-{
-  Init(aFBABWV, TP);
-}
-
-// ============================================================================
-// Method  : StepToTopoDS_Builder::StepToTopoDS_Builder
-// Purpose : Constructor with a ShellBasedSurfaceModel
-// ============================================================================
-
-StepToTopoDS_Builder::StepToTopoDS_Builder
-(const Handle(StepShape_ShellBasedSurfaceModel)& aSBSM,
- const Handle(Transfer_TransientProcess)& TP,
- StepToTopoDS_NMTool& NMTool)
-{
-  Init(aSBSM, TP, NMTool);
-}
-
-// ============================================================================
 // Method  : Init
 // Purpose : Init with a ManifoldSolidBrep
 // ============================================================================
 
 void StepToTopoDS_Builder::Init
 (const Handle(StepShape_ManifoldSolidBrep)& aManifoldSolid,
- const Handle(Transfer_TransientProcess)& TP)
+ const Handle(Transfer_TransientProcess)& TP,
+ const Message_ProgressRange& theProgress)
 {
   Message_Messenger::StreamBuffer sout = TP->Messenger()->SendInfo();
   // Initialisation of the Tool
@@ -198,7 +138,7 @@ void StepToTopoDS_Builder::Init
   myTranShell.SetMaxTol(MaxTol());
   // Non-manifold topology is not referenced by ManifoldSolidBrep (ssv; 14.11.2010)
   StepToTopoDS_NMTool dummyNMTool;
-  myTranShell.Init(aShell, myTool, dummyNMTool);
+  myTranShell.Init(aShell, myTool, dummyNMTool, theProgress);
 
   if (myTranShell.IsDone()) {
     TopoDS_Shape Sh = myTranShell.Value();
@@ -245,7 +185,8 @@ void StepToTopoDS_Builder::Init
 
 void StepToTopoDS_Builder::Init
 (const Handle(StepShape_BrepWithVoids)& aBRepWithVoids,
- const Handle(Transfer_TransientProcess)& TP)
+ const Handle(Transfer_TransientProcess)& TP,
+ const Message_ProgressRange& theProgress)
 {
   Message_Messenger::StreamBuffer sout = TP->Messenger()->SendInfo();
  // Initialisation of the Tool
@@ -263,7 +204,7 @@ void StepToTopoDS_Builder::Init
   BRep_Builder B;
   B.MakeSolid(S);
   
-  Message_ProgressSentry PS ( TP->GetProgress(), "Shell", 0, Nb+1, 1 );
+  Message_ProgressScope PS (theProgress, "Shell", Nb+1);
 
   StepToTopoDS_TranslateShell myTranShell;
 
@@ -274,9 +215,7 @@ void StepToTopoDS_Builder::Init
   aCShell = Handle(StepShape_ClosedShell)::DownCast(aBRepWithVoids->Outer());
   // Non-manifold topology is not referenced by BrepWithVoids (ssv; 14.11.2010)
   StepToTopoDS_NMTool dummyNMTool;
-  myTranShell.Init(aCShell, myTool, dummyNMTool);
-  
-  PS.Next();
+  myTranShell.Init(aCShell, myTool, dummyNMTool, PS.Next());
 
   if (myTranShell.IsDone()) {
     Sh = myTranShell.Value();
@@ -297,10 +236,10 @@ void StepToTopoDS_Builder::Init
 
   // Voids
 
-  for (Standard_Integer i=1; i<=Nb && PS.More(); i++, PS.Next()) {
+  for (Standard_Integer i=1; i<=Nb && PS.More(); i++) {
 
     aCShell = aBRepWithVoids->VoidsValue(i);
-    myTranShell.Init(aCShell, myTool, dummyNMTool);
+    myTranShell.Init(aCShell, myTool, dummyNMTool, PS.Next());
     if (myTranShell.IsDone()) {
       Sh = myTranShell.Value();
       Sh.Closed(Standard_True);
@@ -346,7 +285,8 @@ void StepToTopoDS_Builder::Init
 // ============================================================================
 
 void StepToTopoDS_Builder::Init(const Handle(StepShape_FacetedBrep)& aFB,
-                              const Handle(Transfer_TransientProcess)& TP)
+                                const Handle(Transfer_TransientProcess)& TP,
+                                const Message_ProgressRange& theProgress)
 {
   // Initialisation of the Tool
 
@@ -366,7 +306,7 @@ void StepToTopoDS_Builder::Init(const Handle(StepShape_FacetedBrep)& aFB,
   myTranShell.SetMaxTol(MaxTol());  
   // Non-manifold topology is not referenced by FacetedBrep (ss; 14.11.2010)
   StepToTopoDS_NMTool dummyNMTool;
-  myTranShell.Init(aCShell, myTool, dummyNMTool);
+  myTranShell.Init(aCShell, myTool, dummyNMTool, theProgress);
 
   if (myTranShell.IsDone()) {
     Sh = myTranShell.Value();
@@ -397,7 +337,8 @@ void StepToTopoDS_Builder::Init(const Handle(StepShape_FacetedBrep)& aFB,
 
 void StepToTopoDS_Builder::Init
 (const Handle(StepShape_FacetedBrepAndBrepWithVoids)& aFBABWV,
- const Handle(Transfer_TransientProcess)& TP)
+ const Handle(Transfer_TransientProcess)& TP,
+ const Message_ProgressRange& theProgress)
 {
   // Initialisation of the Tool
 
@@ -412,12 +353,14 @@ void StepToTopoDS_Builder::Init
   aCShell = Handle(StepShape_ClosedShell)::DownCast(aFBABWV->Outer());
   TopoDS_Shape Sh;
 
+  Message_ProgressScope aPSRoot(theProgress, NULL, 2);
+
   StepToTopoDS_TranslateShell myTranShell;
   myTranShell.SetPrecision(Precision()); //gka
   myTranShell.SetMaxTol(MaxTol());
   // Non-manifold topology is not referenced by FacetedBrepAndBrepWithVoids (ss; 14.11.2010)
   StepToTopoDS_NMTool dummyNMTool;
-  myTranShell.Init(aCShell, myTool, dummyNMTool);
+  myTranShell.Init(aCShell, myTool, dummyNMTool, aPSRoot.Next());
 
   if (myTranShell.IsDone()) {
     Sh = myTranShell.Value();
@@ -429,9 +372,10 @@ void StepToTopoDS_Builder::Init
     B.Add(S,Sh);
     Standard_Integer Nb, i;
     Nb = aFBABWV->NbVoids();
-    for ( i=1; i<=Nb; i++ ) {
+    Message_ProgressScope aPS (aPSRoot.Next(), NULL, Nb);
+    for ( i=1; i<=Nb && aPS.More(); i++) {
       aCShell = aFBABWV->VoidsValue(i);
-      myTranShell.Init(aCShell, myTool, dummyNMTool);
+      myTranShell.Init(aCShell, myTool, dummyNMTool, aPS.Next());
       if (myTranShell.IsDone()) {
         Sh = myTranShell.Value();
         Sh.Closed(Standard_True);
@@ -463,7 +407,8 @@ void StepToTopoDS_Builder::Init
 void StepToTopoDS_Builder::Init
 (const Handle(StepShape_ShellBasedSurfaceModel)& aSBSM,
  const Handle(Transfer_TransientProcess)& TP,
- StepToTopoDS_NMTool& NMTool)
+ StepToTopoDS_NMTool& NMTool,
+ const Message_ProgressRange& theProgress)
 {
   Message_Messenger::StreamBuffer sout = TP->Messenger()->SendInfo();
   // Initialisation of the Tool
@@ -490,13 +435,15 @@ void StepToTopoDS_Builder::Init
   myTranShell.SetPrecision(Precision());
   myTranShell.SetMaxTol(MaxTol());
 
-  Message_ProgressSentry PS ( TP->GetProgress(), "Shell", 0, Nb, 1 );
-  for (Standard_Integer i = 1; i <= Nb && PS.More(); i++, PS.Next()) {
+  Message_ProgressScope PS ( theProgress, "Shell", Nb);
+  for (Standard_Integer i = 1; i <= Nb && PS.More(); i++)
+  {
+    Message_ProgressRange aRange = PS.Next();
     aShell = aSBSM->SbsmBoundaryValue(i);
     aOpenShell = aShell.OpenShell();
     aClosedShell = aShell.ClosedShell();
     if (!aOpenShell.IsNull()) {
-      myTranShell.Init(aOpenShell, myTool, NMTool);
+      myTranShell.Init(aOpenShell, myTool, NMTool, aRange);
       if (myTranShell.IsDone()) {
         Shl = TopoDS::Shell(myTranShell.Value());
         Shl.Closed(Standard_False);
@@ -508,7 +455,7 @@ void StepToTopoDS_Builder::Init
       }
     }
     else if (!aClosedShell.IsNull()) {
-      myTranShell.Init(aClosedShell, myTool, NMTool);
+      myTranShell.Init(aClosedShell, myTool, NMTool, aRange);
       if (myTranShell.IsDone()) {
         Shl = TopoDS::Shell(myTranShell.Value());
         Shl.Closed(Standard_True);
@@ -710,7 +657,8 @@ void StepToTopoDS_Builder::Init
 (const Handle(StepShape_GeometricSet)& GCS,
  const Handle(Transfer_TransientProcess)& TP,
  const Handle(Transfer_ActorOfTransientProcess)& RA,
- const Standard_Boolean isManifold)
+ const Standard_Boolean isManifold,
+ const Message_ProgressRange& theProgress)
 {
   // Start Mapping
   TopoDS_Compound S;
@@ -721,7 +669,10 @@ void StepToTopoDS_Builder::Init
   Standard_Real preci = Precision();   //gka
   Standard_Real maxtol = MaxTol();
   Standard_Integer nbElem = GCS->NbElements();
-  for (i = 1; i <= nbElem ; i++) {
+  Message_ProgressScope aPS(theProgress, NULL, nbElem);
+  for (i = 1; i <= nbElem && aPS.More(); i++)
+  {
+    Message_ProgressRange aRange = aPS.Next();
     StepShape_GeometricSetSelect aGSS = GCS->ElementsValue(i);
     Handle(Standard_Transient) ent = aGSS.Value();
 
@@ -834,7 +785,7 @@ void StepToTopoDS_Builder::Init
         Handle(STEPControl_ActorRead) anActor = Handle(STEPControl_ActorRead)::DownCast(RA);
         Handle(Transfer_Binder) binder;
         if( !anActor.IsNull())
-          binder = anActor->TransferShape(GRI, TP, isManifold);
+          binder = anActor->TransferShape(GRI, TP, isManifold, Standard_False, aRange);
         if (!binder.IsNull())
         {
           res = TransferBRep::ShapeResult(binder);