0025748: Parallel version of progress indicator
authormsv <msv@opencascade.com>
Fri, 10 Jul 2020 11:19:31 +0000 (14:19 +0300)
committerabv <abv@opencascade.com>
Sat, 12 Sep 2020 17:42:22 +0000 (20:42 +0300)
Progress indication mechanism is refactored to support incrementing progress within multithreaded algorithms.

The class Message_ProgressIndicator is only an interface to the user application.
It accumulates the progress provided by progress scopes.
The counter is protected by mutex for thread-safety.

The new class Message_ProgressScope replacing Message_ProgressSentry should be used to advance the progress.
The scopes are nested to each other to reflect the nested nature of operations.
The new class Message_ProgressRange should be used to pass the progress to sub-scopes.

All OCCT algorithms involving progress indication have been updated to new API.

Improvements in Draw_ProgressIndicator:
- Separate console mode has been added in order to make possible to put the progress into std::cout instead
  or in addition to the draw interpreter, instead of trigger option "-tclOutput".
- Treatment of Ctrl-Break signal has been added.
  Now any operation can be aborted by Ctrl-C or Ctrl-Break keystroke.

Added new test case 'perf fclasses progr_par' for testing of parallel work of the progress.

271 files changed:
adm/upgrade.dat
dox/dev_guides/upgrade/upgrade.md
samples/CSharp/OCCTProxy/OCCTProxy.cpp
samples/CSharp/OCCTProxy_D3D/OCCTProxyD3D.cpp
src/BOPAlgo/BOPAlgo_ArgumentAnalyzer.cxx
src/BOPAlgo/BOPAlgo_BOP.cxx
src/BOPAlgo/BOPAlgo_Builder.cxx
src/BOPAlgo/BOPAlgo_Builder_2.cxx
src/BOPAlgo/BOPAlgo_Builder_3.cxx
src/BOPAlgo/BOPAlgo_CheckerSI.cxx
src/BOPAlgo/BOPAlgo_MakerVolume.cxx
src/BOPAlgo/BOPAlgo_Options.cxx
src/BOPAlgo/BOPAlgo_Options.hxx
src/BOPAlgo/BOPAlgo_PaveFiller_2.cxx
src/BOPAlgo/BOPAlgo_PaveFiller_3.cxx
src/BOPAlgo/BOPAlgo_PaveFiller_4.cxx
src/BOPAlgo/BOPAlgo_PaveFiller_5.cxx
src/BOPAlgo/BOPAlgo_PaveFiller_6.cxx
src/BOPAlgo/BOPAlgo_PaveFiller_7.cxx
src/BOPAlgo/BOPAlgo_Splitter.cxx
src/BRepAlgoAPI/BRepAlgoAPI_Algo.hxx
src/BRepAlgoAPI/BRepAlgoAPI_BuilderAlgo.cxx
src/BRepAlgoAPI/BRepAlgoAPI_Check.cxx
src/BRepBuilderAPI/BRepBuilderAPI_Sewing.cxx
src/BRepBuilderAPI/BRepBuilderAPI_Sewing.hxx
src/BRepTest/BRepTest_SurfaceCommands.cxx
src/BRepToIGES/BRepToIGES_BREntity.cxx
src/BRepToIGES/BRepToIGES_BREntity.hxx
src/BRepToIGES/BRepToIGES_BRShell.cxx
src/BRepToIGES/BRepToIGES_BRShell.hxx
src/BRepToIGES/BRepToIGES_BRSolid.cxx
src/BRepToIGES/BRepToIGES_BRSolid.hxx
src/BRepToIGESBRep/BRepToIGESBRep_Entity.cxx
src/BRepToIGESBRep/BRepToIGESBRep_Entity.hxx
src/BRepTools/BRepTools.cxx
src/BRepTools/BRepTools.hxx
src/BRepTools/BRepTools_Modifier.cxx
src/BRepTools/BRepTools_Modifier.hxx
src/BRepTools/BRepTools_ShapeSet.cxx
src/BRepTools/BRepTools_ShapeSet.hxx
src/BinDrivers/BinDrivers_DocumentRetrievalDriver.cxx
src/BinDrivers/BinDrivers_DocumentRetrievalDriver.hxx
src/BinDrivers/BinDrivers_DocumentStorageDriver.cxx
src/BinDrivers/BinDrivers_DocumentStorageDriver.hxx
src/BinLDrivers/BinLDrivers_DocumentRetrievalDriver.cxx
src/BinLDrivers/BinLDrivers_DocumentRetrievalDriver.hxx
src/BinLDrivers/BinLDrivers_DocumentStorageDriver.cxx
src/BinLDrivers/BinLDrivers_DocumentStorageDriver.hxx
src/BinMNaming/BinMNaming_NamedShapeDriver.cxx
src/BinMNaming/BinMNaming_NamedShapeDriver.hxx
src/BinTools/BinTools.cxx
src/BinTools/BinTools.hxx
src/BinTools/BinTools_Curve2dSet.cxx
src/BinTools/BinTools_Curve2dSet.hxx
src/BinTools/BinTools_CurveSet.cxx
src/BinTools/BinTools_CurveSet.hxx
src/BinTools/BinTools_ShapeSet.cxx
src/BinTools/BinTools_ShapeSet.hxx
src/BinTools/BinTools_SurfaceSet.cxx
src/BinTools/BinTools_SurfaceSet.hxx
src/CDF/CDF_Application.cxx
src/CDF/CDF_Application.hxx
src/CDF/CDF_Store.cxx
src/CDF/CDF_Store.hxx
src/CDF/CDF_StoreList.cxx
src/CDF/CDF_StoreList.hxx
src/CDM/CDM_Application.hxx
src/DBRep/DBRep.cxx
src/DDocStd/DDocStd_ApplicationCommands.cxx
src/Draw/Draw.cxx
src/Draw/Draw.hxx
src/Draw/Draw_ProgressIndicator.cxx
src/Draw/Draw_ProgressIndicator.hxx
src/Draw/Draw_VariableCommands.cxx
src/GeomPlate/GeomPlate_BuildPlateSurface.cxx
src/GeomPlate/GeomPlate_BuildPlateSurface.hxx
src/GeomTools/GeomTools_Curve2dSet.cxx
src/GeomTools/GeomTools_Curve2dSet.hxx
src/GeomTools/GeomTools_CurveSet.cxx
src/GeomTools/GeomTools_CurveSet.hxx
src/GeomTools/GeomTools_SurfaceSet.cxx
src/GeomTools/GeomTools_SurfaceSet.hxx
src/IGESCAFControl/IGESCAFControl_Reader.cxx
src/IGESCAFControl/IGESCAFControl_Reader.hxx
src/IGESCAFControl/IGESCAFControl_Writer.cxx
src/IGESCAFControl/IGESCAFControl_Writer.hxx
src/IGESControl/IGESControl_ActorWrite.cxx
src/IGESControl/IGESControl_ActorWrite.hxx
src/IGESControl/IGESControl_Controller.cxx
src/IGESControl/IGESControl_Controller.hxx
src/IGESControl/IGESControl_Writer.cxx
src/IGESControl/IGESControl_Writer.hxx
src/IGESToBRep/IGESToBRep_Actor.cxx
src/IGESToBRep/IGESToBRep_Actor.hxx
src/IGESToBRep/IGESToBRep_BRepEntity.cxx
src/IGESToBRep/IGESToBRep_BRepEntity.hxx
src/IGESToBRep/IGESToBRep_CurveAndSurface.cxx
src/IGESToBRep/IGESToBRep_CurveAndSurface.hxx
src/IGESToBRep/IGESToBRep_Reader.cxx
src/IGESToBRep/IGESToBRep_Reader.hxx
src/Message/FILES
src/Message/Message_ProgressIndicator.cxx
src/Message/Message_ProgressIndicator.hxx
src/Message/Message_ProgressIndicator.lxx [deleted file]
src/Message/Message_ProgressRange.hxx [new file with mode: 0644]
src/Message/Message_ProgressScale.cxx [deleted file]
src/Message/Message_ProgressScale.hxx [deleted file]
src/Message/Message_ProgressScale.lxx [deleted file]
src/Message/Message_ProgressScope.hxx [new file with mode: 0644]
src/Message/Message_ProgressSentry.cxx [deleted file]
src/Message/Message_ProgressSentry.hxx
src/Message/Message_ProgressSentry.lxx [deleted file]
src/Message/Message_SequenceOfProgressScale.hxx [deleted file]
src/PCDM/PCDM_Reader.hxx
src/PCDM/PCDM_StorageDriver.cxx
src/PCDM/PCDM_StorageDriver.hxx
src/PCDM/PCDM_Writer.hxx
src/Plate/Plate_Plate.cxx
src/Plate/Plate_Plate.hxx
src/QABugs/QABugs_11.cxx
src/RWGltf/RWGltf_CafReader.cxx
src/RWGltf/RWGltf_CafReader.hxx
src/RWGltf/RWGltf_CafWriter.cxx
src/RWGltf/RWGltf_CafWriter.hxx
src/RWGltf/RWGltf_GltfJsonParser.cxx
src/RWGltf/RWGltf_GltfJsonParser.pxx
src/RWMesh/RWMesh_CafReader.cxx
src/RWMesh/RWMesh_CafReader.hxx
src/RWObj/RWObj.cxx
src/RWObj/RWObj.hxx
src/RWObj/RWObj_CafReader.cxx
src/RWObj/RWObj_CafReader.hxx
src/RWObj/RWObj_Reader.cxx
src/RWObj/RWObj_Reader.hxx
src/RWStl/RWStl.cxx
src/RWStl/RWStl.hxx
src/RWStl/RWStl_Reader.cxx
src/RWStl/RWStl_Reader.hxx
src/STEPCAFControl/STEPCAFControl_Reader.cxx
src/STEPCAFControl/STEPCAFControl_Reader.hxx
src/STEPCAFControl/STEPCAFControl_Writer.cxx
src/STEPCAFControl/STEPCAFControl_Writer.hxx
src/STEPControl/STEPControl_ActorRead.cxx
src/STEPControl/STEPControl_ActorRead.hxx
src/STEPControl/STEPControl_ActorWrite.cxx
src/STEPControl/STEPControl_ActorWrite.hxx
src/STEPControl/STEPControl_Controller.cxx
src/STEPControl/STEPControl_Controller.hxx
src/STEPControl/STEPControl_Reader.cxx
src/STEPControl/STEPControl_Reader.hxx
src/STEPControl/STEPControl_Writer.cxx
src/STEPControl/STEPControl_Writer.hxx
src/SWDRAW/SWDRAW_ShapeFix.cxx
src/SWDRAW/SWDRAW_ShapeUpgrade.cxx
src/ShapeCustom/ShapeCustom.cxx
src/ShapeCustom/ShapeCustom.hxx
src/ShapeFix/ShapeFix.cxx
src/ShapeFix/ShapeFix.hxx
src/ShapeFix/ShapeFix_Shape.cxx
src/ShapeFix/ShapeFix_Shape.hxx
src/ShapeFix/ShapeFix_Shell.cxx
src/ShapeFix/ShapeFix_Shell.hxx
src/ShapeFix/ShapeFix_Solid.cxx
src/ShapeFix/ShapeFix_Solid.hxx
src/ShapeProcess/ShapeProcess.cxx
src/ShapeProcess/ShapeProcess.hxx
src/ShapeProcess/ShapeProcess_Context.cxx
src/ShapeProcess/ShapeProcess_Context.hxx
src/ShapeProcess/ShapeProcess_OperFunc.hxx
src/ShapeProcess/ShapeProcess_OperLibrary.cxx
src/ShapeProcess/ShapeProcess_Operator.hxx
src/ShapeProcess/ShapeProcess_UOperator.cxx
src/ShapeProcess/ShapeProcess_UOperator.hxx
src/ShapeProcessAPI/ShapeProcessAPI_ApplySequence.cxx
src/ShapeProcessAPI/ShapeProcessAPI_ApplySequence.hxx
src/StdLDrivers/StdLDrivers_DocumentRetrievalDriver.cxx
src/StdLDrivers/StdLDrivers_DocumentRetrievalDriver.hxx
src/StepToTopoDS/StepToTopoDS_Builder.cxx
src/StepToTopoDS/StepToTopoDS_Builder.hxx
src/StepToTopoDS/StepToTopoDS_MakeTransformed.cxx
src/StepToTopoDS/StepToTopoDS_MakeTransformed.hxx
src/StepToTopoDS/StepToTopoDS_TranslateShell.cxx
src/StepToTopoDS/StepToTopoDS_TranslateShell.hxx
src/StlAPI/StlAPI_Writer.cxx
src/StlAPI/StlAPI_Writer.hxx
src/TDocStd/TDocStd_Application.cxx
src/TDocStd/TDocStd_Application.hxx
src/TopTools/TopTools_LocationSet.cxx
src/TopTools/TopTools_LocationSet.hxx
src/TopTools/TopTools_ShapeSet.cxx
src/TopTools/TopTools_ShapeSet.hxx
src/TopoDSToStep/TopoDSToStep_Builder.cxx
src/TopoDSToStep/TopoDSToStep_Builder.hxx
src/TopoDSToStep/TopoDSToStep_MakeBrepWithVoids.cxx
src/TopoDSToStep/TopoDSToStep_MakeBrepWithVoids.hxx
src/TopoDSToStep/TopoDSToStep_MakeFacetedBrep.cxx
src/TopoDSToStep/TopoDSToStep_MakeFacetedBrep.hxx
src/TopoDSToStep/TopoDSToStep_MakeFacetedBrepAndBrepWithVoids.cxx
src/TopoDSToStep/TopoDSToStep_MakeFacetedBrepAndBrepWithVoids.hxx
src/TopoDSToStep/TopoDSToStep_MakeManifoldSolidBrep.cxx
src/TopoDSToStep/TopoDSToStep_MakeManifoldSolidBrep.hxx
src/TopoDSToStep/TopoDSToStep_MakeShellBasedSurfaceModel.cxx
src/TopoDSToStep/TopoDSToStep_MakeShellBasedSurfaceModel.hxx
src/Transfer/Transfer_Actor.gxx
src/Transfer/Transfer_ActorDispatch.cxx
src/Transfer/Transfer_ActorDispatch.hxx
src/Transfer/Transfer_ActorOfFinderProcess.cxx
src/Transfer/Transfer_ActorOfFinderProcess.hxx
src/Transfer/Transfer_ActorOfProcessForFinder.hxx
src/Transfer/Transfer_ActorOfProcessForTransient.hxx
src/Transfer/Transfer_ActorOfTransientProcess.cxx
src/Transfer/Transfer_ActorOfTransientProcess.hxx
src/Transfer/Transfer_ProcessForFinder.hxx
src/Transfer/Transfer_ProcessForFinder_0.cxx
src/Transfer/Transfer_ProcessForTransient.hxx
src/Transfer/Transfer_ProcessForTransient_0.cxx
src/Transfer/Transfer_TransferOutput.cxx
src/Transfer/Transfer_TransferOutput.hxx
src/Transfer/Transfer_TransferProcess.gxx
src/TransferBRep/TransferBRep_Reader.cxx
src/TransferBRep/TransferBRep_Reader.hxx
src/ViewerTest/ViewerTest_ViewerCommands.cxx
src/XCAFDoc/XCAFDoc_NotesTool.hxx
src/XSAlgo/XSAlgo_AlgoContainer.cxx
src/XSAlgo/XSAlgo_AlgoContainer.hxx
src/XSControl/XSControl_Controller.cxx
src/XSControl/XSControl_Controller.hxx
src/XSControl/XSControl_Reader.cxx
src/XSControl/XSControl_Reader.hxx
src/XSControl/XSControl_TransferReader.cxx
src/XSControl/XSControl_TransferReader.hxx
src/XSControl/XSControl_TransferWriter.cxx
src/XSControl/XSControl_TransferWriter.hxx
src/XSControl/XSControl_WorkSession.cxx
src/XSControl/XSControl_WorkSession.hxx
src/XSControl/XSControl_Writer.cxx
src/XSControl/XSControl_Writer.hxx
src/XSDRAWIGES/XSDRAWIGES.cxx
src/XSDRAWSTEP/XSDRAWSTEP.cxx
src/XSDRAWSTLVRML/XSDRAWSTLVRML.cxx
src/XmlDrivers/XmlDrivers_DocumentRetrievalDriver.cxx
src/XmlDrivers/XmlDrivers_DocumentRetrievalDriver.hxx
src/XmlDrivers/XmlDrivers_DocumentStorageDriver.cxx
src/XmlDrivers/XmlDrivers_DocumentStorageDriver.hxx
src/XmlLDrivers/XmlLDrivers_DocumentRetrievalDriver.cxx
src/XmlLDrivers/XmlLDrivers_DocumentRetrievalDriver.hxx
src/XmlLDrivers/XmlLDrivers_DocumentStorageDriver.cxx
src/XmlLDrivers/XmlLDrivers_DocumentStorageDriver.hxx
src/XmlMDF/XmlMDF.cxx
src/XmlMDF/XmlMDF.hxx
src/XmlMNaming/XmlMNaming_NamedShapeDriver.cxx
src/XmlMNaming/XmlMNaming_NamedShapeDriver.hxx
src/math/math_Gauss.cxx
src/math/math_Gauss.hxx
src/math/math_Recipes.cxx
src/math/math_Recipes.hxx
tests/bugs/fclasses/bug28478
tests/bugs/fclasses/bug31092
tests/bugs/modalg_5/bug22747
tests/bugs/moddata_2/bug22572
tests/bugs/moddata_2/bug22746_1
tests/bugs/moddata_2/bug22746_2
tests/bugs/moddata_2/bug22746_3
tests/caf/progress/A1
tests/caf/progress/A2
tests/caf/progress/B1
tests/caf/progress/B2
tests/caf/progress/C1
tests/caf/progress/C2
tests/de_mesh/shape_write_stl/B1
tests/perf/fclasses/progr_par [new file with mode: 0644]

index a56dd39..ff200b9 100644 (file)
@@ -71,6 +71,7 @@ BOPTools::MapShapesAndAncestors TopExp::MapShapesAndAncestors
 BOPCol_Box2DBndTreeSelector BOPTools_BoxSelector<Bnd_Box2d>
 BiTgte_DataMapOfShapeBox TopTools_DataMapOfShapeBox
 CDM_MessageDriver Message_Messenger
+Message_ProgressSentry Message_ProgressScope
 
 [tcollection]
 AdvApp2Var_SequenceOfNode
index 75d4062..92cb0d9 100644 (file)
@@ -1935,6 +1935,118 @@ Offset direction, which used in class Adaptor2d_OffsetCurve for evaluating value
 
 Adaptor2d_OffsetCurve aOC(BaseCurve, Offset) --> Adaptor2d_OffsetCurve aOC(BaseCurve, -Offset)
 
+subsection upgrade_750_ProgressIndicator Change of Message_ProgressIndicator
+
+The progress indication mechanism has been revised to eliminate its weak points in previous design (leading to ambiguity and unprotected from an error-prone behavior).
+Redesign also allows using progress indicator in multi-threaded algorithms in more straight-forward way with minimal overhead.
+Note, however, that multi-threaded algorithm should pre-allocate per-thread progress scopes in advance to ensure thread-safety - check new classes API for details.
+
+Classes Message_ProgressSentry and Message_ProgressScale have been removed.
+New classes Message_ProgressScope and Messge_ProgressRange replace them and should be used as main API classes to organize progress indication in the algorithms.
+Instances of the class Message_ProgressRange are used to pass the progress capability to nested levels of the algorithm
+and an instance of the class Message_ProgressScope is to be created (preferably as local variable) to manage progress at each level of the algorithm.
+The instance of Message_ProgressIndicator is not passed anymore to sub-algorithms.
+See documentation of the class Message_ProgressScope for more details and examples.
+
+Methods to deal with progress scopes and to advance progress are removed from class Message_ProgressIndicator; now it only provides interface to the application-level progress indicator.
+Virtual method Message_ProgressIndicator::Show() has changed its signature and should be updated accordingly in descendants of Message_ProgressIndicator.
+The scope passed as argument to this method can be used to obtain information on context of the current process (instead of calling method GetScope() in previous implementation).
+Methods Show(), UserBreak(), and Reset() are made protected in class Message_ProgressIndicator; method More() of Message_ProgressScope should be used to know if the cancel event has come.
+See documentation of the class Message_ProgressIndicator for more details and implementation of Draw_ProgressIndicator for an example.
+
+Lets take a look onto typical algorithm using an old API:
+@code
+class MyAlgo
+{
+public:
+  //! Algorithm entry point taking an optional Progress Indicator.
+  bool Perform (const TCollection_AsciiString& theFileName,
+                const Handle(Message_ProgressIndicator)& theProgress = Handle(Message_ProgressIndicator)())
+  {
+    Message_ProgressSentry aPSentry (theProgress, (TCollection_AsciiString("Processing ") + theFileName).ToCString(), 2);
+    {
+      Message_ProgressSentry aPSentry1 (theProgress, "Stage 1", 0, 153, 1);
+      for (int anIter = 0; anIter < 153; ++anIter, aPSentry1.Next())
+      { if (!aPSentry1.More()) { return false; } }
+    }
+    aPSentry.Next();
+    {
+      perform2 (theProgress);
+    }
+    aPSentry.Next();
+    bool wasAborted = !theProgress.IsNull() && theProgress->UserBreak();
+    return !wasAborted;
+  }
+
+private:
+  //! Nested sub-algorithm taking Progress Indicator.
+  bool perform2 (const Handle(Message_ProgressIndicator)& theProgress)
+  {
+    Message_ProgressSentry aPSentry2 (theProgress, "Stage 2", 0, 561, 1);
+    for (int anIter = 0; anIter < 561 && aPSentry2.More(); ++anIter, aPSentry2.Next()) {}
+    return aPSentry2.More();
+  }
+};
+
+// application executing an algorithm
+Handle(Message_ProgressIndicator) aProgress = new MyProgress();
+MyAlgo anAlgo;
+anAlgo.Perform ("FileName", aProgress);
+@endcode
+
+The following guidance can be used to update such code:
+- Replace `const Handle(Message_ProgressIndicator)&` with `const Message_ProgressRange&`.
+  Message_ProgressIndicator object should be now created only at place where application starts algorithms.
+- Replace `Message_ProgressSentry` with `Message_ProgressScope`.
+  Take note that Message_ProgressScope has smaller number of arguments (no "minimal value").
+  In other aspects, Message_ProgressScope mimics an iterator-style interface (with methods More() and Next())
+  close to the old Message_ProgressSentry (pay attention to extra functionality of Message_ProgressScope::Next() method below).
+- Each Message_ProgressScope should take the next Range to fill in.
+  Within old API, Message_ProgressSentry received the root Progress Indicator object and implicitly split it into ranges using error-prone logic.
+  Message_ProgressScope in new API takes Message_ProgressRange, which should be created from the Range of the parent Scope using value returned by Message_ProgressScope::Next() method.
+  Don't use the same Range passed to the algorithm for all sub-Scopes like it was possible in old API.
+- Check user abortion state using Message_ProgressScope::UserBreak() method;
+  Message_ProgressRange is a temporary object with the only purpose to create a new Message_ProgressScope,
+  and Message_ProgressIndicator should be never passed directly to algorithms.
+
+Take a look onto ported code and compare with code above to see differences:
+
+@code
+class MyAlgo
+{
+public:
+  //! Algorithm entry point taking an optional Progress Range.
+  bool Perform (const TCollection_AsciiString& theFileName,
+                const Message_ProgressRange& theProgress = Message_ProgressRange())
+  {
+    Message_ProgressScope aPSentry (theProgress, TCollection_AsciiString("Processing ") + theFileName, 2);
+    {
+      Message_ProgressScope aPSentry1 (aPSentry.Next(), "Stage 1", 153);
+      for (int anIter = 0; anIter < 153; ++anIter, aPSentry1.Next())
+      { if (!aPSentry1.More()) { return false; }; }
+    }
+    {
+      perform2 (aPSentry.Next());
+    }
+    bool wasAborted = aPSentry.UserBreak();
+    return !wasAborted;
+  }
+
+  //! Nested sub-algorithm taking Progress sub-Range.
+  bool perform2 (const Message_ProgressRange& theProgress)
+  {
+    Message_ProgressScope aPSentry2 (theProgress, "Stage 2", 561);
+    for (int anIter = 0; anIter < 561 && aPSentry2.More(); ++anIter, aPSentry2.Next()) {}
+    return aPSentry2.More();
+  }
+};
+
+// application executing an algorithm
+Handle(Message_ProgressIndicator) aProgress = new MyProgress();
+MyAlgo anAlgo;
+anAlgo.Perform ("FileName", aProgress->Start());
+@endcode
+
 @subsection upgrade_750_message_messenger Message_Messenger interface change
 
 Operators << with left argument *Handle(Message_Messenger)*, used to output messages with
index d333aa6..f170265 100644 (file)
@@ -1,6 +1,7 @@
 // include required OCCT headers
 #include <Standard_Version.hxx>
 #include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressScope.hxx>
 //for OCC graphic
 #include <Aspect_DisplayConnection.hxx>
 #include <WNT_Window.hxx>
index e79cc4a..a2dc64c 100644 (file)
@@ -4,6 +4,7 @@
 // include required OCCT headers
 #include <Standard_Version.hxx>
 #include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressScope.hxx>
 //for OCC graphic
 #include <WNT_Window.hxx>
 #include <WNT_WClass.hxx>
index 4cc6e17..e92da63 100644 (file)
@@ -357,7 +357,7 @@ void BOPAlgo_ArgumentAnalyzer::TestSelfInterferences()
     aChecker.SetNonDestructive(Standard_True);
     aChecker.SetRunParallel(myRunParallel);
     aChecker.SetFuzzyValue(myFuzzyValue);
-    aChecker.SetProgressIndicator(myProgressIndicator);
+    aChecker.SetProgressIndicator(*myProgressScope);
     //
     aChecker.Perform();
     Standard_Boolean hasError = aChecker.HasErrors();
index a6f49f2..5069c21 100644 (file)
@@ -388,7 +388,7 @@ void BOPAlgo_BOP::Perform()
   pPF=new BOPAlgo_PaveFiller(aAllocator);
   pPF->SetArguments(aLS);
   pPF->SetRunParallel(myRunParallel);
-  pPF->SetProgressIndicator(myProgressIndicator);
+  pPF->SetProgressIndicator(*myProgressScope);
   pPF->SetFuzzyValue(myFuzzyValue);
   pPF->SetNonDestructive(myNonDestructive);
   pPF->SetGlue(myGlue);
index 875546f..e46106e 100644 (file)
@@ -195,7 +195,7 @@ void BOPAlgo_Builder::Perform()
   //
   pPF->SetArguments(myArguments);
   pPF->SetRunParallel(myRunParallel);
-  pPF->SetProgressIndicator(myProgressIndicator);
+  pPF->SetProgressIndicator(*myProgressScope);
   pPF->SetFuzzyValue(myFuzzyValue);
   pPF->SetNonDestructive(myNonDestructive);
   pPF->SetGlue(myGlue);
@@ -632,7 +632,7 @@ void BOPAlgo_Builder::BuildBOP(const TopTools_ListOfShape& theObjects,
   aBS.SetRunParallel(myRunParallel);
   aBS.SetContext(myContext);
   aBS.SetFuzzyValue(myFuzzyValue);
-  aBS.SetProgressIndicator(myProgressIndicator);
+  aBS.SetProgressIndicator(*myProgressScope);
   aBS.Perform();
 
   // Resulting solids
index 157b1fd..17c29ad 100644 (file)
@@ -438,7 +438,7 @@ void BOPAlgo_Builder::BuildSplitFaces()
     aBF.SetFace(aF);
     aBF.SetShapes(aLE);
     aBF.SetRunParallel(myRunParallel);
-    aBF.SetProgressIndicator(myProgressIndicator);
+    aBF.SetProgressIndicator(*myProgressScope);
     //
   }// for (i=0; i<aNbS; ++i) {
   //
@@ -625,7 +625,7 @@ void BOPAlgo_Builder::FillSameDomainFaces()
         aPSB.Shape1() = aF1;
         aPSB.Shape2() = aF2;
         aPSB.SetFuzzyValue(myFuzzyValue);
-        aPSB.SetProgressIndicator(myProgressIndicator);
+        aPSB.SetProgressIndicator(*myProgressScope);
       }
     }
   }
@@ -778,7 +778,7 @@ void BOPAlgo_Builder::FillInternalVertices()
         aVFI.SetVertex(aV);
         aVFI.SetFace(aFIm);
         aVFI.SetFuzzyValue(myFuzzyValue);
-        aVFI.SetProgressIndicator(myProgressIndicator);
+        aVFI.SetProgressIndicator(*myProgressScope);
       }
     }
   }
index 040ce7b..067256a 100644 (file)
@@ -432,7 +432,7 @@ void BOPAlgo_Builder::BuildSplitSolids(TopTools_DataMapOfShapeShape& theDraftSol
     aBS.SetSolid(aSolid);
     aBS.SetShapes(aSFS);
     aBS.SetRunParallel(myRunParallel);
-    aBS.SetProgressIndicator(myProgressIndicator);
+    aBS.SetProgressIndicator(*myProgressScope);
   }//for (i=0; i<aNbS; ++i) {
   //
   Standard_Integer k, aNbBS;
index 3a34b9b..26c04b1 100644 (file)
@@ -432,7 +432,7 @@ void BOPAlgo_CheckerSI::CheckFaceSelfIntersection()
     aFaceSelfIntersect.SetFace(aF);
     aFaceSelfIntersect.SetTolF(aTolF);
     //
-    aFaceSelfIntersect.SetProgressIndicator(myProgressIndicator);
+    aFaceSelfIntersect.SetProgressIndicator(*myProgressScope);
   }
   
   Standard_Integer aNbFace = aVFace.Length();
index c8e1810..148046e 100644 (file)
@@ -86,7 +86,7 @@ void BOPAlgo_MakerVolume::Perform()
   }
   //
   pPF->SetRunParallel(myRunParallel);
-  pPF->SetProgressIndicator(myProgressIndicator);
+  pPF->SetProgressIndicator(*myProgressScope);
   pPF->SetFuzzyValue(myFuzzyValue);
   pPF->SetNonDestructive(myNonDestructive);
   pPF->SetGlue(myGlue);
index 0ef8524..34da6bc 100644 (file)
@@ -15,8 +15,9 @@
 
 #include <BOPAlgo_Options.hxx>
 #include <Message_MsgFile.hxx>
-#include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressScope.hxx>
 #include <NCollection_BaseAllocator.hxx>
+#include <TCollection_AsciiString.hxx>
 #include <Precision.hxx>
 #include <Standard_NotImplemented.hxx>
 #include <Standard_ProgramError.hxx>
@@ -51,6 +52,7 @@ BOPAlgo_Options::BOPAlgo_Options()
   myReport(new Message_Report),
   myRunParallel(myGlobalRunParallel),
   myFuzzyValue(Precision::Confusion()),
+  myProgressScope(0L),
   myUseOBB(Standard_False)
 {
   BOPAlgo_LoadMessages();
@@ -67,6 +69,7 @@ BOPAlgo_Options::BOPAlgo_Options
   myReport(new Message_Report),
   myRunParallel(myGlobalRunParallel),
   myFuzzyValue(Precision::Confusion()),
+  myProgressScope(0L),
   myUseOBB(Standard_False)
 {
   BOPAlgo_LoadMessages();
@@ -132,22 +135,21 @@ void BOPAlgo_Options::SetFuzzyValue(const Standard_Real theFuzz)
 //purpose  : 
 //=======================================================================
 void BOPAlgo_Options::SetProgressIndicator
-  (const Handle(Message_ProgressIndicator)& theObj)
+  (const Message_ProgressScope& theScope)
 {
-  if (!theObj.IsNull()) {
-    myProgressIndicator = theObj;
-  }
+  myProgressScope = &theScope;
 }
+
 //=======================================================================
 //function : UserBreak
 //purpose  : 
 //=======================================================================
 void BOPAlgo_Options::UserBreak() const
 {
-  if (myProgressIndicator.IsNull()) {
+  if (!myProgressScope) {
     return;
   }
-  if (myProgressIndicator->UserBreak()) {
+  if (myProgressScope->UserBreak()) {
     throw Standard_NotImplemented("BOPAlgo_Options::UserBreak(), method is not implemented");
   }
 }
index 2c85208..6043fec 100644 (file)
@@ -20,7 +20,7 @@
 
 #include <NCollection_BaseAllocator.hxx>
 
-class Message_ProgressIndicator;
+class Message_ProgressScope;
 
 //! The class provides the following options for the algorithms in Boolean Component:
 //! - *Memory allocation tool* - tool for memory allocations;
@@ -156,7 +156,7 @@ public:
   //!@name Progress indicator
 
   //! Set the Progress Indicator object.
-  Standard_EXPORT void SetProgressIndicator(const Handle(Message_ProgressIndicator)& theObj);
+  Standard_EXPORT void SetProgressIndicator(const Message_ProgressScope& theProgress);
 
 public:
   //!@name Usage of Oriented Bounding boxes
@@ -185,7 +185,7 @@ protected:
   Handle(Message_Report) myReport;
   Standard_Boolean myRunParallel;
   Standard_Real myFuzzyValue;
-  Handle(Message_ProgressIndicator) myProgressIndicator;
+  const Message_ProgressScope* myProgressScope;
   Standard_Boolean myUseOBB;
 
 };
index 1c9975a..5935576 100644 (file)
@@ -264,7 +264,7 @@ void BOPAlgo_PaveFiller::IntersectVE
       aVESolver.SetEdge(aE);
       aVESolver.SetPaveBlock(aPB);
       aVESolver.SetFuzzyValue(myFuzzyValue);
-      aVESolver.SetProgressIndicator(myProgressIndicator);
+      aVESolver.SetProgressIndicator(*myProgressScope);
     }
   }
   //
index 8988912..a100b82 100644 (file)
@@ -253,7 +253,7 @@ void BOPAlgo_PaveFiller::PerformEE()
         anEdgeEdge.SetEdge2(aE2, aT21, aT22);
         anEdgeEdge.SetBoxes (aBB1, aBB2);
         anEdgeEdge.SetFuzzyValue(myFuzzyValue);
-        anEdgeEdge.SetProgressIndicator(myProgressIndicator);
+        anEdgeEdge.SetProgressIndicator(*myProgressScope);
       }//for (; aIt2.More(); aIt2.Next()) {
     }//for (; aIt1.More(); aIt1.Next()) {
   }//for (; myIterator->More(); myIterator->Next()) {
@@ -1073,7 +1073,7 @@ void BOPAlgo_PaveFiller::ForceInterfEE()
           anEdgeEdge.SetFuzzyValue(myFuzzyValue + aTolAdd);
         else
           anEdgeEdge.SetFuzzyValue(myFuzzyValue);
-        anEdgeEdge.SetProgressIndicator(myProgressIndicator);
+        anEdgeEdge.SetProgressIndicator(*myProgressScope);
       }
     }
   }
index 2e8fd76..e794d63 100644 (file)
@@ -217,7 +217,7 @@ void BOPAlgo_PaveFiller::PerformVF()
     aVertexFace.SetVertex(aV);
     aVertexFace.SetFace(aF);
     aVertexFace.SetFuzzyValue(myFuzzyValue);
-    aVertexFace.SetProgressIndicator(myProgressIndicator);
+    aVertexFace.SetProgressIndicator(*myProgressScope);
   }//for (; myIterator->More(); myIterator->Next()) {
   //
   aNbVF=aVVF.Length();
index 6c4ab28..f06e5a5 100644 (file)
@@ -278,7 +278,7 @@ void BOPAlgo_PaveFiller::PerformEF()
       aSR = aPBRange;
       BOPTools_AlgoTools::CorrectRange(aE, aF, aSR, aPBRange);
       aEdgeFace.SetRange (aPBRange);
-      aEdgeFace.SetProgressIndicator(myProgressIndicator);
+      aEdgeFace.SetProgressIndicator(*myProgressScope);
       // Save the pair to avoid their forced intersection
       BOPDS_MapOfPaveBlock* pMPB = myFPBDone.ChangeSeek(nF);
       if (!pMPB)
@@ -999,7 +999,7 @@ void BOPAlgo_PaveFiller::ForceInterfEF(const BOPDS_IndexedMapOfPaveBlock& theMPB
         aEdgeFace.SetFuzzyValue(myFuzzyValue + aTolAdd);
         aEdgeFace.UseQuickCoincidenceCheck(Standard_True);
         aEdgeFace.SetRange(IntTools_Range(aPB->Pave1().Parameter(), aPB->Pave2().Parameter()));
-        aEdgeFace.SetProgressIndicator(myProgressIndicator);
+        aEdgeFace.SetProgressIndicator(*myProgressScope);
       }
     }
   }
index 5e81be5..7dad175 100644 (file)
@@ -306,7 +306,7 @@ void BOPAlgo_PaveFiller::PerformFF()
       //
       aFaceFace.SetParameters(bApprox, bCompC2D1, bCompC2D2, anApproxTol);
       aFaceFace.SetFuzzyValue(myFuzzyValue);
-      aFaceFace.SetProgressIndicator(myProgressIndicator);
+      aFaceFace.SetProgressIndicator(*myProgressScope);
     }
     else {
       // for the Glue mode just add all interferences of that type
@@ -1007,7 +1007,7 @@ void BOPAlgo_PaveFiller::PostTreatFF
   }
   //
   // 2 Fuse shapes
-  aPF.SetProgressIndicator(myProgressIndicator);
+  aPF.SetProgressIndicator(*myProgressScope);
   aPF.SetRunParallel(myRunParallel);
   aPF.SetArguments(aLS);
   aPF.Perform();
index 0b299ee..18467d0 100644 (file)
@@ -484,7 +484,7 @@ void BOPAlgo_PaveFiller::MakeSplitEdges()
         aBSE.SetCommonBlock(aCB);
       }
       aBSE.SetDS(myDS);
-      aBSE.SetProgressIndicator(myProgressIndicator);
+      aBSE.SetProgressIndicator(*myProgressScope);
     } // for (; aItPB.More(); aItPB.Next()) {
   }  // for (i=0; i<aNbPBP; ++i) {      
   //
@@ -596,7 +596,7 @@ void BOPAlgo_PaveFiller::MakePCurves()
       BOPAlgo_MPC& aMPC=aVMPC.Appended();
       aMPC.SetEdge(aE);
       aMPC.SetFace(aF1F);
-      aMPC.SetProgressIndicator(myProgressIndicator);
+      aMPC.SetProgressIndicator(*myProgressScope);
     }
     //
     // On
@@ -660,7 +660,7 @@ void BOPAlgo_PaveFiller::MakePCurves()
 
       aMPC.SetEdge(aE);
       aMPC.SetFace(aF1F);
-      aMPC.SetProgressIndicator(myProgressIndicator);
+      aMPC.SetProgressIndicator(*myProgressScope);
     }
   }// for (i=0; i<aNbFI; ++i) {
   //
@@ -710,7 +710,7 @@ void BOPAlgo_PaveFiller::MakePCurves()
               aMPC.SetEdge(aE);
               aMPC.SetFace(aFf[m]);
               aMPC.SetFlag(Standard_True);
-              aMPC.SetProgressIndicator(myProgressIndicator);
+              aMPC.SetProgressIndicator(*myProgressScope);
             }
           }
         }
index c0bea0d..5936d6c 100644 (file)
@@ -89,7 +89,7 @@ void BOPAlgo_Splitter::Perform()
   BOPAlgo_PaveFiller *pPF = new BOPAlgo_PaveFiller();
   pPF->SetArguments(aLS);
   pPF->SetRunParallel(myRunParallel);
-  pPF->SetProgressIndicator(myProgressIndicator);
+  pPF->SetProgressIndicator(*myProgressScope);
   pPF->SetFuzzyValue(myFuzzyValue);
   pPF->SetNonDestructive(myNonDestructive);
   pPF->SetGlue(myGlue);
index 726ccb7..1511ee4 100644 (file)
@@ -24,9 +24,8 @@
 #include <Standard_Boolean.hxx>
 #include <BRepBuilderAPI_MakeShape.hxx>
 #include <BOPAlgo_Options.hxx>
-class Message_ProgressIndicator;
-class TopoDS_Shape;
 
+class TopoDS_Shape;
 
 //! Provides the root interface for the API algorithms
 
index 96ce7fd..0046e4f 100644 (file)
@@ -125,7 +125,7 @@ void BRepAlgoAPI_BuilderAlgo::IntersectShapes(const TopTools_ListOfShape& theArg
   myDSFiller->SetArguments(theArgs);
   // Set options for intersection
   myDSFiller->SetRunParallel(myRunParallel);
-  myDSFiller->SetProgressIndicator(myProgressIndicator);
+  myDSFiller->SetProgressIndicator(*myProgressScope);
   myDSFiller->SetFuzzyValue(myFuzzyValue);
   myDSFiller->SetNonDestructive(myNonDestructive);
   myDSFiller->SetGlue(myGlue);
@@ -145,7 +145,7 @@ void BRepAlgoAPI_BuilderAlgo::BuildResult()
 {
   // Set options to the builder
   myBuilder->SetRunParallel(myRunParallel);
-  myBuilder->SetProgressIndicator(myProgressIndicator);
+  myBuilder->SetProgressIndicator(*myProgressScope);
   myBuilder->SetCheckInverted(myCheckInverted);
   myBuilder->SetToFillHistory(myFillHistory);
   // Perform building of the result with pre-calculated intersections
index 2df37e1..d906ff2 100644 (file)
@@ -94,7 +94,7 @@ void BRepAlgoAPI_Check::Perform()
   anAnalyzer.SelfInterMode() = myTestSI;
   // Set options from BOPAlgo_Options
   anAnalyzer.SetRunParallel(myRunParallel);
-  anAnalyzer.SetProgressIndicator(myProgressIndicator);
+  anAnalyzer.SetProgressIndicator(*myProgressScope);
   anAnalyzer.SetFuzzyValue(myFuzzyValue);
   // Perform the check
   anAnalyzer.Perform();
index aa9fb08..e1bb692 100644 (file)
@@ -85,8 +85,7 @@
 #include <GeomLib.hxx>
 #include <gp_Pnt.hxx>
 #include <gp_Vec.hxx>
-#include <Message_ProgressIndicator.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 #include <NCollection_UBTreeFiller.hxx>
 #include <Precision.hxx>
 #include <Standard_ErrorHandler.hxx>
@@ -1812,10 +1811,10 @@ void BRepBuilderAPI_Sewing::Add(const TopoDS_Shape& aShape)
 #include <OSD_Timer.hxx>
 #endif
 
-void BRepBuilderAPI_Sewing::Perform(const Handle(Message_ProgressIndicator)& thePI)
+void BRepBuilderAPI_Sewing::Perform(const Message_ProgressRange& theProgress)
 {
   const Standard_Integer aNumberOfStages = myAnalysis + myCutting + mySewing + 2;
-  Message_ProgressSentry aPS (thePI, "Sewing", 0, aNumberOfStages, 1);
+  Message_ProgressScope aPS (theProgress, "Sewing", aNumberOfStages);
 #ifdef OCCT_DEBUG
   Standard_Real t_total = 0., t_analysis = 0., t_assembling = 0., t_cutting = 0., t_merging = 0.;
   OSD_Chronometer chr_total, chr_local;
@@ -1831,10 +1830,9 @@ void BRepBuilderAPI_Sewing::Perform(const Handle(Message_ProgressIndicator)& the
     chr_local.Reset();
     chr_local.Start();
 #endif
-    FaceAnalysis (thePI);
+    FaceAnalysis (aPS.Next());
     if (!aPS.More())
       return;
-    aPS.Next();
 #ifdef OCCT_DEBUG
     chr_local.Stop();
     chr_local.Show(t_analysis);
@@ -1855,10 +1853,9 @@ void BRepBuilderAPI_Sewing::Perform(const Handle(Message_ProgressIndicator)& the
       chr_local.Reset();
       chr_local.Start();
 #endif
-      VerticesAssembling (thePI);
+      VerticesAssembling (aPS.Next());
       if (!aPS.More())
         return;
-      aPS.Next();
 #ifdef OCCT_DEBUG
       chr_local.Stop();
       chr_local.Show(t_assembling);
@@ -1871,10 +1868,9 @@ void BRepBuilderAPI_Sewing::Perform(const Handle(Message_ProgressIndicator)& the
         chr_local.Reset();
         chr_local.Start();
 #endif
-        Cutting (thePI);
+        Cutting (aPS.Next());
         if (!aPS.More())
           return;
-        aPS.Next();
 #ifdef OCCT_DEBUG
         chr_local.Stop();
         chr_local.Show(t_cutting);
@@ -1886,10 +1882,9 @@ void BRepBuilderAPI_Sewing::Perform(const Handle(Message_ProgressIndicator)& the
       chr_local.Reset();
       chr_local.Start();
 #endif
-      Merging (Standard_True, thePI);
+      Merging (Standard_True, aPS.Next());
       if (!aPS.More())
         return;
-      aPS.Next();
 #ifdef OCCT_DEBUG
       chr_local.Stop();
       chr_local.Show(t_merging);
@@ -1898,10 +1893,10 @@ void BRepBuilderAPI_Sewing::Perform(const Handle(Message_ProgressIndicator)& the
     }
     else
     {
-      aPS.Next( 1, Handle(TCollection_HAsciiString)());
+      aPS.Next();
       if (myCutting)
-        aPS.Next( 1, Handle(TCollection_HAsciiString)());
-      aPS.Next( 1, Handle(TCollection_HAsciiString)());
+        aPS.Next();
+      aPS.Next();
       if (!aPS.More())
         return;
     }
@@ -1913,7 +1908,7 @@ void BRepBuilderAPI_Sewing::Perform(const Handle(Message_ProgressIndicator)& the
       std::cout << "Creating sewed shape..." << std::endl;
 #endif
       // examine the multiple edges if any and process sameparameter for edges if necessary
-      EdgeProcessing (thePI);
+      EdgeProcessing (aPS.Next());
       if (!aPS.More())
         return;
       CreateSewedShape();
@@ -1923,7 +1918,7 @@ void BRepBuilderAPI_Sewing::Perform(const Handle(Message_ProgressIndicator)& the
         return;
       }
 
-      EdgeRegularity (thePI);
+      EdgeRegularity (aPS.Next());
 
       if (mySameParameterMode && myFaceMode)
         SameParameterShape();
@@ -2235,7 +2230,7 @@ void BRepBuilderAPI_Sewing::Dump() const
 //                      myDegenerated
 //=======================================================================
 
-void BRepBuilderAPI_Sewing::FaceAnalysis(const Handle(Message_ProgressIndicator)& thePI)
+void BRepBuilderAPI_Sewing::FaceAnalysis(const Message_ProgressRange& theProgress)
 {
   if (!myShape.IsNull() && myOldShapes.IsEmpty()) {
     Add(myShape);
@@ -2246,7 +2241,7 @@ void BRepBuilderAPI_Sewing::FaceAnalysis(const Handle(Message_ProgressIndicator)
   TopTools_MapOfShape SmallEdges;
   TopTools_IndexedDataMapOfShapeListOfShape GluedVertices;
   Standard_Integer i = 1;
-  Message_ProgressSentry aPS (thePI, "Shape analysis", 0, myOldShapes.Extent(), 1);
+  Message_ProgressScope aPS (theProgress, "Shape analysis", myOldShapes.Extent());
   for (i = 1; i <= myOldShapes.Extent() && aPS.More(); i++, aPS.Next()) {
     for (TopExp_Explorer fexp(myOldShapes(i),TopAbs_FACE); fexp.More(); fexp.Next()) {
 
@@ -2777,7 +2772,7 @@ static Standard_Boolean GlueVertices(TopTools_IndexedDataMapOfShapeShape& aVerte
                                      TopTools_DataMapOfShapeListOfShape& aNodeEdges,
                                      const TopTools_IndexedDataMapOfShapeListOfShape& aBoundFaces,
                                      const Standard_Real Tolerance,
-                                     const Handle(Message_ProgressIndicator)& theProgress)
+                                     const Message_ProgressRange& theProgress)
 {
   // Create map of node -> vertices
   TopTools_IndexedDataMapOfShapeListOfShape NodeVertices;
@@ -2805,7 +2800,7 @@ static Standard_Boolean GlueVertices(TopTools_IndexedDataMapOfShapeShape& aVerte
 #endif
   // Merge nearest nodes
   TopTools_IndexedDataMapOfShapeShape NodeNearestNode;
-  Message_ProgressSentry aPS (theProgress, "Glueing nodes", 0, nbNodes, 1, Standard_True);
+  Message_ProgressScope aPS (theProgress, "Glueing nodes", nbNodes, Standard_True);
   for (Standard_Integer i = 1; i <= nbNodes && aPS.More(); i++, aPS.Next()) {
     const TopoDS_Vertex& node1 = TopoDS::Vertex(NodeVertices.FindKey(i));
     // Find near nodes
@@ -2938,11 +2933,11 @@ static Standard_Boolean GlueVertices(TopTools_IndexedDataMapOfShapeShape& aVerte
   return CreateNewNodes(NodeNearestNode,NodeVertices,aVertexNode,aNodeEdges);
 }
 
-void BRepBuilderAPI_Sewing::VerticesAssembling(const Handle(Message_ProgressIndicator)& thePI)
+void BRepBuilderAPI_Sewing::VerticesAssembling(const Message_ProgressRange& theProgress)
 {
   Standard_Integer nbVert = myVertexNode.Extent();
   Standard_Integer nbVertFree = myVertexNodeFree.Extent();
-  Message_ProgressSentry aPS (thePI, "Vertices assembling", 0, 2, 1);
+  Message_ProgressScope aPS (theProgress, "Vertices assembling", 2);
   if (nbVert || nbVertFree) {
     // Fill map node -> sections
     Standard_Integer i;
@@ -2964,16 +2959,15 @@ void BRepBuilderAPI_Sewing::VerticesAssembling(const Handle(Message_ProgressIndi
 #ifdef OCCT_DEBUG
       std::cout << "Assemble " << nbVert << " vertices on faces..." << std::endl;
 #endif
-      while (GlueVertices(myVertexNode,myNodeSections,myBoundFaces,myTolerance, thePI));
+      while (GlueVertices(myVertexNode,myNodeSections,myBoundFaces,myTolerance, aPS.Next()));
     }
     if (!aPS.More())
       return;
-    aPS.Next();
     if (nbVertFree) {
 #ifdef OCCT_DEBUG
       std::cout << "Assemble " << nbVertFree << " vertices on floating edges..." << std::endl;
 #endif
-      while (GlueVertices(myVertexNodeFree,myNodeSections,myBoundFaces,myTolerance, thePI));
+      while (GlueVertices(myVertexNodeFree,myNodeSections,myBoundFaces,myTolerance, aPS.Next()));
     }
   }
 }
@@ -3133,11 +3127,11 @@ static void ReplaceEdge(const TopoDS_Shape& oldEdge,
 //=======================================================================
 
 void BRepBuilderAPI_Sewing::Merging(const Standard_Boolean /* firstTime */, 
-                                    const Handle(Message_ProgressIndicator)& thePI)
+                                    const Message_ProgressRange& theProgress)
 {
   BRep_Builder B;
   //  TopTools_MapOfShape MergedEdges;
-  Message_ProgressSentry aPS (thePI, "Merging bounds", 0, myBoundFaces.Extent(), 1);
+  Message_ProgressScope aPS (theProgress, "Merging bounds", myBoundFaces.Extent());
   TopTools_IndexedDataMapOfShapeListOfShape::Iterator anIterB(myBoundFaces);
   for (; anIterB.More() && aPS.More(); anIterB.Next(), aPS.Next()) {
 
@@ -3623,7 +3617,7 @@ Standard_Boolean BRepBuilderAPI_Sewing::MergedNearestEdges(const TopoDS_Shape& e
 //                     myCuttingNode
 //=======================================================================
 
-void BRepBuilderAPI_Sewing::Cutting(const Handle(Message_ProgressIndicator)& thePI)
+void BRepBuilderAPI_Sewing::Cutting(const Message_ProgressRange& theProgress)
 {
   Standard_Integer i, nbVertices = myVertexNode.Extent();
   if (!nbVertices) return;
@@ -3646,7 +3640,7 @@ void BRepBuilderAPI_Sewing::Cutting(const Handle(Message_ProgressIndicator)& the
   Standard_Real first, last;
   // Iterate on all boundaries
   Standard_Integer nbBounds = myBoundFaces.Extent();
-  Message_ProgressSentry aPS (thePI, "Cutting bounds", 0, nbBounds, 1);
+  Message_ProgressScope aPS (theProgress, "Cutting bounds", nbBounds);
   TopTools_IndexedDataMapOfShapeListOfShape::Iterator anIterB(myBoundFaces);
   for (; anIterB.More() && aPS.More(); anIterB.Next(), aPS.Next()) {
     const TopoDS_Edge& bound = TopoDS::Edge(anIterB.Key());
@@ -3986,12 +3980,12 @@ static TopoDS_Edge DegeneratedSection(const TopoDS_Shape& section, const TopoDS_
 //              - make the contigous edges sameparameter
 //=======================================================================
 
-void BRepBuilderAPI_Sewing::EdgeProcessing(const Handle(Message_ProgressIndicator)& thePI)
+void BRepBuilderAPI_Sewing::EdgeProcessing(const Message_ProgressRange& theProgress)
 {
   // constructs sectionEdge
   TopTools_IndexedMapOfShape MapFreeEdges;
   TopTools_DataMapOfShapeShape EdgeFace;
-  Message_ProgressSentry aPS (thePI, "Edge processing", 0, myBoundFaces.Extent(), 1);
+  Message_ProgressScope aPS (theProgress, "Edge processing", myBoundFaces.Extent());
   TopTools_IndexedDataMapOfShapeListOfShape::Iterator anIterB(myBoundFaces);
   for (; anIterB.More() && aPS.More(); anIterB.Next(), aPS.Next()) {
     const TopoDS_Shape& bound = anIterB.Key();
@@ -4051,12 +4045,12 @@ void BRepBuilderAPI_Sewing::EdgeProcessing(const Handle(Message_ProgressIndicato
 //purpose  : update Continuity flag on newly created edges
 //=======================================================================
 
-void BRepBuilderAPI_Sewing::EdgeRegularity(const Handle(Message_ProgressIndicator)& thePI)
+void BRepBuilderAPI_Sewing::EdgeRegularity(const Message_ProgressRange& theProgress)
 {
   TopTools_IndexedDataMapOfShapeListOfShape aMapEF;
   TopExp::MapShapesAndAncestors(mySewedShape, TopAbs_EDGE, TopAbs_FACE, aMapEF);
 
-  Message_ProgressSentry aPS(thePI, "Encode edge regularity", 0, myMergedEdges.Extent(), 1);
+  Message_ProgressScope aPS(theProgress, "Encode edge regularity", myMergedEdges.Extent());
   for (TopTools_MapIteratorOfMapOfShape aMEIt(myMergedEdges); aMEIt.More() && aPS.More(); aMEIt.Next(), aPS.Next())
   {
     TopoDS_Edge anEdge = TopoDS::Edge(myReShape->Apply(aMEIt.Value()));
index ef3cf55..74e950c 100644 (file)
 #include <TColgp_Array1OfPnt.hxx>
 #include <TColStd_SequenceOfReal.hxx>
 
-#include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressRange.hxx>
 
 class BRepTools_ReShape;
 class Standard_OutOfRange;
 class Standard_NoSuchObject;
 class TopoDS_Shape;
-class Message_ProgressIndicator;
 class TopoDS_Edge;
 class TopoDS_Face;
 class Geom_Surface;
@@ -105,8 +104,8 @@ public:
   Standard_EXPORT void Add (const TopoDS_Shape& shape);
   
   //! Computing
-  //! thePI - progress indicator of algorithm
-  Standard_EXPORT void Perform (const Handle(Message_ProgressIndicator)& thePI = 0);
+  //! theProgress - progress indicator of algorithm
+  Standard_EXPORT void Perform (const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Gives the sewed shape
   //! a null shape if nothing constructed
@@ -248,10 +247,10 @@ protected:
 
   
   //! Performs cutting of sections
-  //! thePI - progress indicator of processing
-  Standard_EXPORT void Cutting (const Handle(Message_ProgressIndicator)& thePI = 0);
+  //! theProgress - progress indicator of processing
+  Standard_EXPORT void Cutting (const Message_ProgressRange& theProgress = Message_ProgressRange());
   
-  Standard_EXPORT void Merging (const Standard_Boolean passage, const Handle(Message_ProgressIndicator)& thePI = 0);
+  Standard_EXPORT void Merging (const Standard_Boolean passage, const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   Standard_EXPORT Standard_Boolean IsMergedClosed (const TopoDS_Edge& Edge1, const TopoDS_Edge& Edge2, const TopoDS_Face& fase) const;
   
@@ -262,10 +261,10 @@ protected:
   //! Merged nearest edges.
   Standard_EXPORT Standard_Boolean MergedNearestEdges (const TopoDS_Shape& edge, TopTools_SequenceOfShape& SeqMergedEdge, TColStd_SequenceOfBoolean& SeqMergedOri);
   
-  Standard_EXPORT void EdgeProcessing (const Handle(Message_ProgressIndicator)& thePI = 0);
+  Standard_EXPORT void EdgeProcessing (const Message_ProgressRange& theProgress = Message_ProgressRange());
 
   //! Recompute regularity on merged edges
-  Standard_EXPORT void EdgeRegularity (const Handle(Message_ProgressIndicator)& thePI = 0);
+  Standard_EXPORT void EdgeRegularity (const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   Standard_EXPORT void CreateOutputInformations();
   
@@ -277,8 +276,8 @@ protected:
   
 
   //! This method is called from Perform only
-  //! thePI - progress indicator of processing
-  Standard_EXPORT virtual void FaceAnalysis (const Handle(Message_ProgressIndicator)& thePI = 0);
+  //! theProgress - progress indicator of processing
+  Standard_EXPORT virtual void FaceAnalysis (const Message_ProgressRange& theProgress = Message_ProgressRange());
   
 
   //! This method is called from Perform only
@@ -286,8 +285,8 @@ protected:
   
 
   //! This method is called from Perform only
-  //! thePI - progress indicator of processing
-  Standard_EXPORT virtual void VerticesAssembling (const Handle(Message_ProgressIndicator)& thePI = 0);
+  //! theProgress - progress indicator of processing
+  Standard_EXPORT virtual void VerticesAssembling (const Message_ProgressRange& theProgress = Message_ProgressRange());
   
 
   //! This method is called from Perform only
index 735c26f..82eb855 100644 (file)
@@ -36,6 +36,7 @@
 #include <TopExp_Explorer.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Face.hxx>
+#include <TCollection_AsciiString.hxx>
 #include <Geom_Surface.hxx>
 #include <Geom2d_TrimmedCurve.hxx>
 #include <TopTools_ListOfShape.hxx>
@@ -455,7 +456,7 @@ static Standard_Integer sewing (Draw_Interpretor& theDi,
     aSewing.Add(aSeq.Value(i));
   
   Handle(Draw_ProgressIndicator) aProgress = new Draw_ProgressIndicator (theDi, 1);
-  aSewing.Perform (aProgress);
+  aSewing.Perform (aProgress->Start());
   aSewing.Dump();
 
   const TopoDS_Shape& aRes = aSewing.SewedShape();
index bc53a46..50963f8 100644 (file)
@@ -127,7 +127,8 @@ Handle(Transfer_FinderProcess) BRepToIGES_BREntity::GetTransferProcess() const
 //purpose  : 
 //=======================================================================
 Handle(IGESData_IGESEntity) BRepToIGES_BREntity::TransferShape
-(const TopoDS_Shape& start)
+(const TopoDS_Shape& start,
+ const Message_ProgressRange& theProgress)
 {
   Handle(IGESData_IGESEntity) res;
 //  TopoDS_Shape theShape;
@@ -164,31 +165,31 @@ Handle(IGESData_IGESEntity) BRepToIGES_BREntity::TransferShape
       TopoDS_Face F =  TopoDS::Face(start);
       BRepToIGES_BRShell BS(*this);
       BS.SetModel(GetModel());
-      res = BS.TransferFace(F);
+      res = BS.TransferFace(F, theProgress);
     }  
     else if (start.ShapeType() == TopAbs_SHELL) {
       TopoDS_Shell S =  TopoDS::Shell(start);
       BRepToIGES_BRShell BS(*this);
       BS.SetModel(GetModel());
-      res = BS.TransferShell(S);
+      res = BS.TransferShell(S, theProgress);
     }  
     else if (start.ShapeType() == TopAbs_SOLID) {
       TopoDS_Solid M =  TopoDS::Solid(start);
       BRepToIGES_BRSolid BS(*this);
       BS.SetModel(GetModel());
-      res = BS.TransferSolid(M);
+      res = BS.TransferSolid(M, theProgress);
     }  
     else if (start.ShapeType() == TopAbs_COMPSOLID) {
       TopoDS_CompSolid C =  TopoDS::CompSolid(start);
       BRepToIGES_BRSolid BS(*this);
       BS.SetModel(GetModel());
-      res = BS.TransferCompSolid(C);
+      res = BS.TransferCompSolid(C, theProgress);
     }  
     else if (start.ShapeType() == TopAbs_COMPOUND) {
       TopoDS_Compound C =  TopoDS::Compound(start);
       BRepToIGES_BRSolid BS(*this);
       BS.SetModel(GetModel());
-      res = BS.TransferCompound(C);
+      res = BS.TransferCompound(C, theProgress);
     }  
     else {
       // message d`erreur
index eb6e0f9..86ef7f8 100644 (file)
@@ -24,6 +24,8 @@
 #include <Standard_Real.hxx>
 #include <Standard_Boolean.hxx>
 #include <Standard_CString.hxx>
+#include <Message_ProgressRange.hxx>
+
 class IGESData_IGESModel;
 class Transfer_FinderProcess;
 class IGESData_IGESEntity;
@@ -64,7 +66,9 @@ public:
   
   //! Returns the result of the transfert of any Shape
   //! If  the transfer has  failed, this member return a NullEntity.
-  Standard_EXPORT virtual Handle(IGESData_IGESEntity) TransferShape (const TopoDS_Shape& start);
+  Standard_EXPORT virtual Handle(IGESData_IGESEntity) TransferShape
+                   (const TopoDS_Shape& start,
+                    const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Records a new Fail message
   Standard_EXPORT void AddFail (const TopoDS_Shape& start, const Standard_CString amess);
index 235f839..3095557 100644 (file)
@@ -43,7 +43,7 @@
 #include <IGESGeom_SurfaceOfRevolution.hxx>
 #include <IGESGeom_TrimmedSurface.hxx>
 #include <Interface_Macros.hxx>
-#include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressScope.hxx>
 #include <NCollection_IncAllocator.hxx>
 #include <NCollection_Map.hxx>
 #include <ShapeAlgo.hxx>
@@ -86,7 +86,8 @@ BRepToIGES_BRShell::BRepToIGES_BRShell
 // TransferShell
 //=============================================================================
 
-Handle(IGESData_IGESEntity) BRepToIGES_BRShell ::TransferShell(const TopoDS_Shape& start)
+Handle(IGESData_IGESEntity) BRepToIGES_BRShell ::TransferShell(const TopoDS_Shape& start,
+                                                               const Message_ProgressRange& theProgress)
 {
   Handle(IGESData_IGESEntity) res;
 
@@ -94,11 +95,11 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRShell ::TransferShell(const TopoDS_Shap
 
   if (start.ShapeType() == TopAbs_FACE) {
     TopoDS_Face F =  TopoDS::Face(start);
-    res = TransferFace(F);
+    res = TransferFace(F, theProgress);
   }  
   else if (start.ShapeType() == TopAbs_SHELL) {
     TopoDS_Shell S =  TopoDS::Shell(start);
-    res = TransferShell(S);
+    res = TransferShell(S, theProgress);
   }  
   else {
     // message d`erreur
@@ -112,15 +113,10 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRShell ::TransferShell(const TopoDS_Shap
 // 
 //=============================================================================
 
-Handle(IGESData_IGESEntity) BRepToIGES_BRShell ::TransferFace(const TopoDS_Face& start)
+Handle(IGESData_IGESEntity) BRepToIGES_BRShell ::TransferFace(const TopoDS_Face& start,
+                                                              const Message_ProgressRange&)
 {
   Handle(IGESData_IGESEntity) res;
-
-  Handle(Message_ProgressIndicator) progress = GetTransferProcess()->GetProgress();
-  if ( ! progress.IsNull() ) {
-    if ( progress->UserBreak() ) return res;
-    progress->Increment();
-  }
   
   if ( start.IsNull()) {
     return res;
@@ -340,7 +336,8 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRShell ::TransferFace(const TopoDS_Face&
 // TransferShell
 //=============================================================================
 
-Handle(IGESData_IGESEntity) BRepToIGES_BRShell::TransferShell(const TopoDS_Shell& start)
+Handle(IGESData_IGESEntity) BRepToIGES_BRShell::TransferShell(const TopoDS_Shell& start,
+                                                              const Message_ProgressRange& theProgress)
 {
   Handle(IGESData_IGESEntity) res;
   if ( start.IsNull()) return res;
@@ -350,13 +347,19 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRShell::TransferShell(const TopoDS_Shell
   Handle(TColStd_HSequenceOfTransient) Seq = new TColStd_HSequenceOfTransient();
   Handle(IGESData_IGESEntity) IFace;
 
-  for (Ex.Init(start,TopAbs_FACE); Ex.More(); Ex.Next()) {
+  Standard_Integer nbshapes = 0;
+  for (Ex.Init(start, TopAbs_FACE); Ex.More(); Ex.Next())
+    nbshapes++;
+  Message_ProgressScope aPS(theProgress, NULL, nbshapes);
+  for (Ex.Init(start,TopAbs_FACE); Ex.More() && aPS.More(); Ex.Next())
+  {
+    Message_ProgressRange aRange = aPS.Next();
     TopoDS_Face F = TopoDS::Face(Ex.Current());
     if (F.IsNull()) {
       AddWarning(start," a Face is a null entity");
     }
     else {
-      IFace = TransferFace(F);
+      IFace = TransferFace (F, aRange);
       if (!IFace.IsNull()) Seq->Append(IFace);
     }
   }
index 43cffca..e4ca81e 100644 (file)
@@ -22,6 +22,8 @@
 #include <Standard_Handle.hxx>
 
 #include <BRepToIGES_BREntity.hxx>
+#include <Message_ProgressRange.hxx>
+
 class BRepToIGES_BREntity;
 class IGESData_IGESEntity;
 class TopoDS_Shape;
@@ -48,15 +50,18 @@ public:
   //! Transfert an Shape entity from TopoDS to IGES
   //! This entity must be a Face or a Shell.
   //! If this Entity could not be converted, this member returns a NullEntity.
-  Standard_EXPORT Handle(IGESData_IGESEntity) TransferShell (const TopoDS_Shape& start);
+  Standard_EXPORT Handle(IGESData_IGESEntity) TransferShell (const TopoDS_Shape& start,
+                            const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Transfert an Shell entity from TopoDS to IGES
   //! If this Entity could not be converted, this member returns a NullEntity.
-  Standard_EXPORT Handle(IGESData_IGESEntity) TransferShell (const TopoDS_Shell& start);
+  Standard_EXPORT Handle(IGESData_IGESEntity) TransferShell (const TopoDS_Shell& start,
+                            const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Transfert a Face entity from TopoDS to IGES
   //! If this Entity could not be converted, this member returns a NullEntity.
-  Standard_EXPORT Handle(IGESData_IGESEntity) TransferFace (const TopoDS_Face& start);
+  Standard_EXPORT Handle(IGESData_IGESEntity) TransferFace (const TopoDS_Face& start,
+                            const Message_ProgressRange& theProgress = Message_ProgressRange());
 
 
 
index 7da4c34..6d6e3c1 100644 (file)
@@ -25,6 +25,7 @@
 #include <IGESData_HArray1OfIGESEntity.hxx>
 #include <IGESData_IGESEntity.hxx>
 #include <Interface_Macros.hxx>
+#include <Message_ProgressScope.hxx>
 #include <TColStd_HSequenceOfTransient.hxx>
 #include <TopAbs_ShapeEnum.hxx>
 #include <TopExp.hxx>
@@ -64,7 +65,8 @@ BRepToIGES_BRSolid::BRepToIGES_BRSolid
 // TransferSolid
 //=============================================================================
 
-Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferSolid(const TopoDS_Shape& start)
+Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferSolid(const TopoDS_Shape& start,
+                                                               const Message_ProgressRange& theProgress)
 {
   Handle(IGESData_IGESEntity) res;
 
@@ -72,15 +74,15 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferSolid(const TopoDS_Shap
 
   if (start.ShapeType() == TopAbs_SOLID) {
     TopoDS_Solid M =  TopoDS::Solid(start);
-    res = TransferSolid(M);
+    res = TransferSolid(M, theProgress);
   }  
   else if (start.ShapeType() == TopAbs_COMPSOLID) {
     TopoDS_CompSolid C =  TopoDS::CompSolid(start);
-    res = TransferCompSolid(C);
+    res = TransferCompSolid(C, theProgress);
   }  
   else if (start.ShapeType() == TopAbs_COMPOUND) {
     TopoDS_Compound C =  TopoDS::Compound(start);
-    res = TransferCompound(C);
+    res = TransferCompound(C, theProgress);
   }  
   else {
     // error message
@@ -94,7 +96,8 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferSolid(const TopoDS_Shap
 // 
 //=============================================================================
 
-Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferSolid(const TopoDS_Solid& start)
+Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferSolid(const TopoDS_Solid& start,
+                                                               const Message_ProgressRange& theProgress)
 {
   Handle(IGESData_IGESEntity) res;
   if ( start.IsNull()) return res;
@@ -104,13 +107,19 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferSolid(const TopoDS_Soli
   BRepToIGES_BRShell BS(*this);
   Handle(TColStd_HSequenceOfTransient) Seq = new TColStd_HSequenceOfTransient();
 
-  for (Ex.Init(start,TopAbs_SHELL); Ex.More(); Ex.Next()) {
+  Standard_Integer nbshapes = 0;
+  for (Ex.Init(start, TopAbs_SHELL); Ex.More(); Ex.Next())
+    nbshapes++;
+  Message_ProgressScope aPS(theProgress, NULL, nbshapes);
+  for (Ex.Init(start,TopAbs_SHELL); Ex.More() && aPS.More(); Ex.Next())
+  {
+    Message_ProgressRange aRange = aPS.Next();
     TopoDS_Shell S = TopoDS::Shell(Ex.Current());
     if (S.IsNull()) {
       AddWarning(start," an Shell is a null entity");
     }
     else {
-      IShell = BS.TransferShell(S);
+      IShell = BS.TransferShell (S, aRange);
       if (!IShell.IsNull()) Seq->Append(IShell);
     }
   }
@@ -145,7 +154,8 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferSolid(const TopoDS_Soli
 // TransferCompSolid
 //=============================================================================
 
-Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferCompSolid(const TopoDS_CompSolid& start)
+Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferCompSolid(const TopoDS_CompSolid& start,
+                                                                   const Message_ProgressRange& theProgress)
 {
   Handle(IGESData_IGESEntity) res;
   if ( start.IsNull()) return res;
@@ -154,13 +164,19 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferCompSolid(const TopoDS_
   Handle(IGESData_IGESEntity) ISolid;
   Handle(TColStd_HSequenceOfTransient) Seq = new TColStd_HSequenceOfTransient();
 
-  for (Ex.Init(start,TopAbs_SOLID); Ex.More(); Ex.Next()) {
+  Standard_Integer nbshapes = 0;
+  for (Ex.Init(start, TopAbs_SOLID); Ex.More(); Ex.Next())
+    nbshapes++;
+  Message_ProgressScope aPS(theProgress, NULL, nbshapes);
+  for (Ex.Init(start,TopAbs_SOLID); Ex.More() && aPS.More(); Ex.Next())
+  {
+    Message_ProgressRange aRange = aPS.Next();
     TopoDS_Solid S = TopoDS::Solid(Ex.Current());
     if (S.IsNull()) {
       AddWarning(start," an Solid is a null entity");
     }
     else {
-      ISolid = TransferSolid(S);
+      ISolid = TransferSolid (S, aRange);
       if (!ISolid.IsNull()) Seq->Append(ISolid);
     }
   }
@@ -195,7 +211,8 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferCompSolid(const TopoDS_
 // TransferCompound
 //=============================================================================
 
-Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferCompound(const TopoDS_Compound& start)
+Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferCompound(const TopoDS_Compound& start,
+                                                                  const Message_ProgressRange& theProgress)
 {
   Handle(IGESData_IGESEntity) res;
   if ( start.IsNull()) return res;
@@ -207,46 +224,69 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferCompound(const TopoDS_C
   BRepToIGES_BRWire BW(*this);
   Handle(TColStd_HSequenceOfTransient) Seq = new TColStd_HSequenceOfTransient();
 
+  // count numbers of subshapes
+  Standard_Integer nbshapes = 0;
+  for (Ex.Init(start, TopAbs_SOLID); Ex.More(); Ex.Next())
+    nbshapes++;
+  for (Ex.Init(start, TopAbs_SHELL, TopAbs_SOLID); Ex.More(); Ex.Next())
+    nbshapes++;
+  for (Ex.Init(start, TopAbs_FACE, TopAbs_SHELL); Ex.More(); Ex.Next())
+    nbshapes++;
+  for (Ex.Init(start, TopAbs_WIRE, TopAbs_FACE); Ex.More(); Ex.Next())
+    nbshapes++;
+  for (Ex.Init(start, TopAbs_EDGE, TopAbs_WIRE); Ex.More(); Ex.Next())
+    nbshapes++;
+  for (Ex.Init(start, TopAbs_VERTEX, TopAbs_EDGE); Ex.More(); Ex.Next())
+    nbshapes++;
+  Message_ProgressScope aPS(theProgress, NULL, nbshapes);
+
   // take all Solids
-  for (Ex.Init(start, TopAbs_SOLID); Ex.More(); Ex.Next()) {
+  for (Ex.Init(start, TopAbs_SOLID); Ex.More() && aPS.More(); Ex.Next())
+  {
+    Message_ProgressRange aRange = aPS.Next();
     TopoDS_Solid S = TopoDS::Solid(Ex.Current());
     if (S.IsNull()) {
       AddWarning(start," a Solid is a null entity");
     }
     else {
-      IShape = TransferSolid(S);
+      IShape = TransferSolid (S, aRange);
       if (!IShape.IsNull()) Seq->Append(IShape);
     }
   }
 
   // take all isolated Shells 
-  for (Ex.Init(start, TopAbs_SHELL, TopAbs_SOLID); Ex.More(); Ex.Next()) {
+  for (Ex.Init(start, TopAbs_SHELL, TopAbs_SOLID); Ex.More() && aPS.More(); Ex.Next())
+  {
+    Message_ProgressRange aRange = aPS.Next();
     TopoDS_Shell S = TopoDS::Shell(Ex.Current());
     if (S.IsNull()) {
       AddWarning(start," a Shell is a null entity");
     }
     else {
-      IShape = BS.TransferShell(S);
+      IShape = BS.TransferShell (S, aRange);
       if (!IShape.IsNull()) Seq->Append(IShape);
     }
   }
 
 
   // take all isolated Faces 
-  for (Ex.Init(start, TopAbs_FACE, TopAbs_SHELL); Ex.More(); Ex.Next()) {
+  for (Ex.Init(start, TopAbs_FACE, TopAbs_SHELL); Ex.More() && aPS.More(); Ex.Next())
+  {
+    Message_ProgressRange aRange = aPS.Next();
     TopoDS_Face S = TopoDS::Face(Ex.Current());
     if (S.IsNull()) {
       AddWarning(start," a Face is a null entity");
     }
     else {
-      IShape = BS.TransferFace(S);
+      IShape = BS.TransferFace (S, aRange);
       if (!IShape.IsNull()) Seq->Append(IShape);
     }
   }
 
 
   // take all isolated Wires 
-  for (Ex.Init(start, TopAbs_WIRE, TopAbs_FACE); Ex.More(); Ex.Next()) {
+  for (Ex.Init(start, TopAbs_WIRE, TopAbs_FACE); Ex.More() && aPS.More(); Ex.Next(), aPS.Next())
+  {
     TopoDS_Wire S = TopoDS::Wire(Ex.Current());
     if (S.IsNull()) {
       AddWarning(start," a Wire is a null entity");
@@ -259,7 +299,8 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferCompound(const TopoDS_C
 
 
   // take all isolated Edges 
-  for (Ex.Init(start, TopAbs_EDGE, TopAbs_WIRE); Ex.More(); Ex.Next()) {
+  for (Ex.Init(start, TopAbs_EDGE, TopAbs_WIRE); Ex.More() && aPS.More(); Ex.Next(), aPS.Next())
+  {
     TopoDS_Edge S = TopoDS::Edge(Ex.Current());
     if (S.IsNull()) {
       AddWarning(start," an Edge is a null entity");
@@ -272,7 +313,8 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferCompound(const TopoDS_C
 
 
   // take all isolated Vertices 
-  for (Ex.Init(start, TopAbs_VERTEX, TopAbs_EDGE); Ex.More(); Ex.Next()) {
+  for (Ex.Init(start, TopAbs_VERTEX, TopAbs_EDGE); Ex.More() && aPS.More(); Ex.Next(), aPS.Next())
+  {
     TopoDS_Vertex S = TopoDS::Vertex(Ex.Current());
     if (S.IsNull()) {
       AddWarning(start," a Vertex is a null entity");
@@ -284,7 +326,7 @@ Handle(IGESData_IGESEntity) BRepToIGES_BRSolid ::TransferCompound(const TopoDS_C
   }
 
   // construct the group
-  Standard_Integer nbshapes = Seq->Length();
+  nbshapes = Seq->Length();
   Handle(IGESData_HArray1OfIGESEntity) Tab;
   if (nbshapes >=1) {
     Tab =  new IGESData_HArray1OfIGESEntity(1,nbshapes);
index fc2b486..cc8c96a 100644 (file)
@@ -49,19 +49,23 @@ public:
   //! Transfert a Shape entity from TopoDS to IGES
   //! this entity must be a Solid or a CompSolid or a Compound.
   //! If this Entity could not be converted, this member returns a NullEntity.
-  Standard_EXPORT Handle(IGESData_IGESEntity) TransferSolid (const TopoDS_Shape& start);
+  Standard_EXPORT Handle(IGESData_IGESEntity) TransferSolid (const TopoDS_Shape& start,
+                              const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Transfert a Solid entity from TopoDS to IGES
   //! If this Entity could not be converted, this member returns a NullEntity.
-  Standard_EXPORT Handle(IGESData_IGESEntity) TransferSolid (const TopoDS_Solid& start);
+  Standard_EXPORT Handle(IGESData_IGESEntity) TransferSolid (const TopoDS_Solid& start,
+                              const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Transfert an CompSolid entity from TopoDS to IGES
   //! If this Entity could not be converted, this member returns a NullEntity.
-  Standard_EXPORT Handle(IGESData_IGESEntity) TransferCompSolid (const TopoDS_CompSolid& start);
+  Standard_EXPORT Handle(IGESData_IGESEntity) TransferCompSolid (const TopoDS_CompSolid& start,
+                              const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Transfert a Compound entity from TopoDS to IGES
   //! If this Entity could not be converted, this member returns a NullEntity.
-  Standard_EXPORT Handle(IGESData_IGESEntity) TransferCompound (const TopoDS_Compound& start);
+  Standard_EXPORT Handle(IGESData_IGESEntity) TransferCompound (const TopoDS_Compound& start,
+                              const Message_ProgressRange& theProgress = Message_ProgressRange());
 
 
 
index 48c365c..f0c2054 100644 (file)
@@ -79,7 +79,7 @@
 #include <IGESSolid_VertexList.hxx>
 #include <Interface_Macros.hxx>
 #include <Interface_Static.hxx>
-#include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressScope.hxx>
 #include <ShapeAlgo.hxx>
 #include <ShapeAlgo_AlgoContainer.hxx>
 #include <TColgp_HArray1OfXYZ.hxx>
@@ -282,7 +282,8 @@ Standard_Integer BRepToIGESBRep_Entity::AddEdge(const TopoDS_Edge& myedge,
 //purpose  : 
 //=======================================================================
 Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferShape
-(const TopoDS_Shape& start)
+(const TopoDS_Shape& start,
+ const Message_ProgressRange& theProgress)
 {
   Handle(IGESData_IGESEntity) res;
   //TopoDS_Shape theShape;
@@ -321,19 +322,19 @@ Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferShape
     }  
     else if (start.ShapeType() == TopAbs_SHELL) {
       TopoDS_Shell S =  TopoDS::Shell(start);
-      res = TransferShell(S);
+      res = TransferShell(S, theProgress);
     }  
     else if (start.ShapeType() == TopAbs_SOLID) {
       TopoDS_Solid M =  TopoDS::Solid(start);
-      res = TransferSolid(M);
+      res = TransferSolid(M, theProgress);
     }  
     else if (start.ShapeType() == TopAbs_COMPSOLID) {
       TopoDS_CompSolid C =  TopoDS::CompSolid(start);
-      res = TransferCompSolid(C);
+      res = TransferCompSolid(C, theProgress);
     }  
     else if (start.ShapeType() == TopAbs_COMPOUND) {
       TopoDS_Compound C =  TopoDS::Compound(start);
-      res = TransferCompound(C);
+      res = TransferCompound(C, theProgress);
     }  
     else {
       // error message
@@ -512,12 +513,6 @@ Handle(IGESSolid_Loop) BRepToIGESBRep_Entity::TransferWire (const TopoDS_Wire& m
 
 Handle(IGESSolid_Face) BRepToIGESBRep_Entity ::TransferFace(const TopoDS_Face& start)
 {
-  Handle(Message_ProgressIndicator) progress = GetTransferProcess()->GetProgress();
-  if ( ! progress.IsNull() ) {
-    if ( progress->UserBreak() ) return 0;
-    progress->Increment();
-  }
-  
   Handle(IGESSolid_Face) myent = new IGESSolid_Face;
   if ( start.IsNull()) return myent;
   Handle(IGESData_IGESEntity) ISurf;
@@ -623,7 +618,8 @@ Handle(IGESSolid_Face) BRepToIGESBRep_Entity ::TransferFace(const TopoDS_Face& s
 // TransferShell
 //=============================================================================
 
-Handle(IGESSolid_Shell) BRepToIGESBRep_Entity ::TransferShell(const TopoDS_Shell& start)
+Handle(IGESSolid_Shell) BRepToIGESBRep_Entity ::TransferShell(const TopoDS_Shell& start,
+                                                              const Message_ProgressRange& theProgress)
 {
   Handle(IGESSolid_Shell) myshell = new IGESSolid_Shell;
   if ( start.IsNull()) return myshell;
@@ -633,7 +629,11 @@ Handle(IGESSolid_Shell) BRepToIGESBRep_Entity ::TransferShell(const TopoDS_Shell
   TColStd_SequenceOfInteger SeqFlag;
   Handle(IGESSolid_Face) IFace;
 
-  for (Ex.Init(start,TopAbs_FACE); Ex.More(); Ex.Next()) {
+  Standard_Integer nbf = 0;
+  for (Ex.Init(start, TopAbs_FACE); Ex.More(); Ex.Next())
+    nbf++;
+  Message_ProgressScope aPS(theProgress, NULL, nbf);
+  for (Ex.Init(start,TopAbs_FACE); Ex.More() && aPS.More(); Ex.Next(), aPS.Next()) {
     TopoDS_Face F = TopoDS::Face(Ex.Current());
     if ( start.Orientation() == TopAbs_REVERSED ) F.Reverse(); //:l4 abv 12 Jan 99: CTS22022-2: writing reversed shells
     if (F.IsNull()) {
@@ -673,7 +673,8 @@ Handle(IGESSolid_Shell) BRepToIGESBRep_Entity ::TransferShell(const TopoDS_Shell
 // with a Solid
 //=============================================================================
 
-Handle(IGESSolid_ManifoldSolid) BRepToIGESBRep_Entity ::TransferSolid (const TopoDS_Solid& start)
+Handle(IGESSolid_ManifoldSolid) BRepToIGESBRep_Entity ::TransferSolid (const TopoDS_Solid& start,
+                                                                       const Message_ProgressRange& theProgress)
 {
   Handle(IGESSolid_ManifoldSolid) mysol = new IGESSolid_ManifoldSolid;
   if ( start.IsNull()) return mysol;
@@ -684,13 +685,19 @@ Handle(IGESSolid_ManifoldSolid) BRepToIGESBRep_Entity ::TransferSolid (const Top
   Handle(TColStd_HSequenceOfTransient) Seq = new TColStd_HSequenceOfTransient();
   TColStd_SequenceOfInteger SeqFlag;
 
-  for (Ex.Init(start,TopAbs_SHELL); Ex.More(); Ex.Next()) {
+  Standard_Integer nbs = 0;
+  for (Ex.Init(start, TopAbs_SHELL); Ex.More(); Ex.Next())
+    nbs++;
+  Message_ProgressScope aPS(theProgress, NULL, nbs);
+  for (Ex.Init(start,TopAbs_SHELL); Ex.More() && aPS.More(); Ex.Next())
+  {
+    Message_ProgressRange aRange = aPS.Next();
     TopoDS_Shell S = TopoDS::Shell(Ex.Current());
     if (S.IsNull()) {
       AddWarning(start," a Shell is a null entity");
     }
     else {
-      IShell = TransferShell(S);
+      IShell = TransferShell (S, aRange);
       if (!IShell.IsNull()) { 
        Seq->Append(IShell);
        if (S.Orientation() == TopAbs_FORWARD ) SeqFlag.Append(1);
@@ -743,7 +750,8 @@ Handle(IGESSolid_ManifoldSolid) BRepToIGESBRep_Entity ::TransferSolid (const Top
 // with a CompSolid
 //=============================================================================
 
-Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferCompSolid (const TopoDS_CompSolid& start)
+Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferCompSolid (const TopoDS_CompSolid& start,
+                                                                      const Message_ProgressRange& theProgress)
 {
   Handle(IGESData_IGESEntity) myent;
   if ( start.IsNull()) return myent;
@@ -752,13 +760,19 @@ Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferCompSolid (const Topo
   Handle(IGESSolid_ManifoldSolid) ISolid = new IGESSolid_ManifoldSolid;
   Handle(TColStd_HSequenceOfTransient) Seq = new TColStd_HSequenceOfTransient();
 
-  for (Ex.Init(start,TopAbs_SOLID); Ex.More(); Ex.Next()) {
+  Standard_Integer nbs = 0;
+  for (Ex.Init(start, TopAbs_SOLID); Ex.More(); Ex.Next())
+    nbs++;
+  Message_ProgressScope aPS(theProgress, NULL, nbs);
+  for (Ex.Init(start,TopAbs_SOLID); Ex.More() && aPS.More(); Ex.Next())
+  {
+    Message_ProgressRange aRange = aPS.Next();
     TopoDS_Solid S = TopoDS::Solid(Ex.Current());
     if (S.IsNull()) {
       AddWarning(start," an Solid is a null entity");
     }
     else {
-      ISolid = TransferSolid(S);
+      ISolid = TransferSolid (S, aRange);
       if (!ISolid.IsNull()) Seq->Append(ISolid);
     }
   }
@@ -794,7 +808,8 @@ Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferCompSolid (const Topo
 // with a Compound
 //=============================================================================
 
-Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferCompound (const TopoDS_Compound& start)
+Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferCompound (const TopoDS_Compound& start,
+                                                                     const Message_ProgressRange& theProgress)
 {
   Handle(IGESData_IGESEntity) res;
   if ( start.IsNull()) return res;
@@ -804,33 +819,54 @@ Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferCompound (const TopoD
   Handle(IGESData_IGESEntity) IShape;
   Handle(TColStd_HSequenceOfTransient) Seq = new TColStd_HSequenceOfTransient();
 
+  // count numbers of subshapes
+  Standard_Integer nbshapes = 0;
+  for (Ex.Init(start, TopAbs_SOLID); Ex.More(); Ex.Next())
+    nbshapes++;
+  for (Ex.Init(start, TopAbs_SHELL, TopAbs_SOLID); Ex.More(); Ex.Next())
+    nbshapes++;
+  for (Ex.Init(start, TopAbs_FACE, TopAbs_SHELL); Ex.More(); Ex.Next())
+    nbshapes++;
+  for (Ex.Init(start, TopAbs_WIRE, TopAbs_FACE); Ex.More(); Ex.Next())
+    nbshapes++;
+  for (Ex.Init(start, TopAbs_EDGE, TopAbs_WIRE); Ex.More(); Ex.Next())
+    nbshapes++;
+  for (Ex.Init(start, TopAbs_VERTEX, TopAbs_EDGE); Ex.More(); Ex.Next())
+    nbshapes++;
+  Message_ProgressScope aPS(theProgress, NULL, nbshapes);
+
   // take all Solids
-  for (Ex.Init(start, TopAbs_SOLID); Ex.More(); Ex.Next()) {
+  for (Ex.Init(start, TopAbs_SOLID); Ex.More() && aPS.More(); Ex.Next())
+  {
+    Message_ProgressRange aRange = aPS.Next();
     TopoDS_Solid S = TopoDS::Solid(Ex.Current());
     if (S.IsNull()) {
       AddWarning(start," a Solid is a null entity");
     }
     else {
-      IShape = TransferSolid(S);
+      IShape = TransferSolid (S, aRange);
       if (!IShape.IsNull()) Seq->Append(IShape);
     }
   }
 
   // take all isolated Shells 
-  for (Ex.Init(start, TopAbs_SHELL, TopAbs_SOLID); Ex.More(); Ex.Next()) {
+  for (Ex.Init(start, TopAbs_SHELL, TopAbs_SOLID); Ex.More() && aPS.More(); Ex.Next())
+  {
+    Message_ProgressRange aRange = aPS.Next();
     TopoDS_Shell S = TopoDS::Shell(Ex.Current());
     if (S.IsNull()) {
       AddWarning(start," a Shell is a null entity");
     }
     else {
-      IShape = TransferShell(S);
+      IShape = TransferShell (S, aRange);
       if (!IShape.IsNull()) Seq->Append(IShape);
     }
   }
 
 
   // take all isolated Faces
-  for (Ex.Init(start, TopAbs_FACE, TopAbs_SHELL); Ex.More(); Ex.Next()) {
+  for (Ex.Init(start, TopAbs_FACE, TopAbs_SHELL); Ex.More() && aPS.More(); Ex.Next(), aPS.Next())
+  {
     TopoDS_Face S = TopoDS::Face(Ex.Current());
     if (S.IsNull()) {
       AddWarning(start," a Face is a null entity");
@@ -843,7 +879,8 @@ Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferCompound (const TopoD
 
 
   // take all isolated Wires 
-  for (Ex.Init(start, TopAbs_WIRE, TopAbs_FACE); Ex.More(); Ex.Next()) {
+  for (Ex.Init(start, TopAbs_WIRE, TopAbs_FACE); Ex.More() && aPS.More(); Ex.Next(), aPS.Next())
+  {
     TopoDS_Wire S = TopoDS::Wire(Ex.Current());
 
     BRepToIGES_BRWire BW(*this);
@@ -854,7 +891,8 @@ Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferCompound (const TopoD
 
 
   // take all isolated Edges 
-  for (Ex.Init(start, TopAbs_EDGE, TopAbs_WIRE); Ex.More(); Ex.Next()) {
+  for (Ex.Init(start, TopAbs_EDGE, TopAbs_WIRE); Ex.More() && aPS.More(); Ex.Next(), aPS.Next())
+  {
     TopoDS_Edge S = TopoDS::Edge(Ex.Current());
 
     BRepToIGES_BRWire BW(*this);
@@ -865,7 +903,8 @@ Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferCompound (const TopoD
 
 
   // take all isolated Vertices 
-  for (Ex.Init(start, TopAbs_VERTEX, TopAbs_EDGE); Ex.More(); Ex.Next()) {
+  for (Ex.Init(start, TopAbs_VERTEX, TopAbs_EDGE); Ex.More() && aPS.More(); Ex.Next(), aPS.Next())
+  {
     TopoDS_Vertex S = TopoDS::Vertex(Ex.Current());
 
     BRepToIGES_BRWire BW(*this);
@@ -875,7 +914,7 @@ Handle(IGESData_IGESEntity) BRepToIGESBRep_Entity::TransferCompound (const TopoD
   }
 
   // construct the group
-  Standard_Integer nbshapes = Seq->Length();
+  nbshapes = Seq->Length();
   if (nbshapes > 0) {
     Handle(IGESData_HArray1OfIGESEntity) Tab =
       new IGESData_HArray1OfIGESEntity(1,nbshapes);
index 0fbaee2..248eeba 100644 (file)
@@ -26,6 +26,8 @@
 #include <BRepToIGES_BREntity.hxx>
 #include <Standard_Integer.hxx>
 #include <Standard_Real.hxx>
+#include <Message_ProgressRange.hxx>
+
 class IGESSolid_EdgeList;
 class IGESSolid_VertexList;
 class TopoDS_Vertex;
@@ -43,7 +45,6 @@ class TopoDS_Solid;
 class TopoDS_CompSolid;
 class TopoDS_Compound;
 
-
 //! provides methods to transfer BRep entity from CASCADE to IGESBRep.
 class BRepToIGESBRep_Entity  : public BRepToIGES_BREntity
 {
@@ -80,7 +81,9 @@ public:
   
   //! Returns the result of the transfert of any Shape
   //! If  the transfer has  failed, this member return a NullEntity.
-  Standard_EXPORT virtual Handle(IGESData_IGESEntity) TransferShape (const TopoDS_Shape& start) Standard_OVERRIDE;
+  Standard_EXPORT virtual Handle(IGESData_IGESEntity) TransferShape
+                   (const TopoDS_Shape& start,
+                    const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
   
   //! Transfert an Edge entity from TopoDS to IGES
   //! If this Entity could not be converted, this member returns a NullEntity.
@@ -101,19 +104,23 @@ public:
   
   //! Transfert an Shell entity from TopoDS to IGES
   //! If this Entity could not be converted, this member returns a NullEntity.
-  Standard_EXPORT Handle(IGESSolid_Shell) TransferShell (const TopoDS_Shell& start);
+  Standard_EXPORT Handle(IGESSolid_Shell) TransferShell (const TopoDS_Shell& start,
+                          const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Transfert a Solid entity from TopoDS to IGES
   //! If this Entity could not be converted, this member returns a NullEntity.
-  Standard_EXPORT Handle(IGESSolid_ManifoldSolid) TransferSolid (const TopoDS_Solid& start);
+  Standard_EXPORT Handle(IGESSolid_ManifoldSolid) TransferSolid (const TopoDS_Solid& start,
+                          const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Transfert an CompSolid entity from TopoDS to IGES
   //! If this Entity could not be converted, this member returns a NullEntity.
-  Standard_EXPORT Handle(IGESData_IGESEntity) TransferCompSolid (const TopoDS_CompSolid& start);
+  Standard_EXPORT Handle(IGESData_IGESEntity) TransferCompSolid (const TopoDS_CompSolid& start,
+                          const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Transfert a Compound entity from TopoDS to IGES
   //! If this Entity could not be converted, this member returns a NullEntity.
-  Standard_EXPORT Handle(IGESData_IGESEntity) TransferCompound (const TopoDS_Compound& start);
+  Standard_EXPORT Handle(IGESData_IGESEntity) TransferCompound (const TopoDS_Compound& start,
+                          const Message_ProgressRange& theProgress = Message_ProgressRange());
 
 
 
index 530602a..7860c5d 100644 (file)
@@ -667,7 +667,7 @@ void  BRepTools::Dump(const TopoDS_Shape& Sh, Standard_OStream& S)
 //=======================================================================
 
 void  BRepTools::Write(const TopoDS_Shape& Sh, Standard_OStream& S,
-                       const Handle(Message_ProgressIndicator)& theProgress)
+                       const Message_ProgressRange& theProgress)
 {
   BRepTools_ShapeSet SS;
   SS.Add(Sh);
@@ -684,7 +684,7 @@ void  BRepTools::Write(const TopoDS_Shape& Sh, Standard_OStream& S,
 void  BRepTools::Read(TopoDS_Shape& Sh, 
                       std::istream& S, 
                       const BRep_Builder& B,
-                      const Handle(Message_ProgressIndicator)& theProgress)
+                      const Message_ProgressRange& theProgress)
 {
   BRepTools_ShapeSet SS(B);
   SS.Read(S, theProgress);
@@ -698,7 +698,7 @@ void  BRepTools::Read(TopoDS_Shape& Sh,
 
 Standard_Boolean  BRepTools::Write(const TopoDS_Shape& Sh, 
                                    const Standard_CString File,
-                                   const Handle(Message_ProgressIndicator)& theProgress)
+                                   const Message_ProgressRange& theProgress)
 {
   std::ofstream os;
   OSD_OpenStream(os, File, std::ios::out);
@@ -735,7 +735,7 @@ Standard_Boolean  BRepTools::Write(const TopoDS_Shape& Sh,
 Standard_Boolean BRepTools::Read(TopoDS_Shape& Sh, 
                                  const Standard_CString File,
                                  const BRep_Builder& B,
-                                 const Handle(Message_ProgressIndicator)& theProgress)
+                                 const Message_ProgressRange& theProgress)
 {
   std::filebuf fic;
   std::istream in(&fic);
index 6d62b95..6fd63e6 100644 (file)
@@ -27,8 +27,7 @@
 #include <Standard_OStream.hxx>
 #include <Standard_IStream.hxx>
 #include <Standard_CString.hxx>
-
-#include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressRange.hxx>
 
 class TopoDS_Face;
 class TopoDS_Wire;
@@ -207,23 +206,22 @@ public:
   
   //! Writes <Sh> on <S> in an ASCII format.
   Standard_EXPORT static void Write (const TopoDS_Shape& Sh, Standard_OStream& S,
-                                     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+                                     const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Reads a Shape  from <S> in  returns it in  <Sh>.
   //! <B> is used to build the shape.
   Standard_EXPORT static void Read (TopoDS_Shape& Sh, Standard_IStream& S, const BRep_Builder& B,
-                                    const Handle(Message_ProgressIndicator)& theProgress = NULL);
+                                    const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Writes <Sh> in <File>.
-  Standard_EXPORT static Standard_Boolean Write
-    (const TopoDS_Shape& Sh, const Standard_CString File,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+  Standard_EXPORT static Standard_Boolean Write (const TopoDS_Shape& Sh, const Standard_CString File,
+                                                 const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Reads a Shape  from <File>,  returns it in  <Sh>.
   //! <B> is used to build the shape.
-  Standard_EXPORT static Standard_Boolean Read
-    (TopoDS_Shape& Sh, const Standard_CString File, const BRep_Builder& B,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+  Standard_EXPORT static Standard_Boolean Read (TopoDS_Shape& Sh, const Standard_CString File,
+                                                const BRep_Builder& B,
+                                                const Message_ProgressRange& theProgress = Message_ProgressRange());
 
   //! Evals real tolerance of edge  <theE>.
   //! <theC3d>, <theC2d>, <theS>, <theF>, <theL> are
@@ -253,8 +251,18 @@ public:
   Standard_EXPORT static void RemoveInternals (TopoDS_Shape& theS,
                                                const Standard_Boolean theForce = Standard_False);
 
+
+protected:
+
+
+
+
+
 private:
 
+
+
+
 friend class BRepTools_WireExplorer;
 friend class BRepTools_Modification;
 friend class BRepTools_Modifier;
index edfe56d..fac94b4 100644 (file)
@@ -18,7 +18,6 @@
 
 #include <BRepTools_Modification.hxx>
 #include <BRepTools_Modifier.hxx>
-#include <Message_ProgressIndicator.hxx>
 #include <Standard_NoSuchObject.hxx>
 #include <Standard_NullObject.hxx>
 #include <TColStd_ListIteratorOfListOfTransient.hxx>
@@ -54,7 +53,7 @@
 #include <Standard_NullObject.hxx>
 #include <gp_Trsf.hxx>
 #include <BRepTools_TrsfModification.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 #include <Geom_Surface.hxx>
 
 static void SetShapeFlags(const TopoDS_Shape& theInSh, TopoDS_Shape& theOutSh);
@@ -116,7 +115,8 @@ void BRepTools_Modifier::Init(const TopoDS_Shape& S)
 static TopTools_IndexedMapOfShape MapE, MapF;
 #endif
 
-void BRepTools_Modifier::Perform(const Handle(BRepTools_Modification)& M, const Handle(Message_ProgressIndicator) & aProgress)
+void BRepTools_Modifier::Perform(const Handle(BRepTools_Modification)& M,
+                                 const Message_ProgressRange& theProgress)
 {
   if (myShape.IsNull()) {
     throw Standard_NullObject();
@@ -128,7 +128,7 @@ void BRepTools_Modifier::Perform(const Handle(BRepTools_Modification)& M, const
 #endif
   TopTools_DataMapIteratorOfDataMapOfShapeShape theIter(myMap);
 
-  Message_ProgressSentry aPSentry(aProgress, "Converting Shape", 0, 2, 1);
+  Message_ProgressScope aPS(theProgress, "Converting Shape", 2);
 
   TopTools_IndexedDataMapOfShapeListOfShape aMVE, aMEF;
   TopExp::MapShapesAndAncestors(myShape, TopAbs_VERTEX, TopAbs_EDGE, aMVE);
@@ -144,16 +144,14 @@ void BRepTools_Modifier::Perform(const Handle(BRepTools_Modification)& M, const
     CreateOtherVertices(aMVE, aMEF, M);
 
   Standard_Boolean aNewGeom;
-  Rebuild(myShape, M, aNewGeom, aProgress);
+  Rebuild(myShape, M, aNewGeom, aPS.Next());
 
-  if (!aPSentry.More())
+  if (!aPS.More())
   {
     // The processing was broken
     return;
   }
 
-  aPSentry.Next();
-
   if (myShape.ShapeType() == TopAbs_FACE) {
     if (myShape.Orientation() == TopAbs_REVERSED) {
       myMap(myShape).Reverse();
@@ -242,7 +240,7 @@ Standard_Boolean BRepTools_Modifier::Rebuild
   (const TopoDS_Shape& S,
    const Handle(BRepTools_Modification)& M,
    Standard_Boolean& theNewGeom,
-   const Handle(Message_ProgressIndicator)& aProgress)
+   const Message_ProgressRange& theProgress)
 {
 #ifdef DEBUG_Modifier
   int iF = MapF.Contains(S) ? MapF.FindIndex(S) : 0;
@@ -357,16 +355,16 @@ Standard_Boolean BRepTools_Modifier::Rebuild
       for (it.Initialize(S, Standard_False); it.More(); it.Next()) ++aShapeCount;
     }
     
-    Message_ProgressSentry aPSentry(aProgress, "Converting SubShapes", 0, aShapeCount, 1);
+    Message_ProgressScope aPS(theProgress, "Converting SubShapes", aShapeCount);
     //
-    for (it.Initialize(S, Standard_False); it.More() && aPSentry.More(); it.Next(), aPSentry.Next()) {
+    for (it.Initialize(S, Standard_False); it.More() && aPS.More(); it.Next()) {
       // always call Rebuild
       Standard_Boolean isSubNewGeom = Standard_False;
-      Standard_Boolean subrebuilt = Rebuild(it.Value(), M, isSubNewGeom, aProgress);
+      Standard_Boolean subrebuilt = Rebuild(it.Value(), M, isSubNewGeom, aPS.Next());
       rebuild =  subrebuilt || rebuild ;
       theNewGeom = theNewGeom || isSubNewGeom;
     }
-    if (!aPSentry.More())
+    if (!aPS.More())
     {
       // The processing was broken
       return Standard_False;
index eadab91..194aa47 100644 (file)
 #include <TopoDS_Vertex.hxx>
 #include <Standard_Boolean.hxx>
 
-#include <Message_ProgressIndicator.hxx>
 #include <NCollection_DataMap.hxx>
 #include <TopoDS_Shape.hxx>
 #include <TopTools_ShapeMapHasher.hxx>
 #include <TopLoc_Location.hxx>
+#include <Message_ProgressRange.hxx>
 
 class Standard_NullObject;
 class Standard_NoSuchObject;
 class TopoDS_Shape;
 class BRepTools_Modification;
-class Message_ProgressIndicator;
 class Geom_Curve;
 class Geom_Surface;
 
@@ -64,7 +63,8 @@ public:
   Standard_EXPORT void Init (const TopoDS_Shape& S);
   
   //! Performs the modifications described by <M>.
-  Standard_EXPORT void Perform (const Handle(BRepTools_Modification)& M, const Handle(Message_ProgressIndicator)& aProgress = NULL);
+  Standard_EXPORT void Perform (const Handle(BRepTools_Modification)& M,
+                                const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Returns Standard_True if the modification has
   //! been computed successfully.
@@ -109,7 +109,7 @@ private:
   Standard_EXPORT Standard_Boolean Rebuild (const TopoDS_Shape& S,
                                             const Handle(BRepTools_Modification)& M,
                                             Standard_Boolean& theNewGeom,
-                                            const Handle(Message_ProgressIndicator)& aProgress = NULL);
+                                            const Message_ProgressRange& theProgress = Message_ProgressRange());
 
   Standard_EXPORT void CreateNewVertices(
     const TopTools_IndexedDataMapOfShapeListOfShape& theMVE, 
index 80e3cdd..5c7b403 100644 (file)
@@ -39,8 +39,7 @@
 #include <BRepTools.hxx>
 #include <BRepTools_ShapeSet.hxx>
 #include <GeomTools.hxx>
-#include <Message_ProgressIndicator.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 #include <Poly.hxx>
 #include <Poly_Polygon2D.hxx>
 #include <Poly_Polygon3D.hxx>
@@ -246,32 +245,27 @@ void  BRepTools_ShapeSet::DumpGeometry (Standard_OStream& OS)const
 //purpose  : 
 //=======================================================================
 
-void  BRepTools_ShapeSet::WriteGeometry (Standard_OStream& OS,
-                                         const Handle(Message_ProgressIndicator)& theProgress)
+void  BRepTools_ShapeSet::WriteGeometry(Standard_OStream& OS, const Message_ProgressRange& theProgress)
 {
-  //OCC19559
-  Message_ProgressSentry aPS(theProgress, "Writing geometry", 0, 6, 1);
-  myCurves2d.Write (OS, theProgress);
-  if (!aPS.More())
-    return;
-  aPS.Next();
-  myCurves.Write (OS, theProgress);
-  if (!aPS.More())
-    return;
-  aPS.Next();
-  WritePolygon3D (OS, true, theProgress);
-  if (!aPS.More())
-    return;
-  aPS.Next();
-  WritePolygonOnTriangulation (OS, true, theProgress);
-  if (!aPS.More())
-    return;
-  aPS.Next();
-  mySurfaces.Write (OS, theProgress);
-  if (!aPS.More())
-    return;
-  aPS.Next();
-  WriteTriangulation (OS, true, theProgress);
+  // Make nested progress scope for processing geometry
+  Message_ProgressScope aPS(theProgress, "Geometry", 100);
+
+  myCurves2d.Write(OS, aPS.Next(20));
+  if (aPS.UserBreak()) return;
+
+  myCurves.Write(OS, aPS.Next(20));
+  if (aPS.UserBreak()) return;
+
+  WritePolygon3D(OS, Standard_True, aPS.Next(10));
+  if (aPS.UserBreak()) return;
+  
+  WritePolygonOnTriangulation(OS, Standard_True, aPS.Next(10));
+  if (aPS.UserBreak()) return;
+  
+  mySurfaces.Write(OS, aPS.Next(20));
+  if (aPS.UserBreak()) return;
+  
+  WriteTriangulation(OS, Standard_True, aPS.Next(20));
 }
 
 
@@ -280,35 +274,27 @@ void  BRepTools_ShapeSet::WriteGeometry (Standard_OStream& OS,
 //purpose  : 
 //=======================================================================
 
-void  BRepTools_ShapeSet::ReadGeometry (Standard_IStream& IS,
-                                        const Handle(Message_ProgressIndicator) &theProgress)
+void  BRepTools_ShapeSet::ReadGeometry(Standard_IStream& IS, const Message_ProgressRange& theProgress)
 {
-  //OCC19559
-  Message_ProgressSentry aPS(theProgress, "Reading geometry", 0, 6, 1);
-  myCurves2d.Read(IS, theProgress);
-  if (!aPS.More())
-    return;
-  aPS.Next();
-  myCurves.Read(IS, theProgress);
-  if (!aPS.More())
-    return;
-  aPS.Next();
-  ReadPolygon3D(IS, theProgress);
-  if (!aPS.More())
-    return;
-  aPS.Next();
-  ReadPolygonOnTriangulation(IS, theProgress);
-  if (!aPS.More())
-    return;
-  aPS.Next();
-  mySurfaces.Read(IS, theProgress);
-  if (!aPS.More())
-    return;
-  aPS.Next();
-  ReadTriangulation(IS, theProgress);
-  if (!aPS.More())
-    return;
-  aPS.Next();
+  // Make nested progress scope for processing geometry
+  Message_ProgressScope aPS(theProgress, "Geometry", 100);
+
+  myCurves2d.Read(IS, aPS.Next(20));
+  if (aPS.UserBreak()) return;
+
+  myCurves.Read(IS, aPS.Next(20));
+  if (aPS.UserBreak()) return;
+
+  ReadPolygon3D(IS, aPS.Next(15));
+  if (aPS.UserBreak()) return;
+  
+  ReadPolygonOnTriangulation(IS, aPS.Next(15));
+  if (aPS.UserBreak()) return;
+
+  mySurfaces.Read(IS, aPS.Next(15));
+  if (aPS.UserBreak()) return;
+
+  ReadTriangulation(IS, aPS.Next(15));
 }
 
 //=======================================================================
@@ -1168,13 +1154,13 @@ void BRepTools_ShapeSet::Check(const TopAbs_ShapeEnum T,
 //purpose  : 
 //=======================================================================
 
-void BRepTools_ShapeSet::WritePolygonOnTriangulation (Standard_OStream&                        OS,
-                                                      const Standard_Boolean                   Compact,
-                                                      const Handle(Message_ProgressIndicator)& theProgress)const
+void BRepTools_ShapeSet::WritePolygonOnTriangulation(Standard_OStream&      OS,
+                                                     const Standard_Boolean Compact,
+                                                     const Message_ProgressRange& theProgress)const
 {
   Standard_Integer i, j, nbpOntri = myNodes.Extent();
 
-  Message_ProgressSentry PS(theProgress, "Polygons On Triangulation", 0, nbpOntri, 1);
+  Message_ProgressScope aPS(theProgress, "Polygons On Triangulation", nbpOntri);
   if (Compact)
     OS << "PolygonOnTriangulations " << nbpOntri << "\n";
   else {
@@ -1185,7 +1171,7 @@ void BRepTools_ShapeSet::WritePolygonOnTriangulation (Standard_OStream&
 
   Handle(Poly_PolygonOnTriangulation) Poly;
   Handle(TColStd_HArray1OfReal) Param;
-  for (i=1; i<=nbpOntri && PS.More(); i++, PS.Next()) {
+  for (i=1; i<=nbpOntri && aPS.More(); i++, aPS.Next()) {
     Poly = Handle(Poly_PolygonOnTriangulation)::DownCast(myNodes(i));
     const TColStd_Array1OfInteger& Nodes = Poly->Nodes();
     if (!Compact) {
@@ -1233,8 +1219,8 @@ void BRepTools_ShapeSet::DumpPolygonOnTriangulation(Standard_OStream& OS)const
 //purpose  : 
 //=======================================================================
 
-void BRepTools_ShapeSet::ReadPolygonOnTriangulation (Standard_IStream& IS,
-                                                     const Handle(Message_ProgressIndicator) &theProgress)
+void BRepTools_ShapeSet::ReadPolygonOnTriangulation(Standard_IStream& IS,
+                                                    const Message_ProgressRange& theProgress)
 {
   char buffer[255];
   IS >> buffer;
@@ -1246,8 +1232,8 @@ void BRepTools_ShapeSet::ReadPolygonOnTriangulation (Standard_IStream& IS,
   Handle(Poly_PolygonOnTriangulation) Poly;
   IS >> nbpol;
   //OCC19559
-  Message_ProgressSentry PS(theProgress, "Polygons On Triangulation", 0, nbpol, 1);
-  for (i=1; i<=nbpol&& PS.More(); i++, PS.Next()) {
+  Message_ProgressScope aPS(theProgress, "Polygons On Triangulation", nbpol);
+  for (i=1; i<=nbpol&& aPS.More(); i++, aPS.Next()) {
     IS >> nbnodes;
     TColStd_Array1OfInteger Nodes(1, nbnodes);
     for (j = 1; j <= nbnodes; j++) {
@@ -1287,13 +1273,13 @@ void BRepTools_ShapeSet::ReadPolygonOnTriangulation (Standard_IStream& IS,
 //purpose  : 
 //=======================================================================
 
-void BRepTools_ShapeSet::WritePolygon3D (Standard_OStream&      OS,
-                                         const Standard_Boolean Compact,
-                                         const Handle(Message_ProgressIndicator) &theProgress)const
+void BRepTools_ShapeSet::WritePolygon3D(Standard_OStream&      OS,
+                                        const Standard_Boolean Compact,
+                                        const Message_ProgressRange& theProgress)const
 {
   Standard_Integer i, j, nbpol = myPolygons3D.Extent();
   
-  Message_ProgressSentry PS(theProgress, "3D Polygons", 0, nbpol, 1);
+  Message_ProgressScope aPS(theProgress, "3D Polygons", nbpol);
 
   if (Compact)
     OS << "Polygon3D " << nbpol << "\n";
@@ -1304,7 +1290,7 @@ void BRepTools_ShapeSet::WritePolygon3D (Standard_OStream&      OS,
   }
   
   Handle(Poly_Polygon3D) P;
-  for (i = 1; i <= nbpol && PS.More(); i++, PS.Next()) {
+  for (i = 1; i <= nbpol && aPS.More(); i++, aPS.Next()) {
     P = Handle(Poly_Polygon3D)::DownCast(myPolygons3D(i));
     if (Compact) {
       OS << P->NbNodes() << " ";
@@ -1365,8 +1351,7 @@ void BRepTools_ShapeSet::DumpPolygon3D(Standard_OStream& OS)const
 //purpose  : 
 //=======================================================================
 
-void BRepTools_ShapeSet::ReadPolygon3D (Standard_IStream&                        IS,
-                                        const Handle(Message_ProgressIndicator)& theProgress)
+void BRepTools_ShapeSet::ReadPolygon3D(Standard_IStream& IS, const Message_ProgressRange& theProgress)
 {
   char buffer[255];
   //  Standard_Integer i, j, p, val, nbpol, nbnodes, hasparameters;
@@ -1378,8 +1363,8 @@ void BRepTools_ShapeSet::ReadPolygon3D (Standard_IStream&
   Handle(Poly_Polygon3D) P;
   IS >> nbpol;
   //OCC19559
-  Message_ProgressSentry PS(theProgress, "3D Polygons", 0, nbpol, 1);
-  for (i=1; i<=nbpol && PS.More(); i++, PS.Next()) {
+  Message_ProgressScope aPS(theProgress, "3D Polygons", nbpol);
+  for (i=1; i<=nbpol && aPS.More(); i++, aPS.Next()) {
     IS >> nbnodes;
     IS >> hasparameters;
     TColgp_Array1OfPnt Nodes(1, nbnodes);
@@ -1412,12 +1397,12 @@ void BRepTools_ShapeSet::ReadPolygon3D (Standard_IStream&
 
 void BRepTools_ShapeSet::WriteTriangulation(Standard_OStream&      OS,
                                             const Standard_Boolean Compact,
-                                            const Handle(Message_ProgressIndicator) &theProgress)const
+                                            const Message_ProgressRange& theProgress)const
 {
   Standard_Integer i, j, nbNodes, nbtri = myTriangulations.Extent();
   Standard_Integer nbTriangles = 0, n1, n2, n3;
 
-  Message_ProgressSentry PS(theProgress, "Triangulations", 0, nbtri, 1);
+  Message_ProgressScope aPS(theProgress, "Triangulations", nbtri);
 
   if (Compact)
     OS << "Triangulations " << nbtri << "\n";
@@ -1428,7 +1413,7 @@ void BRepTools_ShapeSet::WriteTriangulation(Standard_OStream&      OS,
   }
 
   Handle(Poly_Triangulation) T;
-  for (i = 1; i <= nbtri && PS.More(); i++, PS.Next()) {
+  for (i = 1; i <= nbtri && aPS.More(); i++, aPS.Next()) {
 
     T = Handle(Poly_Triangulation)::DownCast(myTriangulations(i));
     if (Compact) {
@@ -1514,8 +1499,7 @@ void BRepTools_ShapeSet::DumpTriangulation(Standard_OStream& OS)const
 //purpose  : 
 //=======================================================================
 
-void BRepTools_ShapeSet::ReadTriangulation (Standard_IStream& IS,
-                                            const Handle(Message_ProgressIndicator) &theProgress)
+void BRepTools_ShapeSet::ReadTriangulation(Standard_IStream& IS, const Message_ProgressRange& theProgress)
 {
   char buffer[255];
   //  Standard_Integer i, j, val, nbtri;
@@ -1531,8 +1515,8 @@ void BRepTools_ShapeSet::ReadTriangulation (Standard_IStream& IS,
 
   IS >> nbtri;
   //OCC19559
-  Message_ProgressSentry PS(theProgress, "Triangulations", 0, nbtri, 1);
-  for (i=1; i<=nbtri && PS.More();i++, PS.Next()) {
+  Message_ProgressScope aPS(theProgress, "Triangulations", nbtri);
+  for (i=1; i<=nbtri && aPS.More();i++, aPS.Next()) {
 
     IS >> nbNodes >> nbTriangles >> hasUV;
     GeomTools::GetReal(IS, d);
index dd370fa..ac5197b 100644 (file)
@@ -67,28 +67,23 @@ public:
   
   //! Writes the geometry of  me  on the stream <OS> in a
   //! format that can be read back by Read.
-  Standard_EXPORT virtual void WriteGeometry
-    (Standard_OStream& OS,
-     const Handle(Message_ProgressIndicator) &theProgress = NULL) Standard_OVERRIDE;
+  Standard_EXPORT virtual void WriteGeometry (Standard_OStream& OS,
+                                              const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
   
   //! Reads the geometry of me from the  stream  <IS>.
-  Standard_EXPORT virtual void ReadGeometry
-    (Standard_IStream& IS,
-     const Handle(Message_ProgressIndicator) &theProgress = NULL) Standard_OVERRIDE;
+  Standard_EXPORT virtual void ReadGeometry (Standard_IStream& IS,
+                                             const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
   
   //! Dumps the geometry of <S> on the stream <OS>.
-  Standard_EXPORT virtual void DumpGeometry
-    (const TopoDS_Shape& S, Standard_OStream& OS) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void DumpGeometry (const TopoDS_Shape& S, Standard_OStream& OS) const Standard_OVERRIDE;
   
   //! Writes the geometry of <S>  on the stream <OS> in a
   //! format that can be read back by Read.
-  Standard_EXPORT virtual void WriteGeometry
-    (const TopoDS_Shape& S, Standard_OStream& OS) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void WriteGeometry (const TopoDS_Shape& S, Standard_OStream& OS) const Standard_OVERRIDE;
   
   //! Reads the geometry of a shape of type <T> from the
   //! stream <IS> and returns it in <S>.
-  Standard_EXPORT virtual void ReadGeometry
-    (const TopAbs_ShapeEnum T, Standard_IStream& IS, TopoDS_Shape& S) Standard_OVERRIDE;
+  Standard_EXPORT virtual void ReadGeometry (const TopAbs_ShapeEnum T, Standard_IStream& IS, TopoDS_Shape& S) Standard_OVERRIDE;
   
   //! Inserts  the shape <S2> in  the  shape <S1>.  This
   //! method must be   redefined  to  use   the  correct
@@ -99,17 +94,15 @@ public:
   
   //! Reads the 3d polygons  of me
   //! from the  stream  <IS>.
-  Standard_EXPORT void ReadPolygon3D
-    (Standard_IStream& IS,
-     const Handle(Message_ProgressIndicator) &theProgress = NULL);
+  Standard_EXPORT void ReadPolygon3D (Standard_IStream& IS,
+                                      const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Writes the 3d polygons
   //! on the stream <OS> in a format that can
   //! be read back by Read.
-  Standard_EXPORT void WritePolygon3D
-    (Standard_OStream& OS, 
-     const Standard_Boolean Compact = Standard_True,
-     const Handle(Message_ProgressIndicator) &theProgress = NULL) const;
+  Standard_EXPORT void WritePolygon3D (Standard_OStream& OS,
+                                       const Standard_Boolean Compact = Standard_True,
+                                       const Message_ProgressRange& theProgress = Message_ProgressRange()) const;
   
   //! Dumps the 3d polygons
   //! on the stream <OS>.
@@ -117,17 +110,15 @@ public:
   
   //! Reads the triangulation of me
   //! from the  stream  <IS>.
-  Standard_EXPORT void ReadTriangulation
-    (Standard_IStream& IS,
-     const Handle(Message_ProgressIndicator) &theProgress = NULL);
+  Standard_EXPORT void ReadTriangulation (Standard_IStream& IS,
+                                          const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Writes the triangulation
   //! on the stream <OS> in a format that can
   //! be read back by Read.
-  Standard_EXPORT void WriteTriangulation
-    (Standard_OStream& OS, 
-     const Standard_Boolean Compact = Standard_True, 
-     const Handle(Message_ProgressIndicator) &theProgress = NULL) const;
+  Standard_EXPORT void WriteTriangulation (Standard_OStream& OS,
+                                           const Standard_Boolean Compact = Standard_True,
+                                           const Message_ProgressRange& theProgress = Message_ProgressRange()) const;
   
   //! Dumps the triangulation
   //! on the stream <OS>.
@@ -135,24 +126,33 @@ public:
   
   //! Reads the polygons on triangulation of me
   //! from the  stream  <IS>.
-  Standard_EXPORT void ReadPolygonOnTriangulation
-    (Standard_IStream& IS,
-     const Handle(Message_ProgressIndicator) &theProgress = NULL);
+  Standard_EXPORT void ReadPolygonOnTriangulation (Standard_IStream& IS,
+                                                   const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Writes the polygons on triangulation
   //! on the stream <OS> in a format that can
   //! be read back by Read.
-  Standard_EXPORT void WritePolygonOnTriangulation
-    (Standard_OStream& OS, 
-     const Standard_Boolean Compact = Standard_True,
-     const Handle(Message_ProgressIndicator) &theProgress = NULL) const;
+  Standard_EXPORT void WritePolygonOnTriangulation (Standard_OStream& OS,
+                                                    const Standard_Boolean Compact = Standard_True,
+                                                    const Message_ProgressRange& theProgress = Message_ProgressRange()) const;
   
   //! Dumps the polygons on triangulation
   //! on the stream <OS>.
   Standard_EXPORT void DumpPolygonOnTriangulation (Standard_OStream& OS) const;
 
+
+
+
+protected:
+
+
+
+
+
 private:
 
+
+
   BRep_Builder myBuilder;
   GeomTools_SurfaceSet mySurfaces;
   GeomTools_CurveSet myCurves;
index c17d3c9..bc36e96 100644 (file)
@@ -59,7 +59,7 @@ void BinDrivers_DocumentRetrievalDriver::ReadShapeSection
                               (BinLDrivers_DocumentSection& /*theSection*/,
                                Standard_IStream&            theIS,
                                const Standard_Boolean       /*isMess*/,
-                               const Handle(Message_ProgressIndicator)& theProgress)
+                               const Message_ProgressRange& theRange)
 
 {
   // Read Shapes
@@ -70,7 +70,7 @@ void BinDrivers_DocumentRetrievalDriver::ReadShapeSection
       OCC_CATCH_SIGNALS
       Handle(BinMNaming_NamedShapeDriver) aNamedShapeDriver =
         Handle(BinMNaming_NamedShapeDriver)::DownCast (aDriver);
-      aNamedShapeDriver->ReadShapeSection (theIS, theProgress);
+      aNamedShapeDriver->ReadShapeSection (theIS, theRange);
     }
     catch(Standard_Failure const& anException) {
       const TCollection_ExtendedString aMethStr
index 47ce680..f7c51d7 100644 (file)
@@ -49,7 +49,7 @@ public:
     (BinLDrivers_DocumentSection& theSection, 
      Standard_IStream& theIS,
      const Standard_Boolean isMess = Standard_False, 
-     const Handle(Message_ProgressIndicator)& theProgress = NULL) Standard_OVERRIDE;
+     const Message_ProgressRange& theRange = Message_ProgressRange()) Standard_OVERRIDE;
   
   Standard_EXPORT virtual void CheckShapeSection
     (const Storage_Position& thePos, Standard_IStream& theIS) Standard_OVERRIDE;
index 799b1a8..9d19ce6 100644 (file)
@@ -100,7 +100,7 @@ void BinDrivers_DocumentStorageDriver::SetWithTriangles (const Handle(Message_Me
 void BinDrivers_DocumentStorageDriver::WriteShapeSection
                                (BinLDrivers_DocumentSection&   theSection,
                                 Standard_OStream&              theOS,
-                                const Handle(Message_ProgressIndicator)& theProgress)
+                                const Message_ProgressRange&   theRange)
 {
   const Standard_Size aShapesSectionOffset = (Standard_Size) theOS.tellp();
   
@@ -111,7 +111,7 @@ void BinDrivers_DocumentStorageDriver::WriteShapeSection
       OCC_CATCH_SIGNALS
       Handle(BinMNaming_NamedShapeDriver) aNamedShapeDriver =
         Handle(BinMNaming_NamedShapeDriver)::DownCast (aDriver);
-      aNamedShapeDriver->WriteShapeSection (theOS, theProgress);
+      aNamedShapeDriver->WriteShapeSection (theOS, theRange);
     }
     catch(Standard_Failure const& anException) {
       TCollection_ExtendedString anErrorStr ("BinDrivers_DocumentStorageDriver, Shape Section :");
index e976c3e..9806e73 100644 (file)
@@ -46,7 +46,7 @@ public:
   Standard_EXPORT virtual void WriteShapeSection
     (BinLDrivers_DocumentSection& theDocSection, 
      Standard_OStream& theOS, 
-     const Handle(Message_ProgressIndicator)& theProgress = NULL) Standard_OVERRIDE;
+     const Message_ProgressRange& theRange = Message_ProgressRange()) Standard_OVERRIDE;
 
   //! Return true if shape should be stored with triangles.
   Standard_EXPORT Standard_Boolean IsWithTriangles() const;
index 7f0c488..ad2e6ff 100644 (file)
@@ -42,7 +42,7 @@
 #include <TDF_Label.hxx>
 #include <TDocStd_Document.hxx>
 #include <TDocStd_Owner.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 
 
 IMPLEMENT_STANDARD_RTTIEXT(BinLDrivers_DocumentRetrievalDriver,PCDM_RetrievalDriver)
@@ -80,7 +80,7 @@ void BinLDrivers_DocumentRetrievalDriver::Read
                          (const TCollection_ExtendedString& theFileName,
                           const Handle(CDM_Document)&       theNewDocument,
                           const Handle(CDM_Application)&    theApplication,
-                          const Handle(Message_ProgressIndicator)& theProgress)
+                          const Message_ProgressRange&      theRange)
 {
   std::ifstream aFileStream;
   OSD_OpenStream (aFileStream, theFileName, std::ios::in | std::ios::binary);
@@ -90,8 +90,8 @@ void BinLDrivers_DocumentRetrievalDriver::Read
     Handle(Storage_Data) dData;
     TCollection_ExtendedString aFormat = PCDM_ReadWriter::FileFormat (aFileStream, dData);
 
-    Read(aFileStream, dData, theNewDocument, theApplication, theProgress);
-    if (!theProgress.IsNull() && theProgress->UserBreak())
+    Read(aFileStream, dData, theNewDocument, theApplication, theRange);
+    if (!theRange.More())
     {
       myReaderStatus = PCDM_RS_UserBreak;
       return;
@@ -117,7 +117,7 @@ void BinLDrivers_DocumentRetrievalDriver::Read (Standard_IStream&
                                                 const Handle(Storage_Data)&     theStorageData,
                                                 const Handle(CDM_Document)&     theDoc,
                                                 const Handle(CDM_Application)&  theApplication,
-                                                const Handle(Message_ProgressIndicator)& theProgress)
+                                                const Message_ProgressRange&    theRange)
 {
   myReaderStatus = PCDM_RS_DriverFailure;
   myMsgDriver = theApplication -> MessageDriver();
@@ -233,7 +233,7 @@ void BinLDrivers_DocumentRetrievalDriver::Read (Standard_IStream&
   Handle(TDF_Data) aData = new TDF_Data();
   std::streampos aDocumentPos = -1;
 
-  Message_ProgressSentry aPS(theProgress, "Reading data", 0, 3, 1);
+  Message_ProgressScope aPS(theRange, "Reading data", 3);
 
   // 2b. Read the TOC of Sections
   if (aFileVer >= 3) {
@@ -259,13 +259,12 @@ void BinLDrivers_DocumentRetrievalDriver::Read (Standard_IStream&
         theIStream.seekg ((std::streampos) aCurSection.Offset());
         if (aCurSection.Name().IsEqual ((Standard_CString)SHAPESECTION_POS))
         {
-          ReadShapeSection (aCurSection, theIStream, false, theProgress);
+          ReadShapeSection (aCurSection, theIStream, false, aPS.Next());
           if (!aPS.More())
           {
             myReaderStatus = PCDM_RS_UserBreak;
             return;
           }
-          aPS.Next();
         }
         else
           ReadSection (aCurSection, theDoc, theIStream);
@@ -306,13 +305,12 @@ void BinLDrivers_DocumentRetrievalDriver::Read (Standard_IStream&
         CheckShapeSection(aShapeSectionPos, theIStream);
         // Read Shapes
         BinLDrivers_DocumentSection aCurSection;
-        ReadShapeSection (aCurSection, theIStream, Standard_False, theProgress);
+        ReadShapeSection (aCurSection, theIStream, Standard_False, aPS.Next());
         if (!aPS.More())
         {
           myReaderStatus = PCDM_RS_UserBreak;
           return;
         }
-        aPS.Next();
       }
     }
   } // end of reading Sections or shape section
@@ -325,13 +323,13 @@ void BinLDrivers_DocumentRetrievalDriver::Read (Standard_IStream&
   theIStream.read ((char*)&aTag, sizeof(Standard_Integer));
 
   // read sub-tree of the root label
-  Standard_Integer nbRead = ReadSubTree (theIStream, aData->Root(), theProgress);
+  Standard_Integer nbRead = ReadSubTree (theIStream, aData->Root(), aPS.Next());
   if (!aPS.More()) 
   {
     myReaderStatus = PCDM_RS_UserBreak;
     return;
   }
-  aPS.Next();
+  
   Clear();
   if (!aPS.More())
   {
@@ -369,13 +367,13 @@ void BinLDrivers_DocumentRetrievalDriver::Read (Standard_IStream&
 Standard_Integer BinLDrivers_DocumentRetrievalDriver::ReadSubTree
                          (Standard_IStream& theIS,
                           const TDF_Label&  theLabel,
-                          const Handle(Message_ProgressIndicator)& theProgress)
+                          const Message_ProgressRange& theRange)
 {
   Standard_Integer nbRead = 0;
   TCollection_ExtendedString aMethStr
     ("BinLDrivers_DocumentRetrievalDriver: ");
 
-  Message_ProgressSentry aPS(theProgress, "Reading sub tree", 0, 2, 1, true);
+  Message_ProgressScope aPS(theRange, "Reading sub tree", 2, true);
 
   // Read attributes:
   theIS >> myPAtt;
@@ -464,9 +462,9 @@ Standard_Integer BinLDrivers_DocumentRetrievalDriver::ReadSubTree
       return -1;
     }
 
-    aPS.Next();
+
     // read sub-tree
-    Standard_Integer nbSubRead = ReadSubTree (theIS, aLab, theProgress);
+    Standard_Integer nbSubRead = ReadSubTree (theIS, aLab, aPS.Next());
     // check for error
     if (nbSubRead == -1)
       return -1;
@@ -522,7 +520,7 @@ void BinLDrivers_DocumentRetrievalDriver::ReadShapeSection
                               (BinLDrivers_DocumentSection& theSection,
                                Standard_IStream&            /*theIS*/,
                                const Standard_Boolean isMess,
-                               const Handle(Message_ProgressIndicator) &/*theProgress*/)
+                               const Message_ProgressRange &/*theRange*/)
 
 {
   if(isMess && theSection.Length()) {
index 5fb48ab..4a54d01 100644 (file)
@@ -62,13 +62,13 @@ public:
   Standard_EXPORT virtual void Read (const TCollection_ExtendedString& theFileName,
                                      const Handle(CDM_Document)& theNewDocument, 
                                      const Handle(CDM_Application)& theApplication, 
-                                     const Handle(Message_ProgressIndicator)& theProgress = NULL) Standard_OVERRIDE;
+                                     const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
 
   Standard_EXPORT virtual void Read (Standard_IStream&               theIStream,
                                      const Handle(Storage_Data)&     theStorageData,
                                      const Handle(CDM_Document)&     theDoc,
                                      const Handle(CDM_Application)&  theApplication,
-                                     const Handle(Message_ProgressIndicator)& theProgress = NULL) Standard_OVERRIDE;
+                                     const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
   
   Standard_EXPORT virtual Handle(BinMDF_ADriverTable) AttributeDrivers (const Handle(Message_Messenger)& theMsgDriver);
 
@@ -84,7 +84,7 @@ protected:
   Standard_EXPORT virtual Standard_Integer ReadSubTree
     (Standard_IStream& theIS, 
      const TDF_Label& theData, 
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+        const Message_ProgressRange& theRanges = Message_ProgressRange());
   
   
   //! define the procedure of reading a section to file.
@@ -98,7 +98,7 @@ protected:
     (BinLDrivers_DocumentSection& theSection, 
      Standard_IStream& theIS, 
      const Standard_Boolean isMess = Standard_False,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+        const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! checks the shapes section can be correctly retreived.
   Standard_EXPORT virtual void CheckShapeSection (const Storage_Position& thePos, Standard_IStream& theIS);
index 0cf0878..0e5b7db 100644 (file)
@@ -42,7 +42,7 @@
 #include <TDF_Label.hxx>
 #include <TDF_Tool.hxx>
 #include <TDocStd_Document.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(BinLDrivers_DocumentStorageDriver,PCDM_StorageDriver)
 
@@ -65,7 +65,7 @@ BinLDrivers_DocumentStorageDriver::BinLDrivers_DocumentStorageDriver ()
 void BinLDrivers_DocumentStorageDriver::Write
                           (const Handle(CDM_Document)&       theDocument,
                            const TCollection_ExtendedString& theFileName,
-                           const Handle(Message_ProgressIndicator)& theProgress)
+                           const Message_ProgressRange&      theRange)
 {
   SetIsError(Standard_False);
   SetStoreStatus(PCDM_SS_OK);
@@ -77,7 +77,7 @@ void BinLDrivers_DocumentStorageDriver::Write
 
   if (aFileStream.is_open() && aFileStream.good())
   {
-    Write(theDocument, aFileStream, theProgress);
+    Write(theDocument, aFileStream, theRange);
   }
   else
   {
@@ -91,9 +91,9 @@ void BinLDrivers_DocumentStorageDriver::Write
 //purpose  :
 //=======================================================================
 
-void BinLDrivers_DocumentStorageDriver::Write (const Handle(CDM_Document)& theDoc, 
-                                               Standard_OStream& theOStream,
-                                               const Handle(Message_ProgressIndicator)& theProgress)
+void BinLDrivers_DocumentStorageDriver::Write (const Handle(CDM_Document)&  theDoc, 
+                                               Standard_OStream&            theOStream,
+                                               const Message_ProgressRange& theRange)
 {
   myMsgDriver = theDoc->Application()->MessageDriver();
   myMapUnsupported.Clear();
@@ -140,26 +140,26 @@ void BinLDrivers_DocumentStorageDriver::Write (const Handle(CDM_Document)& theDo
     myRelocTable.Clear();
     myPAtt.Init();
 
-    Message_ProgressSentry aPS(theProgress, "Writing document", 0, 3, 1);
+    Message_ProgressScope aPS(theRange, "Writing document", 3);
 
 //  Write Doc structure
-    WriteSubTree (aData->Root(), theOStream, theProgress); // Doc is written
+    WriteSubTree (aData->Root(), theOStream, aPS.Next()); // Doc is written
     if (!aPS.More())
     {
       SetIsError(Standard_True);
       SetStoreStatus(PCDM_SS_UserBreak);
       return;
     }
-    aPS.Next();
+
 //  4. Write Shapes section
-    WriteShapeSection (aShapesSection, theOStream, theProgress);
+    WriteShapeSection (aShapesSection, theOStream, aPS.Next());
     if (!aPS.More())
     {
        SetIsError(Standard_True);
        SetStoreStatus(PCDM_SS_UserBreak);
        return;
     }
-    aPS.Next();
+
     // Write application-defined sections
     for (anIterS.Init (mySections); anIterS.More(); anIterS.Next()) {
       BinLDrivers_DocumentSection& aSection = anIterS.ChangeValue();
@@ -228,16 +228,16 @@ void BinLDrivers_DocumentStorageDriver::UnsupportedAttrMsg
 //=======================================================================
 
 void BinLDrivers_DocumentStorageDriver::WriteSubTree
-                        (const TDF_Label&          theLabel,
-                         Standard_OStream&         theOS,
-                         const Handle(Message_ProgressIndicator)& theProgress)
+                        (const TDF_Label&             theLabel,
+                         Standard_OStream&            theOS,
+                         const Message_ProgressRange& theRange)
 {
   // Skip empty labels
   if (!myEmptyLabels.IsEmpty() && myEmptyLabels.First() == theLabel) {
     myEmptyLabels.RemoveFirst();
     return;
   }
-  Message_ProgressSentry aPS(theProgress, "Writing sub tree", 0, 2, 1, 1);
+  Message_ProgressScope aPS(theRange, "Writing sub tree", 2, true);
   // Write label header: tag
   Standard_Integer aTag = theLabel.Tag();
 #if DO_INVERSE
@@ -298,8 +298,7 @@ void BinLDrivers_DocumentStorageDriver::WriteSubTree
       SetStoreStatus(PCDM_SS_UserBreak);
       return;
     }
-    aPS.Next();
-    WriteSubTree (aChildLab, theOS, theProgress);
+    WriteSubTree (aChildLab, theOS, aPS.Next());
   }
 
   // Write the end label marker
@@ -547,7 +546,7 @@ void BinLDrivers_DocumentStorageDriver::WriteSection
 void BinLDrivers_DocumentStorageDriver::WriteShapeSection
                                 (BinLDrivers_DocumentSection&   theSection,
                                  Standard_OStream&              theOS,
-                                 const Handle(Message_ProgressIndicator)& /*theProgress*/)
+                                 const Message_ProgressRange& /*theRange*/)
 {
   const Standard_Size aShapesSectionOffset = (Standard_Size) theOS.tellp();
   theSection.Write (theOS, aShapesSectionOffset);
index 1361d48..93bed87 100644 (file)
@@ -54,12 +54,12 @@ public:
   //! Write <theDocument> to the binary file <theFileName>
   Standard_EXPORT virtual void Write (const Handle(CDM_Document)& theDocument, 
                                       const TCollection_ExtendedString& theFileName, 
-                                      const Handle(Message_ProgressIndicator)& theProgress = NULL) Standard_OVERRIDE;
+                                      const Message_ProgressRange& theRange = Message_ProgressRange()) Standard_OVERRIDE;
 
   //! Write <theDocument> to theOStream
   Standard_EXPORT virtual void Write (const Handle(CDM_Document)& theDocument, 
                                       Standard_OStream& theOStream, 
-                                      const Handle(Message_ProgressIndicator)& theProgress = NULL) Standard_OVERRIDE;
+                                      const Message_ProgressRange& theRange = Message_ProgressRange()) Standard_OVERRIDE;
   
   Standard_EXPORT virtual Handle(BinMDF_ADriverTable) AttributeDrivers (const Handle(Message_Messenger)& theMsgDriver);
   
@@ -77,7 +77,7 @@ protected:
   //! Write the tree under <theLabel> to the stream <theOS>
   Standard_EXPORT void WriteSubTree (const TDF_Label& theData,
                                      Standard_OStream& theOS, 
-                                     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+                                     const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! define the procedure of writing a section to file.
   Standard_EXPORT virtual void WriteSection (const TCollection_AsciiString& theName,
@@ -87,7 +87,7 @@ protected:
   //! defines the procedure of writing a shape  section to file
   Standard_EXPORT virtual void WriteShapeSection (BinLDrivers_DocumentSection& theDocSection,
                                                   Standard_OStream& theOS,
-                                                  const Handle(Message_ProgressIndicator)& theProgress = NULL);
+                                                  const Message_ProgressRange& theRange = Message_ProgressRange());
 
   Handle(BinMDF_ADriverTable) myDrivers;
   BinObjMgt_SRelocationTable myRelocTable;
index 09c19fe..767c19d 100644 (file)
@@ -277,11 +277,11 @@ void BinMNaming_NamedShapeDriver::Paste (const Handle(TDF_Attribute)& theSource,
 //=======================================================================
 
 void BinMNaming_NamedShapeDriver::WriteShapeSection (Standard_OStream& theOS,
-                                                     const Handle(Message_ProgressIndicator)& theProgress)
+                                                     const Message_ProgressRange& theRange)
 {
   theOS << SHAPESET; 
   myShapeSet.SetFormatNb(myFormatNb);
-  myShapeSet.Write (theOS, theProgress);
+  myShapeSet.Write (theOS, theRange);
   myShapeSet.Clear();
 }
 
@@ -301,7 +301,7 @@ void BinMNaming_NamedShapeDriver::Clear()
 //=======================================================================
 
 void BinMNaming_NamedShapeDriver::ReadShapeSection (Standard_IStream& theIS,
-                                                    const Handle(Message_ProgressIndicator)& theProgress)
+                                                    const Message_ProgressRange& theRange)
 {
   // check section title string; note that some versions of OCCT (up to 6.3.1) 
   // might avoid writing shape section if it is empty
@@ -310,7 +310,7 @@ void BinMNaming_NamedShapeDriver::ReadShapeSection (Standard_IStream& theIS,
   theIS >> aSectionTitle;
   if(aSectionTitle.Length() > 0 && aSectionTitle == SHAPESET) {
     myShapeSet.Clear();
-    myShapeSet.Read (theIS, theProgress);
+    myShapeSet.Read (theIS, theRange);
     SetFormatNb(myShapeSet.FormatNb());
   }
   else
index 0cd7285..4e15ab7 100644 (file)
@@ -53,11 +53,11 @@ public:
   
   //! Input the shapes from Bin Document file
   Standard_EXPORT void ReadShapeSection (Standard_IStream& theIS,
-                                         const Handle(Message_ProgressIndicator)& theProgress = NULL);
+                                         const Message_ProgressRange& therange = Message_ProgressRange());
   
   //! Output the shapes into Bin Document file
   Standard_EXPORT void WriteShapeSection (Standard_OStream& theOS,
-                                          const Handle(Message_ProgressIndicator)& theProgress = NULL);
+                                          const Message_ProgressRange& therange = Message_ProgressRange());
   
   //! Clear myShapeSet
   Standard_EXPORT void Clear();
index 53aa4f6..16237e5 100644 (file)
@@ -17,7 +17,6 @@
 #include <BinTools.hxx>
 #include <BinTools_ShapeSet.hxx>
 #include <FSD_FileHeader.hxx>
-#include <Message_ProgressIndicator.hxx>
 #include <OSD_OpenFile.hxx>
 #include <Storage_StreamTypeMismatchError.hxx>
 
@@ -176,12 +175,12 @@ Standard_IStream& BinTools::GetBool(Standard_IStream& IS, Standard_Boolean& aVal
 //=======================================================================
 
 void BinTools::Write (const TopoDS_Shape& theShape, Standard_OStream& theStream,
-                      const Handle(Message_ProgressIndicator)& theProgress)
+                      const Message_ProgressRange& theRange)
 {
   BinTools_ShapeSet aShapeSet(Standard_True);
   aShapeSet.SetFormatNb (3);
   aShapeSet.Add (theShape);
-  aShapeSet.Write (theStream, theProgress);
+  aShapeSet.Write (theStream, theRange);
   aShapeSet.Write (theShape, theStream);
 }
 
@@ -191,10 +190,10 @@ void BinTools::Write (const TopoDS_Shape& theShape, Standard_OStream& theStream,
 //=======================================================================
 
 void BinTools::Read (TopoDS_Shape& theShape, Standard_IStream& theStream,
-                     const Handle(Message_ProgressIndicator)& theProgress)
+                     const Message_ProgressRange& theRange)
 {
   BinTools_ShapeSet aShapeSet(Standard_True);
-  aShapeSet.Read (theStream, theProgress);
+  aShapeSet.Read (theStream, theRange);
   aShapeSet.Read (theShape, theStream, aShapeSet.NbShapes());
 }
 
@@ -204,7 +203,7 @@ void BinTools::Read (TopoDS_Shape& theShape, Standard_IStream& theStream,
 //=======================================================================
 
 Standard_Boolean BinTools::Write (const TopoDS_Shape& theShape, const Standard_CString theFile,
-                                  const Handle(Message_ProgressIndicator)& theProgress)
+                                  const Message_ProgressRange& theRange)
 {
   std::ofstream aStream;
   aStream.precision (15);
@@ -212,7 +211,7 @@ Standard_Boolean BinTools::Write (const TopoDS_Shape& theShape, const Standard_C
   if (!aStream.good())
     return Standard_False;
 
-  Write (theShape, aStream, theProgress);
+  Write (theShape, aStream, theRange);
   aStream.close();
   return aStream.good();
 }
@@ -223,7 +222,7 @@ Standard_Boolean BinTools::Write (const TopoDS_Shape& theShape, const Standard_C
 //=======================================================================
 
 Standard_Boolean BinTools::Read (TopoDS_Shape& theShape, const Standard_CString theFile,
-                                 const Handle(Message_ProgressIndicator)& theProgress)
+                                 const Message_ProgressRange& theRange)
 {
   std::filebuf aBuf;
   OSD_OpenStream (aBuf, theFile, std::ios::in | std::ios::binary);
@@ -231,6 +230,6 @@ Standard_Boolean BinTools::Read (TopoDS_Shape& theShape, const Standard_CString
     return Standard_False;
 
   Standard_IStream aStream (&aBuf);
-  Read (theShape, aStream, theProgress);
+  Read (theShape, aStream, theRange);
   return aStream.good();
 }
index c1a1ca0..07ad465 100644 (file)
@@ -26,7 +26,7 @@
 #include <Standard_ExtCharacter.hxx>
 #include <Standard_OStream.hxx>
 #include <Standard_IStream.hxx>
-#include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressRange.hxx>
 
 class TopoDS_Shape;
 class BinTools_ShapeSet;
@@ -65,21 +65,21 @@ public:
   
   //! Writes <theShape> on <theStream> in binary format.
   Standard_EXPORT static void Write (const TopoDS_Shape& theShape, Standard_OStream& theStream,
-                                     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+                                     const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! Reads a shape from <theStream> and returns it in <theShape>.
   Standard_EXPORT static void Read (TopoDS_Shape& theShape, Standard_IStream& theStream,
-                                    const Handle(Message_ProgressIndicator)& theProgress = NULL);
+                                    const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! Writes <theShape> in <theFile>.
   Standard_EXPORT static Standard_Boolean Write
     (const TopoDS_Shape& theShape, const Standard_CString theFile,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+     const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! Reads a shape from <theFile> and returns it in <theShape>.
   Standard_EXPORT static Standard_Boolean Read
     (TopoDS_Shape& theShape, const Standard_CString theFile,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+     const Message_ProgressRange& theRange = Message_ProgressRange());
 
 protected:
 
index faed5c5..4da831f 100644 (file)
@@ -38,7 +38,7 @@
 #include <TColgp_Array1OfPnt2d.hxx>
 #include <TColStd_Array1OfInteger.hxx>
 #include <TColStd_Array1OfReal.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 
 #define LINE      1
 #define CIRCLE    2
@@ -347,10 +347,10 @@ void BinTools_Curve2dSet::WriteCurve2d(const Handle(Geom2d_Curve)& C,
 //=======================================================================
 
 void  BinTools_Curve2dSet::Write (Standard_OStream& OS,
-                                  const Handle(Message_ProgressIndicator)& theProgress)const
+                                  const Message_ProgressRange& theRange) const
 {
   Standard_Integer i, aNbCurves = myMap.Extent();
-  Message_ProgressSentry aPS(theProgress, "Writing 2D curves", 0, aNbCurves, 1);
+  Message_ProgressScope aPS(theRange, "Writing 2D curves",aNbCurves);
   OS << "Curve2ds "<< aNbCurves << "\n";
   for (i = 1; i <= aNbCurves && aPS.More(); i++, aPS.Next()) {
     WriteCurve2d(Handle(Geom2d_Curve)::DownCast(myMap(i)),OS);
@@ -696,7 +696,7 @@ Standard_IStream& BinTools_Curve2dSet::ReadCurve2d(Standard_IStream& IS,
 //=======================================================================
 
 void  BinTools_Curve2dSet::Read (Standard_IStream& IS,
-                                 const Handle(Message_ProgressIndicator)& theProgress)
+                                 const Message_ProgressRange& theRange)
 {
   char buffer[255];
 
@@ -714,7 +714,7 @@ void  BinTools_Curve2dSet::Read (Standard_IStream& IS,
   Handle(Geom2d_Curve) C;
   Standard_Integer i, aNbCurves;
   IS >> aNbCurves;
-  Message_ProgressSentry aPS(theProgress, "Reading curves 2d", 0, aNbCurves, 1);
+  Message_ProgressScope aPS(theRange, "Reading curves 2d", aNbCurves);
   IS.get();//remove <lf>               
   for (i = 1; i <= aNbCurves && aPS.More(); i++, aPS.Next()) {
     BinTools_Curve2dSet::ReadCurve2d(IS,C);
index b977d72..d163b39 100644 (file)
@@ -25,7 +25,7 @@
 #include <Standard_OStream.hxx>
 #include <Standard_IStream.hxx>
 
-#include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressRange.hxx>
 
 class Standard_OutOfRange;
 class Geom2d_Curve;
@@ -61,12 +61,12 @@ public:
   //! Writes the content of  me  on the stream <OS> in a
   //! format that can be read back by Read.
   Standard_EXPORT void Write (Standard_OStream& OS,
-                              const Handle(Message_ProgressIndicator)& theProgress = NULL) const;
+                              const Message_ProgressRange& theRange = Message_ProgressRange()) const;
   
   //! Reads the content of me from the  stream  <IS>. me
   //! is first cleared.
   Standard_EXPORT void Read (Standard_IStream& IS,
-                             const Handle(Message_ProgressIndicator)& theProgress = NULL);
+                             const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! Dumps the curve on the binary stream, that can be read back.
   Standard_EXPORT static void WriteCurve2d(const Handle(Geom2d_Curve)& C, Standard_OStream& OS);
index a43774c..176bb41 100644 (file)
@@ -37,7 +37,7 @@
 #include <TColgp_Array1OfPnt.hxx>
 #include <TColStd_Array1OfInteger.hxx>
 #include <TColStd_Array1OfReal.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 
 #define LINE      1
 #define CIRCLE    2
@@ -360,10 +360,10 @@ void BinTools_CurveSet::WriteCurve(const Handle(Geom_Curve)& C,
 //=======================================================================
 
 void  BinTools_CurveSet::Write (Standard_OStream& OS,
-                                const Handle(Message_ProgressIndicator)& theProgress)const
+                                const Message_ProgressRange& theRange)const
 {
   Standard_Integer i, nbcurv = myMap.Extent();
-  Message_ProgressSentry aPS(theProgress, "Writing curves", 0, nbcurv, 1);
+  Message_ProgressScope aPS(theRange, "Writing curves", nbcurv);
   OS << "Curves "<< nbcurv << "\n";
   for (i = 1; i <= nbcurv &&aPS.More(); i++, aPS.Next()) {
     WriteCurve(Handle(Geom_Curve)::DownCast(myMap(i)),OS);
@@ -715,7 +715,7 @@ Standard_IStream& BinTools_CurveSet::ReadCurve(Standard_IStream& IS,
 //=======================================================================
 
 void  BinTools_CurveSet::Read (Standard_IStream& IS,
-                               const Handle(Message_ProgressIndicator)& theProgress)
+                               const Message_ProgressRange& theRange)
 {
   char buffer[255];
   IS >> buffer;
@@ -733,7 +733,7 @@ void  BinTools_CurveSet::Read (Standard_IStream& IS,
   Standard_Integer i, nbcurve;
   IS >> nbcurve;
 
-  Message_ProgressSentry aPS(theProgress, "Reading curves", 0, nbcurve, 1);
+  Message_ProgressScope aPS(theRange, "Reading curves", nbcurve);
 
   IS.get();//remove <lf>
   for (i = 1; i <= nbcurve && aPS.More(); i++, aPS.Next()) {
index 0c02011..30a1014 100644 (file)
@@ -25,7 +25,7 @@
 #include <Standard_OStream.hxx>
 #include <Standard_IStream.hxx>
 
-#include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressRange.hxx>
 
 class Standard_OutOfRange;
 class Geom_Curve;
@@ -58,12 +58,12 @@ public:
   //! Writes the content of  me  on the stream <OS> in a
   //! format that can be read back by Read.
   Standard_EXPORT void Write (Standard_OStream& OS,
-                              const Handle(Message_ProgressIndicator)& theProgress = NULL) const;
+                              const Message_ProgressRange& theRange = Message_ProgressRange()) const;
   
   //! Reads the content of me from the  stream  <IS>. me
   //! is first cleared.
   Standard_EXPORT void Read (Standard_IStream& IS,
-                             const Handle(Message_ProgressIndicator) &theProgress = NULL);
+                             const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! Dumps the curve on the stream in binary format
   //! that can be read back.
index 84f8847..eaec192 100644 (file)
@@ -51,7 +51,7 @@
 #include <TopoDS_Iterator.hxx>
 #include <TopoDS_Shape.hxx>
 #include <TopoDS_Vertex.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressRange.hxx>
 
 #include <string.h>
 //#define MDTV_DEB 1
@@ -296,33 +296,25 @@ void BinTools_ShapeSet::AddGeometry(const TopoDS_Shape& S)
 //=======================================================================
 
 void  BinTools_ShapeSet::WriteGeometry (Standard_OStream& OS,
-                                        const Handle(Message_ProgressIndicator)& theProgress)const
+                                        const Message_ProgressRange& theRange)const
 {
-  Message_ProgressSentry aPS(theProgress, "Writing geometry", 0, 6, 1);
-  myCurves2d.Write(OS, theProgress);
+  Message_ProgressScope aPS(theRange, "Writing geometry", 6);
+  myCurves2d.Write(OS, aPS.Next());
   if (!aPS.More())
     return;
-  aPS.Next();
-  myCurves.Write(OS, theProgress);
+  myCurves.Write(OS, aPS.Next());
   if (!aPS.More())
     return;
-  aPS.Next();
-  WritePolygon3D(OS, theProgress);
+  WritePolygon3D(OS, aPS.Next());
   if (!aPS.More())
     return;
-  aPS.Next();
-  WritePolygonOnTriangulation(OS, theProgress);
+  WritePolygonOnTriangulation(OS, aPS.Next());
   if (!aPS.More())
     return;
-  aPS.Next();
-  mySurfaces.Write(OS, theProgress);
+  mySurfaces.Write(OS, aPS.Next());
   if (!aPS.More())
     return;
-  aPS.Next();
-  WriteTriangulation(OS, theProgress);
-  if (!aPS.More())
-    return;
-  aPS.Next();
+  WriteTriangulation(OS, aPS.Next());
 }
 
 //=======================================================================
@@ -331,7 +323,7 @@ void  BinTools_ShapeSet::WriteGeometry (Standard_OStream& OS,
 //=======================================================================
 
 void  BinTools_ShapeSet::Write (Standard_OStream& OS,
-                                const Handle(Message_ProgressIndicator)& theProgress)const
+                                const Message_ProgressRange& theRange)const
 {
 
   // write the copyright
@@ -352,23 +344,22 @@ void  BinTools_ShapeSet::Write (Standard_OStream& OS,
   // write the geometry
   //-----------------------------------------
 
-  Message_ProgressSentry aPS(theProgress, "Writing geometry", 0, 2, 1);
+  Message_ProgressScope aPS(theRange, "Writing geometry", 2);
 
-  WriteGeometry(OS, theProgress);
+  WriteGeometry(OS, aPS.Next());
   if (!aPS.More())
     return;
-  aPS.Next();
-       
+
   //-----------------------------------------
   // write the shapes
   //-----------------------------------------
 
   Standard_Integer i, nbShapes = myShapes.Extent();
-  Message_ProgressSentry aPSinner(theProgress, "Writing shapes", 0, nbShapes, 1);
+  Message_ProgressScope aPSinner(aPS.Next(), "Writing shapes", nbShapes);
   OS << "\nTShapes " << nbShapes << "\n";
   
   // subshapes are written first
-  for (i = 1; i <= nbShapes && aPS.More(); i++, aPS.Next()) {
+  for (i = 1; i <= nbShapes && aPSinner.More(); i++, aPSinner.Next()) {
 
     const TopoDS_Shape& S = myShapes(i);
     
@@ -404,7 +395,7 @@ void  BinTools_ShapeSet::Write (Standard_OStream& OS,
 //=======================================================================
 
 void  BinTools_ShapeSet::Read (Standard_IStream& IS,
-                               const Handle(Message_ProgressIndicator)& theProgress)
+                               const Message_ProgressRange& theRange)
 {
 
   Clear();
@@ -440,11 +431,10 @@ void  BinTools_ShapeSet::Read (Standard_IStream& IS,
   //-----------------------------------------
   // read the geometry
   //-----------------------------------------
-  Message_ProgressSentry aPSouter(theProgress, "Reading", 0, 2, 1);
-  ReadGeometry(IS, theProgress);
+  Message_ProgressScope aPSouter(theRange, "Reading", 2);
+  ReadGeometry(IS, aPSouter.Next());
   if (!aPSouter.More())
     return;
-  aPSouter.Next();
   //-----------------------------------------
   // read the shapes
   //-----------------------------------------
@@ -460,7 +450,7 @@ void  BinTools_ShapeSet::Read (Standard_IStream& IS,
   Standard_Integer nbShapes = 0;
   IS >> nbShapes;
   IS.get();//remove lf 
-  Message_ProgressSentry aPSinner(theProgress, "Reading Shapes", 0, nbShapes, 1);
+  Message_ProgressScope aPSinner(aPSouter.Next(), "Reading Shapes", nbShapes);
   for (int i = 1; i <= nbShapes && aPSinner.More(); i++, aPSinner.Next()) {
 
     TopoDS_Shape S;
@@ -561,33 +551,25 @@ void  BinTools_ShapeSet::Read (TopoDS_Shape& S, Standard_IStream& IS,
 //=======================================================================
 
 void  BinTools_ShapeSet::ReadGeometry (Standard_IStream& IS,
-                                       const Handle(Message_ProgressIndicator)& theProgress)
+                                       const Message_ProgressRange& theRange)
 {
-  Message_ProgressSentry aPS(theProgress, "Reading geomentry", 0, 6, 1);
-  myCurves2d.Read(IS, theProgress);
-  if (!aPS.More())
-    return;
-  aPS.Next();
-  myCurves.Read(IS, theProgress);
+  Message_ProgressScope aPS(theRange, "Reading geomentry", 6);
+  myCurves2d.Read(IS, aPS.Next());
   if (!aPS.More())
     return;
-  aPS.Next();
-  ReadPolygon3D(IS, theProgress);
+  myCurves.Read(IS, aPS.Next());
   if (!aPS.More())
     return;
-  aPS.Next();
-  ReadPolygonOnTriangulation(IS, theProgress);
+  ReadPolygon3D(IS, aPS.Next());
   if (!aPS.More())
     return;
-  aPS.Next();
-  mySurfaces.Read(IS, theProgress);
+  ReadPolygonOnTriangulation(IS, aPS.Next());
   if (!aPS.More())
     return;
-  aPS.Next();
-  ReadTriangulation(IS, theProgress);
+  mySurfaces.Read(IS, aPS.Next());
   if (!aPS.More())
     return;
-  aPS.Next();
+  ReadTriangulation(IS, aPS.Next());
 }
 
 //=======================================================================
@@ -1229,14 +1211,14 @@ void  BinTools_ShapeSet::AddShapes(TopoDS_Shape&       S1,
 //=======================================================================
 void BinTools_ShapeSet::WritePolygonOnTriangulation
   (Standard_OStream& OS,
-   const Handle(Message_ProgressIndicator)& theProgress) const
+   const Message_ProgressRange& theRange) const
 {
   const Standard_Integer aNbPol = myNodes.Extent();
   OS << "PolygonOnTriangulations " << aNbPol << "\n";
   try
   {
     OCC_CATCH_SIGNALS
-    Message_ProgressSentry aPS(theProgress, "Writing polygons on triangulation", 0, aNbPol, 1);
+    Message_ProgressScope aPS(theRange, "Writing polygons on triangulation", aNbPol);
     for (Standard_Integer aPolIter = 1; aPolIter <= aNbPol && aPS.More(); ++aPolIter, aPS.Next())
     {
       const Handle(Poly_PolygonOnTriangulation)& aPoly = myNodes.FindKey (aPolIter);
@@ -1279,7 +1261,7 @@ void BinTools_ShapeSet::WritePolygonOnTriangulation
 //=======================================================================
 void BinTools_ShapeSet::ReadPolygonOnTriangulation
   (Standard_IStream& IS,
-   const Handle(Message_ProgressIndicator)& theProgress)
+   const Message_ProgressRange& theRange)
 {
   char aHeader[255];
   IS >> aHeader;
@@ -1294,7 +1276,7 @@ void BinTools_ShapeSet::ReadPolygonOnTriangulation
   try
   {
     OCC_CATCH_SIGNALS
-    Message_ProgressSentry aPS(theProgress, "Reading Polygones on triangulation", 0, aNbPol, 1);
+    Message_ProgressScope aPS(theRange, "Reading Polygones on triangulation", aNbPol);
     for (Standard_Integer aPolIter = 1; aPolIter <= aNbPol && aPS.More(); ++aPolIter, aPS.Next())
     {
       Standard_Integer aNbNodes = 0;
@@ -1336,15 +1318,15 @@ void BinTools_ShapeSet::ReadPolygonOnTriangulation
 //function : WritePolygon3D
 //purpose  :
 //=======================================================================
-void BinTools_ShapeSet::WritePolygon3D(Standard_OStream& OS,
-                                       const Handle(Message_ProgressIndicator)& theProgress)const
+void BinTools_ShapeSet::WritePolygon3D (Standard_OStream& OS,
+                                        const Message_ProgressRange& theRange)const
 {
   const Standard_Integer aNbPol = myPolygons3D.Extent();
   OS << "Polygon3D " << aNbPol << "\n";
   try
   {
     OCC_CATCH_SIGNALS
-    Message_ProgressSentry aPS(theProgress, "Writing polygons 3D", 0, aNbPol, 1);
+    Message_ProgressScope aPS(theRange, "Writing polygons 3D", aNbPol);
     for (Standard_Integer aPolIter = 1; aPolIter <= aNbPol && aPS.More(); ++aPolIter, aPS.Next())
     {
       const Handle(Poly_Polygon3D)& aPoly = myPolygons3D.FindKey (aPolIter);
@@ -1386,7 +1368,7 @@ void BinTools_ShapeSet::WritePolygon3D(Standard_OStream& OS,
 //purpose  :
 //=======================================================================
 void BinTools_ShapeSet::ReadPolygon3D (Standard_IStream& IS,
-                                       const Handle(Message_ProgressIndicator)& theProgress)
+                                       const Message_ProgressRange& theRange)
 {
   char aHeader[255];
   IS >> aHeader;
@@ -1405,7 +1387,7 @@ void BinTools_ShapeSet::ReadPolygon3D (Standard_IStream& IS,
   try
   {
     OCC_CATCH_SIGNALS
-    Message_ProgressSentry aPS(theProgress, "Reading polygones 3D", 0, aNbPol, 1);
+    Message_ProgressScope aPS(theRange, "Reading polygones 3D", aNbPol);
     for (Standard_Integer aPolIter = 1; aPolIter <= aNbPol && aPS.More(); ++aPolIter, aPS.Next())
     {
       Standard_Integer aNbNodes = 0;
@@ -1452,7 +1434,7 @@ void BinTools_ShapeSet::ReadPolygon3D (Standard_IStream& IS,
 //purpose  :
 //=======================================================================
 void BinTools_ShapeSet::WriteTriangulation (Standard_OStream& OS,
-                                            const Handle(Message_ProgressIndicator)& theProgress) const
+                                            const Message_ProgressRange& theRange) const
 {
   const Standard_Integer aNbTriangulations = myTriangulations.Extent();
   OS << "Triangulations " << aNbTriangulations << "\n";
@@ -1460,7 +1442,7 @@ void BinTools_ShapeSet::WriteTriangulation (Standard_OStream& OS,
   try
   {
     OCC_CATCH_SIGNALS
-    Message_ProgressSentry aPS(theProgress, "Writing triangulation", 0, aNbTriangulations, 1);
+    Message_ProgressScope aPS(theRange, "Writing triangulation", aNbTriangulations);
     for (Standard_Integer aTriangulationIter = 1; aTriangulationIter <= aNbTriangulations && aPS.More(); ++aTriangulationIter, aPS.Next())
     {
       const Handle(Poly_Triangulation)& aTriangulation = myTriangulations.FindKey (aTriangulationIter);
@@ -1515,7 +1497,7 @@ void BinTools_ShapeSet::WriteTriangulation (Standard_OStream& OS,
 //purpose  :
 //=======================================================================
 void BinTools_ShapeSet::ReadTriangulation (Standard_IStream& IS,
-                                           const Handle(Message_ProgressIndicator)& theProgress)
+                                           const Message_ProgressRange& theRange)
 {
   char aHeader[255];
   IS >> aHeader;
@@ -1531,7 +1513,7 @@ void BinTools_ShapeSet::ReadTriangulation (Standard_IStream& IS,
   try
   {
     OCC_CATCH_SIGNALS
-    Message_ProgressSentry aPS(theProgress, "Reading triangulation", 0, aNbTriangulations, 1);
+    Message_ProgressScope aPS(theRange, "Reading triangulation", aNbTriangulations);
     for (Standard_Integer aTriangulationIter = 1; aTriangulationIter <= aNbTriangulations && aPS.More(); ++aTriangulationIter, aPS.Next())
     {
       Standard_Integer aNbNodes = 0, aNbTriangles = 0;
index 7b84da4..bbc171c 100644 (file)
@@ -101,7 +101,7 @@ public:
   //! Write the flags, the subshapes.
   Standard_EXPORT virtual void Write
     (Standard_OStream& OS,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL) const;
+     const Message_ProgressRange& theRange = Message_ProgressRange()) const;
   
   //! Reads the content of me from the binary stream  <IS>. me
   //! is first cleared.
@@ -117,7 +117,7 @@ public:
   //! Reads the flag, the subshapes.
   Standard_EXPORT virtual void Read
     (Standard_IStream& IS,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+        const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! Writes   on  <OS>   the shape   <S>.    Writes the
   //! orientation, the index of the TShape and the index
@@ -128,12 +128,12 @@ public:
   //! binary format that can be read back by Read.
   Standard_EXPORT virtual void WriteGeometry
     (Standard_OStream& OS,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL) const;
+        const Message_ProgressRange& theRange = Message_ProgressRange()) const;
   
   //! Reads the geometry of me from the  stream  <IS>.
   Standard_EXPORT virtual void ReadGeometry
     (Standard_IStream& IS,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+        const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! Reads  from <IS>  a shape  and  returns  it in  S.
   //! <NbShapes> is the number of tshapes in the set.
@@ -159,40 +159,40 @@ public:
   //! from the  stream  <IS>.
   Standard_EXPORT void ReadPolygon3D
     (Standard_IStream& IS,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+        const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! Writes the 3d polygons
   //! on the stream <OS> in a format that can
   //! be read back by Read.
   Standard_EXPORT void WritePolygon3D
     (Standard_OStream& OS,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL) const;
+        const Message_ProgressRange& theRange = Message_ProgressRange()) const;
   
   //! Reads the triangulation of me
   //! from the  stream  <IS>.
   Standard_EXPORT void ReadTriangulation
     (Standard_IStream& IS,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+        const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! Writes the triangulation
   //! on the stream <OS> in a format that can
   //! be read back by Read.
   Standard_EXPORT void WriteTriangulation
     (Standard_OStream& OS,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL) const;
+        const Message_ProgressRange& theRange = Message_ProgressRange()) const;
   
   //! Reads the polygons on triangulation of me
   //! from the  stream  <IS>.
   Standard_EXPORT void ReadPolygonOnTriangulation
     (Standard_IStream& IS,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+        const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! Writes the polygons on triangulation
   //! on the stream <OS> in a format that can
   //! be read back by Read.
   Standard_EXPORT void WritePolygonOnTriangulation
     (Standard_OStream& OS,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL) const;
+        const Message_ProgressRange& theRange = Message_ProgressRange()) const;
 
 private:
 
index 3edec2c..843b9d8 100644 (file)
@@ -42,7 +42,7 @@
 #include <TColStd_Array1OfInteger.hxx>
 #include <TColStd_Array1OfReal.hxx>
 #include <TColStd_Array2OfReal.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 
 #define PLANE           1
 #define CYLINDER        2
@@ -438,11 +438,11 @@ void BinTools_SurfaceSet::WriteSurface(const Handle(Geom_Surface)& S,
 //=======================================================================
 
 void  BinTools_SurfaceSet::Write (Standard_OStream& OS,
-                                  const Handle(Message_ProgressIndicator)& theProgress)const
+                                  const Message_ProgressRange& theRange)const
 {
 
   Standard_Integer i, nbsurf = myMap.Extent();
-  Message_ProgressSentry aPS(theProgress, "Writing surfases", 0, nbsurf, 1);
+  Message_ProgressScope aPS(theRange, "Writing surfases", nbsurf);
   OS << "Surfaces "<< nbsurf << "\n";
   for (i = 1; i <= nbsurf && aPS.More(); i++, aPS.Next()) {
     WriteSurface(Handle(Geom_Surface)::DownCast(myMap(i)),OS);
@@ -877,7 +877,7 @@ Standard_IStream& BinTools_SurfaceSet::ReadSurface(Standard_IStream& IS,
 //=======================================================================
 
 void  BinTools_SurfaceSet::Read (Standard_IStream& IS,
-                                 const Handle(Message_ProgressIndicator)& theProgress)
+                                 const Message_ProgressRange& theRange)
 {
   char buffer[255];
   IS >> buffer;
@@ -894,7 +894,7 @@ void  BinTools_SurfaceSet::Read (Standard_IStream& IS,
   Handle(Geom_Surface) S;
   Standard_Integer i, nbsurf;
   IS >> nbsurf;
-  Message_ProgressSentry aPS(theProgress, "Reading surfaces", 0, nbsurf, 1);
+  Message_ProgressScope aPS(theRange, "Reading surfaces", nbsurf);
   IS.get ();//remove <lf>
   for (i = 1; i <= nbsurf && aPS.More(); i++, aPS.Next()) {
     BinTools_SurfaceSet::ReadSurface(IS,S);
index 0fe32d9..cb2e6d5 100644 (file)
@@ -25,7 +25,7 @@
 #include <Standard_OStream.hxx>
 #include <Standard_IStream.hxx>
 
-#include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressRange.hxx>
 
 class Standard_OutOfRange;
 class Geom_Surface;
@@ -58,12 +58,12 @@ public:
   //! Writes the content of  me  on the stream <OS> in
   //! binary format that can be read back by Read.
   Standard_EXPORT void Write (Standard_OStream& OS,
-                              const Handle(Message_ProgressIndicator)& theProgress = NULL) const;
+                              const Message_ProgressRange& theRange = Message_ProgressRange()) const;
   
   //! Reads the content of me from the  stream  <IS>. me
   //! is first cleared.
   Standard_EXPORT void Read (Standard_IStream& IS,
-                             const Handle(Message_ProgressIndicator) &theProgress = NULL);
+                             const Message_ProgressRange& therange = Message_ProgressRange());
   
   //! Dumps the surface on the stream in binary
   //! format that can be read back.
index cb9f02b..2de4267 100644 (file)
@@ -33,7 +33,6 @@
 #include <Standard_NoSuchObject.hxx>
 #include <Standard_ProgramError.hxx>
 #include <UTL.hxx>
-#include <Message_ProgressSentry.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(CDF_Application,CDM_Application)
 //=======================================================================
@@ -88,10 +87,10 @@ void CDF_Application::Close(const Handle(CDM_Document)& aDocument) {
 Handle(CDM_Document) CDF_Application::Retrieve (const TCollection_ExtendedString& aFolder, 
                                                 const TCollection_ExtendedString& aName,
                                                 const Standard_Boolean UseStorageConfiguration,
-                                                const Handle(Message_ProgressIndicator)& theProgress)
+                                                const Message_ProgressRange& theRange)
 {
   TCollection_ExtendedString nullVersion;
-  return Retrieve(aFolder, aName, nullVersion, UseStorageConfiguration, theProgress);
+  return Retrieve(aFolder, aName, nullVersion, UseStorageConfiguration, theRange);
 }
 
 //=======================================================================
@@ -102,7 +101,7 @@ Handle(CDM_Document)  CDF_Application::Retrieve (const TCollection_ExtendedStrin
                                                 const TCollection_ExtendedString& aName,
                                                 const TCollection_ExtendedString& aVersion,
                                                 const Standard_Boolean UseStorageConfiguration,
-                                                const Handle(Message_ProgressIndicator)& theProgress)
+                                                const Message_ProgressRange& theRange)
 {
   Handle(CDM_MetaData) theMetaData; 
   
@@ -113,7 +112,7 @@ Handle(CDM_Document)  CDF_Application::Retrieve (const TCollection_ExtendedStrin
 
   CDF_TypeOfActivation theTypeOfActivation=TypeOfActivation(theMetaData);
   Handle(CDM_Document) theDocument = Retrieve(theMetaData, UseStorageConfiguration,
-                                              Standard_False, theProgress);
+                                              Standard_False, theRange);
 
   myDirectory->Add(theDocument);
   Activate(theDocument,theTypeOfActivation);
@@ -211,8 +210,8 @@ Standard_Boolean CDF_Application::SetDefaultFolder(const Standard_ExtString aFol
 //=======================================================================
 Handle(CDM_Document) CDF_Application::Retrieve(const Handle(CDM_MetaData)& aMetaData,
                                                const Standard_Boolean UseStorageConfiguration, 
-                                               const Handle(Message_ProgressIndicator)& theProgress) {
-  return Retrieve(aMetaData, UseStorageConfiguration, Standard_True, theProgress);
+                                               const Message_ProgressRange& theRange) {
+  return Retrieve(aMetaData, UseStorageConfiguration, Standard_True, theRange);
 } 
 
 //=======================================================================
@@ -222,7 +221,7 @@ Handle(CDM_Document) CDF_Application::Retrieve(const Handle(CDM_MetaData)& aMeta
 Handle(CDM_Document) CDF_Application::Retrieve (const Handle(CDM_MetaData)& aMetaData, 
                                                 const Standard_Boolean UseStorageConfiguration, 
                                                 const Standard_Boolean IsComponent, 
-                                                const Handle(Message_ProgressIndicator)& theProgress) {
+                                                const Message_ProgressRange& theRange) {
   
   Handle(CDM_Document) theDocumentToReturn;
   myRetrievableStatus = PCDM_RS_DriverFailure;
@@ -275,7 +274,7 @@ Handle(CDM_Document) CDF_Application::Retrieve (const Handle(CDM_MetaData)& aMet
 
     try {    
       OCC_CATCH_SIGNALS
-      theReader->Read (aMetaData->FileName(), theDocument, this, theProgress);
+      theReader->Read (aMetaData->FileName(), theDocument, this, theRange);
     } 
     catch (Standard_Failure const& anException) {
       myRetrievableStatus = theReader->GetStatus();
@@ -331,7 +330,7 @@ CDF_TypeOfActivation CDF_Application::TypeOfActivation(const Handle(CDM_MetaData
 //purpose  : 
 //=======================================================================
 Handle(CDM_Document) CDF_Application::Read (Standard_IStream& theIStream,
-                                            const Handle(Message_ProgressIndicator)& theProgress)
+                                            const Message_ProgressRange& theRange)
 {
   Handle(CDM_Document) aDoc;
   Handle(Storage_Data) dData;
@@ -369,7 +368,7 @@ Handle(CDM_Document) CDF_Application::Read (Standard_IStream& theIStream,
   try
   {
     OCC_CATCH_SIGNALS
-    aReader->Read (theIStream, dData, aDoc, this, theProgress);
+    aReader->Read (theIStream, dData, aDoc, this, theRange);
   }
   catch (Standard_Failure const& anException)
   {
index 247cfb5..f7971a1 100644 (file)
@@ -92,7 +92,7 @@ public:
     (const TCollection_ExtendedString& aFolder,
      const TCollection_ExtendedString& aName,
      const Standard_Boolean UseStorageConfiguration = Standard_True,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+     const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! This method retrieves  a  document from the database.
   //! If the  Document references other documents which have
@@ -113,7 +113,7 @@ public:
      const TCollection_ExtendedString& aName, 
      const TCollection_ExtendedString& aVersion, 
      const Standard_Boolean UseStorageConfiguration = Standard_True,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+     const Message_ProgressRange& theRange = Message_ProgressRange());
   
   Standard_EXPORT PCDM_ReaderStatus CanRetrieve (const TCollection_ExtendedString& aFolder,
                                                  const TCollection_ExtendedString& aName);
@@ -129,7 +129,7 @@ public:
   //! the stream should support SEEK fuctionality
   Standard_EXPORT Handle(CDM_Document) Read
     (Standard_IStream& theIStream,
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+     const Message_ProgressRange& theRange = Message_ProgressRange());
  
   //! Returns instance of read driver for specified format.
   //!
@@ -201,13 +201,13 @@ private:
   Standard_EXPORT Handle(CDM_Document) Retrieve
     (const Handle(CDM_MetaData)& aMetaData, 
      const Standard_Boolean UseStorageConfiguration, 
-     const Handle(Message_ProgressIndicator)& theProgress = NULL) Standard_OVERRIDE;
+     const Message_ProgressRange& theRange = Message_ProgressRange()) Standard_OVERRIDE;
   
   Standard_EXPORT Handle(CDM_Document) Retrieve
     (const Handle(CDM_MetaData)& aMetaData,
      const Standard_Boolean UseStorageConfiguration, 
      const Standard_Boolean IsComponent, 
-     const Handle(Message_ProgressIndicator)& theProgress = NULL);
+     const Message_ProgressRange& theRange = Message_ProgressRange());
   
   Standard_EXPORT Standard_Integer DocumentVersion (const Handle(CDM_MetaData)& theMetaData) Standard_OVERRIDE;
   
index 7098df5..a60285d 100644 (file)
@@ -136,12 +136,12 @@ CDF_StoreSetNameStatus CDF_Store::SetName(const Standard_ExtString aName)
   return SetName(theName);
 }
 
-void CDF_Store::Realize (const Handle(Message_ProgressIndicator)& theProgress)
+void CDF_Store::Realize (const Message_ProgressRange& theRange)
 {
   Standard_ProgramError_Raise_if(!myList->IsConsistent(),"information are missing");
   Handle(CDM_MetaData) m;
   myText = "";
-  myStatus = myList->Store(m, myText, theProgress);
+  myStatus = myList->Store(m, myText, theRange);
   if(myStatus==PCDM_SS_OK) myPath = m->Path();
 }
 Standard_ExtString CDF_Store::Path() const {
index 3476344..a19f5f2 100644 (file)
@@ -30,7 +30,7 @@
 #include <CDF_SubComponentStatus.hxx>
 #include <TCollection_HExtendedString.hxx>
 
-#include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressRange.hxx>
 
 class CDF_StoreList;
 class CDM_Document;
@@ -89,7 +89,7 @@ public:
   
   Standard_EXPORT Standard_Boolean SetPreviousVersion (const Standard_ExtString aPreviousVersion);
   
-  Standard_EXPORT void Realize (const Handle(Message_ProgressIndicator)& theProgress = NULL);
+  Standard_EXPORT void Realize (const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! returns the complete path of the created meta-data.
   Standard_EXPORT Standard_ExtString Path() const;
index ae087df..26db3dd 100644 (file)
@@ -76,7 +76,7 @@ Handle(CDM_Document) CDF_StoreList::Value() const {
 }
 PCDM_StoreStatus CDF_StoreList::Store (Handle(CDM_MetaData)& aMetaData, 
                                       TCollection_ExtendedString& aStatusAssociatedText, 
-                                      const Handle(Message_ProgressIndicator)& theProgress)
+                                      const Message_ProgressRange& theRange)
 {
   Handle(CDF_MetaDataDriver) theMetaDataDriver = Handle(CDF_Application)::DownCast((myMainDocument->Application()))->MetaDataDriver();
 
@@ -114,7 +114,7 @@ PCDM_StoreStatus CDF_StoreList::Store (Handle(CDM_MetaData)& aMetaData,
           }
           TCollection_ExtendedString theName=theMetaDataDriver->BuildFileName(theDocument);
 
-          aDocumentStorageDriver->Write(theDocument, theName, theProgress);
+          aDocumentStorageDriver->Write(theDocument, theName, theRange);
           status = aDocumentStorageDriver->GetStoreStatus();
           aMetaData = theMetaDataDriver->CreateMetaData(theDocument,theName);
           theDocument->SetMetaData(aMetaData);
index fd8d004..a695058 100644 (file)
@@ -52,7 +52,7 @@ public:
   //! order of which they had been added.
   Standard_EXPORT PCDM_StoreStatus Store (Handle(CDM_MetaData)& aMetaData, 
                                           TCollection_ExtendedString& aStatusAssociatedText,
-                                          const Handle(Message_ProgressIndicator)& theProgress = NULL);
+                                          const Message_ProgressRange& theRange = Message_ProgressRange());
   
   Standard_EXPORT void Init();
   
index f2edf63..fd6ab2f 100644 (file)
@@ -27,7 +27,7 @@
 #include <TCollection_AsciiString.hxx>
 #include <TCollection_ExtendedString.hxx>
 #include <CDM_MetaDataLookUpTable.hxx>
-#include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressRange.hxx>
 
 class CDM_Reference;
 class CDM_MetaData;
@@ -95,7 +95,7 @@ private:
   Standard_EXPORT virtual Handle(CDM_Document) Retrieve
         (const Handle(CDM_MetaData)& aMetaData, 
          const Standard_Boolean UseStorageConfiguration,
-         const Handle(Message_ProgressIndicator)& theProgress = NULL) = 0;
+         const Message_ProgressRange& theRange = Message_ProgressRange()) = 0;
   
   //! returns -1 if the metadata has no modification counter.
   Standard_EXPORT virtual Standard_Integer DocumentVersion (const Handle(CDM_MetaData)& aMetaData) = 0;
index 230bdbe..ff00a8a 100644 (file)
@@ -27,6 +27,7 @@
 #include <Draw.hxx>
 #include <Draw_Appli.hxx>
 #include <Draw_ProgressIndicator.hxx>
+#include <Message_ProgressRange.hxx>
 #include <Draw_Segment3D.hxx>
 #include <gp_Ax2.hxx>
 #include <GProp.hxx>
@@ -1340,12 +1341,8 @@ static Standard_Integer XProgress (Draw_Interpretor& di, Standard_Integer argc,
 
     TCollection_AsciiString anArgCase (argv[i]);
     anArgCase.LowerCase();
-    if (anArgCase == "-tcloutput")
-    {
-      Draw_ProgressIndicator::DefaultTclOutput() = Standard_True;
-      return 0;
-    }
-    else if ( argv[i][1] == 't' ) Draw_ProgressIndicator::DefaultTextMode() = turn;
+    if ( argv[i][1] == 't' ) Draw_ProgressIndicator::DefaultTclMode() = turn;
+    else if (argv[i][1] == 'c') Draw_ProgressIndicator::DefaultConsoleMode() = turn;
     else if ( argv[i][1] == 'g' ) Draw_ProgressIndicator::DefaultGraphMode() = turn;
     else if ( ! strcmp ( argv[i], "-stop" ) && i+1 < argc )
     {
@@ -1355,13 +1352,20 @@ static Standard_Integer XProgress (Draw_Interpretor& di, Standard_Integer argc,
       return 0;
     }
   }
-  di << "Progress Indicator defaults: text mode is ";
-  if ( Draw_ProgressIndicator::DefaultTextMode() ) {
+  di << "Progress Indicator defaults: tcl mode is ";
+  if ( Draw_ProgressIndicator::DefaultTclMode() ) {
     di<<"ON";
   } else {
     di<<"OFF";
   }
-  di<<", graphical mode is ";
+  di<<", console mode is ";
+  if (Draw_ProgressIndicator::DefaultConsoleMode()) {
+    di << "ON";
+  }
+  else {
+    di << "OFF";
+  }
+  di << ", graphical mode is ";
   if ( Draw_ProgressIndicator::DefaultGraphMode() ) {
     di<<"ON";
   } else {
@@ -1507,11 +1511,11 @@ void  DBRep::BasicCommands(Draw_Interpretor& theCommands)
   
   // Add command for DRAW-specific ProgressIndicator
   theCommands.Add ( "XProgress",
-                    "XProgress [+|-t] [+|-g] [-tclOutput]"
-                    "\n\t\t: The options are:"
-                    "\n\t\t:   +|-t, +|-g :  switch on/off textual and graphical mode of Progress Indicator"
-                    "\n\t\t:   -tclOutput :  switch on data output mode in tcl"
-                    "\n\t\t: Allows to control the output form of Progress Indicator",
+                    "XProgress [+|-t] [+|-c] [+|-g]"
+                    "\n\t\t The options are:"
+                    "\n\t\t   +|-t :  switch on/off output to tcl of Progress Indicator"
+                    "\n\t\t   +|-c :  switch on/off output to cout of Progress Indicator"
+                    "\n\t\t   +|-g :  switch on/off graphical mode of Progress Indicator",
                     XProgress,"DE: General");
 
   theCommands.Add("binsave", "binsave shape filename\n"
@@ -1585,8 +1589,9 @@ static void ssave(const Handle(Draw_Drawable3D)&d, std::ostream& OS)
   BRep_Builder B;
   BRepTools_ShapeSet S(B);
   S.Add (N->Shape());
-  S.Write (OS, Draw::GetProgressBar());
-  if(!Draw::GetProgressBar().IsNull() && Draw::GetProgressBar()->UserBreak())
+  Handle(Draw_ProgressIndicator) aProgress = Draw::GetProgressBar();
+  S.Write(OS, Message_ProgressIndicator::Start(aProgress));
+  if (! aProgress.IsNull() && aProgress->UserBreak())
     return;
   S.Write(N->Shape(),OS);
 }
@@ -1595,9 +1600,10 @@ static Handle(Draw_Drawable3D) srestore (std::istream& IS)
 {
   BRep_Builder B;
   BRepTools_ShapeSet S(B);
-  S.Read (IS, Draw::GetProgressBar());
+  Handle(Draw_ProgressIndicator) aProgress = Draw::GetProgressBar();
+  S.Read(IS, Message_ProgressIndicator::Start(aProgress));
   Handle(DBRep_DrawableShape) N;
-  if(!Draw::GetProgressBar().IsNull() && Draw::GetProgressBar()->UserBreak())
+  if (! aProgress.IsNull() && aProgress->UserBreak())
     return N;
   TopoDS_Shape theShape;
   S.Read(theShape,IS );
index ed27ac2..a60867c 100644 (file)
@@ -158,11 +158,11 @@ static Standard_Integer DDocStd_Open (Draw_Interpretor& di,
       std::ifstream aFileStream;
       OSD_OpenStream (aFileStream, path, std::ios::in | std::ios::binary);
 
-      theStatus = A->Open (aFileStream, D, aProgress);
+      theStatus = A->Open (aFileStream, D, aProgress->Start());
     }
     else
     {
-      theStatus = A->Open (path, D, aProgress);
+      theStatus = A->Open (path, D, aProgress->Start());
     }
     if (theStatus == PCDM_RS_OK && !D.IsNull())
     {
@@ -230,7 +230,7 @@ static Standard_Integer DDocStd_Save (Draw_Interpretor& di,
     }
 
     Handle(Draw_ProgressIndicator) aProgress = new Draw_ProgressIndicator(di, 1);
-    A->Save (D, aProgress);
+    A->Save (D, aProgress->Start());
     return 0; 
   }
   di << "DDocStd_Save : Error\n";
@@ -272,11 +272,11 @@ static Standard_Integer DDocStd_SaveAs (Draw_Interpretor& di,
     {
       std::ofstream aFileStream;
       OSD_OpenStream (aFileStream, path, std::ios::out | std::ios::binary);
-      theStatus = A->SaveAs (D, aFileStream, aProgress);
+      theStatus = A->SaveAs (D, aFileStream, aProgress->Start());
     }
     else
     {
-      theStatus = A->SaveAs(D,path, aProgress);
+      theStatus = A->SaveAs(D,path, aProgress->Start());
     }
 
     if (theStatus != PCDM_SS_OK ) {
index 04f098a..8dd7e5a 100644 (file)
@@ -74,7 +74,7 @@ std::filebuf Draw_Spyfile;
 
 static std::ostream spystream(&Draw_Spyfile);
 
-static Handle(Draw_ProgressIndicator) PInd = NULL;
+static Handle(Draw_ProgressIndicator) global_Progress = NULL;
 
 Standard_EXPORT Standard_Boolean Draw_Interprete(const char* command);
 // true if complete command
@@ -240,14 +240,14 @@ Draw_Interpretor& Draw::GetInterpretor()
 //function :
 //purpose  : Set/Get Progress Indicator
 //=======================================================================
-void Draw::SetProgressBar(const Handle(Draw_ProgressIndicator)& thePI)
+void Draw::SetProgressBar(const Handle(Draw_ProgressIndicator)& theProgress)
 {
-  PInd = thePI;
+  global_Progress = theProgress;
 }
 
 Handle(Draw_ProgressIndicator) Draw::GetProgressBar()
 {
-  return PInd;
+  return global_Progress;
 }
 
 #ifndef _WIN32
index 2af5196..cbf0d1f 100644 (file)
@@ -188,7 +188,7 @@ public:
   Standard_EXPORT static void Repaint();
   
   //! sets progress indicator
-  Standard_EXPORT static void SetProgressBar (const Handle(Draw_ProgressIndicator)& thePI);
+  Standard_EXPORT static void SetProgressBar (const Handle(Draw_ProgressIndicator)& theProgress);
   
   //! gets progress indicator
   Standard_EXPORT static Handle(Draw_ProgressIndicator) GetProgressBar();
index 72e6944..f473c7b 100644 (file)
 #include <Draw_ProgressIndicator.hxx>
 #include <Message.hxx>
 #include <Message_Messenger.hxx>
-#include <Message_ProgressScale.hxx>
+#include <Message_ProgressScope.hxx>
+#include <NCollection_List.hxx>
 #include <Precision.hxx>
+#include <OSD.hxx>
+#include <OSD_Exception_CTRL_BREAK.hxx>
+#include <OSD_Thread.hxx>
 
 #include <stdio.h>
 #include <time.h>
@@ -29,15 +33,16 @@ IMPLEMENT_STANDARD_RTTIEXT(Draw_ProgressIndicator,Message_ProgressIndicator)
 //purpose  : 
 //=======================================================================
 Draw_ProgressIndicator::Draw_ProgressIndicator (const Draw_Interpretor &di, Standard_Real theUpdateThreshold)
-: myTextMode ( DefaultTextMode() ),
+: myTclMode ( DefaultTclMode() ),
+  myConsoleMode ( DefaultConsoleMode() ),
   myGraphMode ( DefaultGraphMode() ),
-  myTclOutput ( DefaultTclOutput() ),
   myDraw ( (Draw_Interpretor*)&di ),
   myShown ( Standard_False ),
   myBreak ( Standard_False ),
   myUpdateThreshold ( 0.01 * theUpdateThreshold ),
   myLastPosition ( -1. ),
-  myStartTime ( 0 )
+  myStartTime ( 0 ),
+  myGuiThreadId (OSD_Thread::Current())
 {
 }
 
@@ -73,23 +78,27 @@ void Draw_ProgressIndicator::Reset()
 //purpose  : 
 //=======================================================================
 
-Standard_Boolean Draw_ProgressIndicator::Show(const Standard_Boolean force)
+void Draw_ProgressIndicator::Show (const Message_ProgressScope& theScope, const Standard_Boolean force)
 {
-  if ( ! myGraphMode && ! myTextMode )
-    return Standard_False;
+  if (!myGraphMode && !myTclMode && !myConsoleMode)
+    return;
 
   // remember time of the first call to Show as process start time
   if ( ! myStartTime )
   {
-    time_t aTimeT;
-    time ( &aTimeT );
-    myStartTime = (Standard_Size)aTimeT;
+    if (!myStartTime)
+    {
+      time_t aTimeT;
+      time(&aTimeT);
+      myStartTime = (Standard_Size)aTimeT;
+    }
   }
 
   // unless show is forced, show updated state only if at least 1% progress has been reached since the last update
   Standard_Real aPosition = GetPosition();
   if ( ! force && aPosition < 1. && Abs (aPosition - myLastPosition) < myUpdateThreshold)
-    return Standard_False; // return if update interval has not elapsed
+    return; // return if update interval has not elapsed
+
   myLastPosition = aPosition;
   
   // Prepare textual progress info
@@ -97,17 +106,19 @@ Standard_Boolean Draw_ProgressIndicator::Show(const Standard_Boolean force)
   aText.setf (std::ios::fixed, std:: ios::floatfield);
   aText.precision(0);
   aText << "Progress: " << 100. * GetPosition() << "%";
-  for ( Standard_Integer i=GetNbScopes(); i >=1; i-- ) {
-    const Message_ProgressScale &scale = GetScope ( i );
-    if ( scale.GetName().IsNull() ) continue; // skip unnamed scopes
-    aText << " " << scale.GetName()->ToCString() << ": ";
+  NCollection_List<const Message_ProgressScope*> aScopes;
+  for (const Message_ProgressScope* aPS = &theScope; aPS; aPS = aPS->Parent())
+    aScopes.Prepend(aPS);
+  for (NCollection_List<const Message_ProgressScope*>::Iterator it(aScopes); it.More(); it.Next())
+  {
+    const Message_ProgressScope* aPS = it.Value();
+    if (!aPS->Name()) continue; // skip unnamed scopes
+    aText << " " << aPS->Name() << ": ";
 
-    // if scope has subscopes, print end of subscope as it s current position
-    Standard_Real locPos = ( (i >1 && GetPosition()!=0) ? GetScope ( i-1 ).GetLast() : GetPosition() );
     // print progress info differently for finite and infinite scopes
-    if ( scale.GetInfinite() )
+    Standard_Real aVal = aPS->Value();
+    if (aPS->IsInfinite())
     {
-      Standard_Real aVal = scale.BaseToLocal(locPos);
       if (Precision::IsInfinite(aVal))
       {
         aText << "finished";
@@ -119,13 +130,14 @@ Standard_Boolean Draw_ProgressIndicator::Show(const Standard_Boolean force)
     }
     else
     {
-      aText << scale.BaseToLocal ( locPos ) << " / " << scale.GetMax();
+      aText << aVal << " / " << aPS->MaxValue();
     }
   }
 
-  // Show graphic progress bar
-  if ( myGraphMode ) {
-
+  // Show graphic progress bar.
+  // It will be updated only within GUI thread.
+  if (myGraphMode && myGuiThreadId == OSD_Thread::Current())
+  {
     // In addition, write elapsed/estimated/remaining time
     if ( GetPosition() > 0.01 ) { 
       time_t aTimeT;
@@ -153,25 +165,21 @@ Standard_Boolean Draw_ProgressIndicator::Show(const Standard_Boolean force)
     aCommand.setf(std::ios::fixed, std::ios::floatfield);
     aCommand.precision(0);
     aCommand << ".xprogress.bar coords progress 2 2 " << (1 + 400 * GetPosition()) << " 21;";
-    aCommand << ".xprogress.bar coords progress_next 2 2 " << (1 + 400 * GetScope(1).GetLast()) << " 21;";
+    aCommand << ".xprogress.bar coords progress_next 2 2 " << (1 + 400 * theScope.GetPortion()) << " 21;";
     aCommand << ".xprogress.text configure -text \"" << aText.str() << "\";";
     aCommand << "update";
     myDraw->Eval (aCommand.str().c_str());
   }
 
   // Print textual progress info
-  if (myTextMode)
+  if (myTclMode && myDraw)
   {
-    if (myTclOutput && myDraw)
-    {
-      *myDraw << aText.str().c_str() << "\n";
-    }
-    else
-    {
-      std::cout << aText.str().c_str() << "\n";
-    }
+    *myDraw << aText.str().c_str() << "\n";
+  }
+  if (myConsoleMode)
+  {
+    std::cout << aText.str().c_str() << "\n";
   }
-  return Standard_True;
 }
 
 //=======================================================================
@@ -181,32 +189,65 @@ Standard_Boolean Draw_ProgressIndicator::Show(const Standard_Boolean force)
 
 Standard_Boolean Draw_ProgressIndicator::UserBreak()
 {
-  if ( StopIndicator() == this ) {
+  if ( StopIndicator() == this )
+  {
 //    std::cout << "Progress Indicator - User Break: " << StopIndicator() << ", " << (void*)this << std::endl;
     myBreak = Standard_True;
     myDraw->Eval ( "XProgress -stop 0" );
   }
+  else
+  {
+    // treatment of Ctrl-Break signal
+    try
+    {
+      OSD::ControlBreak();
+    }
+    catch (OSD_Exception_CTRL_BREAK)
+    {
+      myBreak = Standard_True;
+    }
+  }
   return myBreak;
 }
        
 //=======================================================================
-//function : SetTextMode
-//purpose  : Sets text output mode (on/off)
+//function : SetTclMode
+//purpose  : Sets Tcl output mode (on/off)
 //=======================================================================
 
-void Draw_ProgressIndicator::SetTextMode(const Standard_Boolean theTextMode)
+void Draw_ProgressIndicator::SetTclMode(const Standard_Boolean theTclMode)
 {
-  myTextMode = theTextMode;
+  myTclMode = theTclMode;
 }
 
 //=======================================================================
-//function : GetTextMode
-//purpose  : Returns text output mode (on/off)
+//function : GetTclMode
+//purpose  : Returns Tcl output mode (on/off)
 //=======================================================================
 
-Standard_Boolean Draw_ProgressIndicator::GetTextMode() const
+Standard_Boolean Draw_ProgressIndicator::GetTclMode() const
 {
-  return myTextMode;
+  return myTclMode;
+}
+
+//=======================================================================
+//function : SetConsoleMode
+//purpose  : Sets Console output mode (on/off)
+//=======================================================================
+
+void Draw_ProgressIndicator::SetConsoleMode(const Standard_Boolean theMode)
+{
+  myConsoleMode = theMode;
+}
+
+//=======================================================================
+//function : GetConsoleMode
+//purpose  : Returns Console output mode (on/off)
+//=======================================================================
+
+Standard_Boolean Draw_ProgressIndicator::GetConsoleMode() const
+{
+  return myConsoleMode;
 }
 
 //=======================================================================
@@ -230,36 +271,36 @@ Standard_Boolean Draw_ProgressIndicator::GetGraphMode() const
 }
 
 //=======================================================================
-//function : DefaultTextMode
+//function : DefaultTclMode
 //purpose  : 
 //=======================================================================
 
-Standard_Boolean &Draw_ProgressIndicator::DefaultTextMode()
+Standard_Boolean &Draw_ProgressIndicator::DefaultTclMode()
 {
-  static Standard_Boolean defTextMode = Standard_False;
-  return defTextMode;
+  static Standard_Boolean defTclMode = Standard_False;
+  return defTclMode;
 }
 
 //=======================================================================
-//function : DefaultGraphMode
+//function : DefaultConsoleMode
 //purpose  : 
 //=======================================================================
 
-Standard_Boolean &Draw_ProgressIndicator::DefaultGraphMode()
+Standard_Boolean &Draw_ProgressIndicator::DefaultConsoleMode()
 {
-  static Standard_Boolean defGraphMode = Standard_False;
-  return defGraphMode;
+  static Standard_Boolean defConsoleMode = Standard_False;
+  return defConsoleMode;
 }
 
 //=======================================================================
-//function : DefaultTclOutput
-//purpose  :
+//function : DefaultGraphMode
+//purpose  : 
 //=======================================================================
 
-Standard_Boolean &Draw_ProgressIndicator::DefaultTclOutput()
+Standard_Boolean &Draw_ProgressIndicator::DefaultGraphMode()
 {
-  static Standard_Boolean defTclOutput = Standard_False;
-  return defTclOutput;
+  static Standard_Boolean defGraphMode = Standard_False;
+  return defGraphMode;
 }
 
 //=======================================================================
index 0bfcfdb..393701f 100644 (file)
@@ -43,41 +43,44 @@ public:
   //! Destructor; calls Reset()
   Standard_EXPORT ~Draw_ProgressIndicator();
   
-  //! Sets text output mode (on/off)
-  Standard_EXPORT void SetTextMode (const Standard_Boolean theTextMode);
-  
-  //! Gets text output mode (on/off)
-  Standard_EXPORT Standard_Boolean GetTextMode() const;
+  //! Sets tcl output mode (on/off).
+  Standard_EXPORT void SetTclMode (const Standard_Boolean theTclMode);
   
+  //! Gets tcl output mode (on/off). 
+  Standard_EXPORT Standard_Boolean GetTclMode() const;
+
+  //! Sets console output mode (on/off).
+  //! If it is on then progress is shown in the standard output.
+  Standard_EXPORT void SetConsoleMode(const Standard_Boolean theMode);
+
+  //! Gets console output mode (on/off)
+  Standard_EXPORT Standard_Boolean GetConsoleMode() const;
+
   //! Sets graphical output mode (on/off)
   Standard_EXPORT void SetGraphMode (const Standard_Boolean theGraphMode);
   
   //! Gets graphical output mode (on/off)
   Standard_EXPORT Standard_Boolean GetGraphMode() const;
 
-  //! Sets tcl output mode (on/off)
-  void SetTclOutput (const Standard_Boolean theTclOutput) { myTclOutput = theTclOutput; }
-
-  //! Gets tcl output mode (on/off)
-  Standard_Boolean GetTclOutput() const { return myTclOutput; }
-
   //! Clears/erases opened TCL windows if any
   //! and sets myBreak to False
   Standard_EXPORT virtual void Reset() Standard_OVERRIDE;
   
   //! Defines method Show of Progress Indicator
-  Standard_EXPORT virtual Standard_Boolean Show (const Standard_Boolean force = Standard_True) Standard_OVERRIDE;
+  Standard_EXPORT virtual void Show (const Message_ProgressScope& theScope, 
+                                     const Standard_Boolean force = Standard_True) Standard_OVERRIDE;
   
   //! Redefines method UserBreak of Progress Indicator
   Standard_EXPORT virtual Standard_Boolean UserBreak() Standard_OVERRIDE;
   
-  Standard_EXPORT static Standard_Boolean& DefaultTextMode();
-  
-  //! Get/Set default values for output modes
-  Standard_EXPORT static Standard_Boolean& DefaultGraphMode();
+  //! Get/Set default value for tcl mode
+  Standard_EXPORT static Standard_Boolean& DefaultTclMode();
 
-  //! Get/Set default values for tcl output mode
-  Standard_EXPORT static Standard_Boolean& DefaultTclOutput();
+  //! Get/Set default value for console mode
+  Standard_EXPORT static Standard_Boolean& DefaultConsoleMode();
+
+  //! Get/Set default value for graph mode
+  Standard_EXPORT static Standard_Boolean& DefaultGraphMode();
 
   //! Internal method for implementation of UserBreak mechanism;
   //! note that it uses static variable and thus not thread-safe! 
@@ -86,15 +89,16 @@ public:
   DEFINE_STANDARD_RTTIEXT(Draw_ProgressIndicator,Message_ProgressIndicator)
 
 private:
-  Standard_Boolean myTextMode;
+  Standard_Boolean myTclMode;
+  Standard_Boolean myConsoleMode;
   Standard_Boolean myGraphMode;
-  Standard_Boolean myTclOutput;
   Draw_Interpretor* myDraw;
   Standard_Boolean myShown;
   Standard_Boolean myBreak;
   Standard_Real myUpdateThreshold;
   Standard_Real myLastPosition;
   Standard_Size myStartTime;
+  Standard_ThreadId myGuiThreadId;
 };
 
 #endif // _Draw_ProgressIndicator_HeaderFile
index 9b50b2c..21c0aff 100644 (file)
@@ -157,9 +157,6 @@ static Standard_Integer save(Draw_Interpretor& di, Standard_Integer n, const cha
     // find a tool
     Draw_SaveAndRestore* tool = Draw_First;
     Handle(Draw_ProgressIndicator) progress = new Draw_ProgressIndicator ( di, 1 );
-    progress->SetScale ( 0, 100, 1 );
-    progress->NewScope(100,"Writing");
-    progress->Show();
 
     while (tool) {
       if (tool->Test(D)) break;
@@ -176,8 +173,6 @@ static Standard_Integer save(Draw_Interpretor& di, Standard_Integer n, const cha
       return 1;
     }
     Draw::SetProgressBar( 0 );
-    progress->EndScope();
-    progress->Show();
   }
   
   os << "0\n\n";
@@ -222,8 +217,7 @@ static Standard_Integer restore(Draw_Interpretor& di, Standard_Integer n, const
   if (!in.fail()) {
     // search a tool
     Handle(Draw_ProgressIndicator) progress = new Draw_ProgressIndicator ( di, 1 );
-    progress->NewScope(100,"Reading");
-    progress->Show();
+    Draw::SetProgressBar(progress);
 
     Draw_SaveAndRestore* tool = Draw_First;
     Draw_SaveAndRestore* aDBRepTool = NULL;
@@ -232,7 +226,6 @@ static Standard_Integer restore(Draw_Interpretor& di, Standard_Integer n, const
       if (!strcmp(typ,toolName)) break;
       if (!strcmp("DBRep_DrawableShape",toolName))
         aDBRepTool = tool;
-      Draw::SetProgressBar(progress);
       tool = tool->Next();
     }
 
@@ -254,8 +247,6 @@ static Standard_Integer restore(Draw_Interpretor& di, Standard_Integer n, const
       return 1;
     }
     Draw::SetProgressBar( 0 );
-    progress->EndScope();
-    progress->Show();
   }
   
   di << name;
index 507db23..75a3f5c 100644 (file)
@@ -66,7 +66,7 @@
 #include <TColgp_SequenceOfVec.hxx>
 #include <TColStd_HArray1OfReal.hxx>
 #include <TColStd_SequenceOfInteger.hxx>
-#include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressScope.hxx>
 
 #include <stdio.h>
 
@@ -448,7 +448,7 @@ void GeomPlate_BuildPlateSurface::
 // Function : Perform
 // Calculates the surface filled with loaded constraints
 //---------------------------------------------------------
-void GeomPlate_BuildPlateSurface::Perform(const Handle(Message_ProgressIndicator) & aProgress)
+void GeomPlate_BuildPlateSurface::Perform(const Message_ProgressRange& theProgress)
 { 
 #ifdef OCCT_DEBUG
   // Timing
@@ -479,8 +479,13 @@ void GeomPlate_BuildPlateSurface::Perform(const Handle(Message_ProgressIndicator
   //======================================================================   
   // Initial Surface 
   //======================================================================
+  Message_ProgressScope aPS(theProgress, NULL, 100, Standard_True);
   if (!mySurfInitIsGive)
-    ComputeSurfInit(aProgress);
+  {
+    ComputeSurfInit (aPS.Next(10));
+    if (aPS.UserBreak())
+      return;
+  }
 
   else {
    if (NTLinCont>=2)
@@ -651,9 +656,9 @@ void GeomPlate_BuildPlateSurface::Perform(const Handle(Message_ProgressIndicator
          // Construction of the surface
          //====================================================================
 
-         myPlate.SolveTI(myDegree, ComputeAnisotropie(), aProgress);
+         myPlate.SolveTI(myDegree, ComputeAnisotropie(), aPS.Next(90));
 
-         if (!aProgress.IsNull() && aProgress->UserBreak())
+         if (aPS.UserBreak())
          {
            return;
          }
@@ -690,9 +695,9 @@ void GeomPlate_BuildPlateSurface::Perform(const Handle(Message_ProgressIndicator
          //====================================================================
          //Construction of the surface
          //====================================================================
-         myPlate.SolveTI(myDegree, ComputeAnisotropie(), aProgress);
+         myPlate.SolveTI(myDegree, ComputeAnisotropie(), aPS.Next(90));
 
-         if (!aProgress.IsNull() && aProgress->UserBreak())
+         if (aPS.UserBreak())
          {
            return;
          }
@@ -1358,7 +1363,7 @@ Standard_Boolean GeomPlate_BuildPlateSurface::
 // there are point constraints.
 //-------------------------------------------------------------------------
 
-void GeomPlate_BuildPlateSurface::ComputeSurfInit(const Handle(Message_ProgressIndicator) & aProgress)
+void GeomPlate_BuildPlateSurface::ComputeSurfInit(const Message_ProgressRange& theProgress)
 {
   Standard_Integer nopt=2, popt=2, Np=1;
   Standard_Boolean isHalfSpace = Standard_True;
@@ -1723,8 +1728,8 @@ void GeomPlate_BuildPlateSurface::ComputeSurfInit(const Handle(Message_ProgressI
       //====================================================================
       // Construction of the surface
       //====================================================================
-      myPlate.SolveTI(2, ComputeAnisotropie(), aProgress);
-      if (!aProgress.IsNull() && aProgress->UserBreak())
+      myPlate.SolveTI(2, ComputeAnisotropie(), theProgress);
+      if (theProgress.UserBreak())
       {
           return;
       }
index 4f7288d..67a0cc5 100644 (file)
@@ -46,7 +46,6 @@ class gp_Pnt;
 class Geom2d_Curve;
 class Adaptor3d_HCurve;
 class Adaptor2d_HCurve2d;
-class Message_ProgressIndicator;
 
 
 
@@ -131,7 +130,7 @@ public:
   //! Exceptions
   //! Standard_RangeError if the value of the constraint is
   //! null or if plate is not done.
-  Standard_EXPORT void Perform(const Handle(Message_ProgressIndicator) & aProgress = Handle(Message_ProgressIndicator)());
+  Standard_EXPORT void Perform(const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! returns the CurveConstraints of order order
   Standard_EXPORT Handle(GeomPlate_CurveConstraint) CurveConstraint (const Standard_Integer order) const;
@@ -218,7 +217,7 @@ private:
   
   Standard_EXPORT Handle(Adaptor2d_HCurve2d) ProjectedCurve (Handle(Adaptor3d_HCurve)& Curv);
   
-  Standard_EXPORT void ComputeSurfInit(const Handle(Message_ProgressIndicator) & aProgress);
+  Standard_EXPORT void ComputeSurfInit(const Message_ProgressRange& theProgress);
   
   Standard_EXPORT void Intersect (Handle(GeomPlate_HArray1OfSequenceOfReal)& PntInter, Handle(GeomPlate_HArray1OfSequenceOfReal)& PntG1G1);
   
index 9486d67..d83bd20 100644 (file)
@@ -33,8 +33,7 @@
 #include <gp_Hypr2d.hxx>
 #include <gp_Lin2d.hxx>
 #include <gp_Parab2d.hxx>
-#include <Message_ProgressIndicator.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 #include <Standard_ErrorHandler.hxx>
 #include <Standard_Failure.hxx>
 #include <Standard_OutOfRange.hxx>
@@ -496,16 +495,14 @@ void  GeomTools_Curve2dSet::Dump(Standard_OStream& OS)const
 //purpose  : 
 //=======================================================================
 
-void  GeomTools_Curve2dSet::Write (Standard_OStream& OS,
-                                   const Handle(Message_ProgressIndicator) &theProgress)const
+void  GeomTools_Curve2dSet::Write(Standard_OStream& OS, const Message_ProgressRange& theProgress)const
 {
   std::streamsize prec = OS.precision(17);
 
   Standard_Integer i, nbsurf = myMap.Extent();
   OS << "Curve2ds "<< nbsurf << "\n";
-  //OCC19559
-  Message_ProgressSentry PS(theProgress, "2D Curves", 0, nbsurf, 1);
-  for (i = 1; i <= nbsurf && PS.More(); i++, PS.Next()) {
+  Message_ProgressScope aPS(theProgress, "2D Curves", nbsurf);
+  for (i = 1; i <= nbsurf && aPS.More(); i++, aPS.Next()) {
     PrintCurve2d(Handle(Geom2d_Curve)::DownCast(myMap(i)),OS,Standard_True);
   }
   OS.precision(prec);
@@ -840,8 +837,7 @@ Handle(Geom2d_Curve) GeomTools_Curve2dSet::ReadCurve2d(Standard_IStream& IS)
 //purpose  : 
 //=======================================================================
 
-void  GeomTools_Curve2dSet::Read (Standard_IStream& IS,
-                                  const Handle(Message_ProgressIndicator) &theProgress)
+void  GeomTools_Curve2dSet::Read(Standard_IStream& IS, const Message_ProgressRange& theProgress)
 {
   char buffer[255];
   IS >> buffer;
@@ -852,9 +848,8 @@ void  GeomTools_Curve2dSet::Read (Standard_IStream& IS,
 
   Standard_Integer i, nbcurve;
   IS >> nbcurve;
-  //OCC19559
-  Message_ProgressSentry PS(theProgress, "2D Curves", 0, nbcurve, 1);
-  for (i = 1; i <= nbcurve && PS.More(); i++, PS.Next()) {
+  Message_ProgressScope aPS(theProgress, "2D Curves", nbcurve);
+  for (i = 1; i <= nbcurve && aPS.More(); i++, aPS.Next()) {
     Handle(Geom2d_Curve) C = GeomTools_Curve2dSet::ReadCurve2d (IS);
     myMap.Add(C);
   }
index 730317c..0fb0ede 100644 (file)
@@ -26,7 +26,8 @@
 #include <Standard_OStream.hxx>
 #include <Standard_IStream.hxx>
 #include <Standard_Boolean.hxx>
-class Message_ProgressIndicator;
+#include <Message_ProgressRange.hxx>
+
 class Standard_OutOfRange;
 class Geom2d_Curve;
 
@@ -61,12 +62,12 @@ public:
   //! Writes the content of  me  on the stream <OS> in a
   //! format that can be read back by Read.
   Standard_EXPORT void Write (Standard_OStream& OS,
-                              const Handle(Message_ProgressIndicator) &theProgress = NULL) const;
+                              const Message_ProgressRange& theProgress = Message_ProgressRange()) const;
   
   //! Reads the content of me from the  stream  <IS>. me
   //! is first cleared.
   Standard_EXPORT void Read (Standard_IStream& IS,
-                             const Handle(Message_ProgressIndicator) &theProgress = NULL);
+                             const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Dumps the curve on the stream,  if compact is True
   //! use the compact format that can be read back.
index 90cbbd7..0a32f59 100644 (file)
@@ -33,8 +33,7 @@
 #include <gp_Hypr.hxx>
 #include <gp_Lin.hxx>
 #include <gp_Parab.hxx>
-#include <Message_ProgressIndicator.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 #include <Standard_ErrorHandler.hxx>
 #include <Standard_Failure.hxx>
 #include <Standard_OutOfRange.hxx>
@@ -513,16 +512,14 @@ void  GeomTools_CurveSet::Dump(Standard_OStream& OS)const
 //purpose  : 
 //=======================================================================
 
-void  GeomTools_CurveSet::Write (Standard_OStream& OS,
-                                 const Handle(Message_ProgressIndicator)& theProgress)const
+void  GeomTools_CurveSet::Write(Standard_OStream& OS, const Message_ProgressRange& theProgress)const
 {
   std::streamsize  prec = OS.precision(17);
 
   Standard_Integer i, nbcurve = myMap.Extent();
   OS << "Curves "<< nbcurve << "\n";
-    //OCC19559
-  Message_ProgressSentry PS(theProgress, "3D Curves", 0, nbcurve, 1);
-  for (i = 1; i <= nbcurve && PS.More(); i++, PS.Next()) {
+  Message_ProgressScope aPS(theProgress, "3D Curves", nbcurve);
+  for (i = 1; i <= nbcurve && aPS.More(); i++, aPS.Next()) {
     PrintCurve(Handle(Geom_Curve)::DownCast(myMap(i)),OS,Standard_True);
   }
   OS.precision(prec);
@@ -861,8 +858,7 @@ Handle(Geom_Curve) GeomTools_CurveSet::ReadCurve (Standard_IStream& IS)
 //purpose  : 
 //=======================================================================
 
-void  GeomTools_CurveSet::Read (Standard_IStream& IS,
-                                const Handle(Message_ProgressIndicator)& theProgress)
+void  GeomTools_CurveSet::Read(Standard_IStream& IS, const Message_ProgressRange& theProgress)
 {
   char buffer[255];
   IS >> buffer;
@@ -873,9 +869,8 @@ void  GeomTools_CurveSet::Read (Standard_IStream& IS,
 
   Standard_Integer i, nbcurve;
   IS >> nbcurve;
-  //OCC19559
-  Message_ProgressSentry PS(theProgress, "3D Curves", 0, nbcurve, 1);
-  for (i = 1; i <= nbcurve && PS.More(); i++, PS.Next()) {
+  Message_ProgressScope aPS(theProgress, "3D Curves", nbcurve);
+  for (i = 1; i <= nbcurve && aPS.More(); i++, aPS.Next()) {
     Handle(Geom_Curve) C = GeomTools_CurveSet::ReadCurve (IS);
     myMap.Add(C);
   }
index 7474294..ff881d3 100644 (file)
@@ -26,7 +26,8 @@
 #include <Standard_OStream.hxx>
 #include <Standard_IStream.hxx>
 #include <Standard_Boolean.hxx>
-class Message_ProgressIndicator;
+#include <Message_ProgressRange.hxx>
+
 class Standard_OutOfRange;
 class Geom_Curve;
 
@@ -61,12 +62,12 @@ public:
   //! Writes the content of  me  on the stream <OS> in a
   //! format that can be read back by Read.
   Standard_EXPORT void Write (Standard_OStream& OS,
-                              const Handle(Message_ProgressIndicator)& theProgress = NULL) const;
+                              const Message_ProgressRange& theProgress = Message_ProgressRange()) const;
   
   //! Reads the content of me from the  stream  <IS>. me
   //! is first cleared.
   Standard_EXPORT void Read (Standard_IStream& IS,
-                             const Handle(Message_ProgressIndicator)& theProgress = NULL);
+                             const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Dumps the curve on the stream,  if compact is True
   //! use the compact format that can be read back.
index bb7d2ae..03dadb6 100644 (file)
@@ -36,8 +36,7 @@
 #include <gp_Pln.hxx>
 #include <gp_Sphere.hxx>
 #include <gp_Torus.hxx>
-#include <Message_ProgressIndicator.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 #include <Standard_ErrorHandler.hxx>
 #include <Standard_Failure.hxx>
 #include <Standard_OutOfRange.hxx>
@@ -633,16 +632,14 @@ void  GeomTools_SurfaceSet::Dump(Standard_OStream& OS)const
 //purpose  : 
 //=======================================================================
 
-void  GeomTools_SurfaceSet::Write (Standard_OStream& OS,
-                                   const Handle(Message_ProgressIndicator)& theProgress)const
+void  GeomTools_SurfaceSet::Write(Standard_OStream& OS, const Message_ProgressRange& theProgress)const
 {
   std::streamsize  prec = OS.precision(17);
 
   Standard_Integer i, nbsurf = myMap.Extent();
   OS << "Surfaces "<< nbsurf << "\n";
-  //OCC19559
-  Message_ProgressSentry PS(theProgress, "Surfaces", 0, nbsurf, 1);
-  for (i = 1; i <= nbsurf && PS.More(); i++, PS.Next()) {
+  Message_ProgressScope aPS(theProgress, "Surfaces", nbsurf);
+  for (i = 1; i <= nbsurf && aPS.More(); i++, aPS.Next()) {
     PrintSurface(Handle(Geom_Surface)::DownCast(myMap(i)),OS,Standard_True);
   }
   OS.precision(prec);
@@ -1052,8 +1049,7 @@ Handle(Geom_Surface) GeomTools_SurfaceSet::ReadSurface (Standard_IStream& IS)
 //purpose  : 
 //=======================================================================
 
-void  GeomTools_SurfaceSet::Read (Standard_IStream& IS,
-                                  const Handle(Message_ProgressIndicator)& theProgress)
+void  GeomTools_SurfaceSet::Read(Standard_IStream& IS, const Message_ProgressRange& theProgress)
 {
   char buffer[255];
   IS >> buffer;
@@ -1064,9 +1060,8 @@ void  GeomTools_SurfaceSet::Read (Standard_IStream& IS,
 
   Standard_Integer i, nbsurf;
   IS >> nbsurf;
-  //OCC19559
-  Message_ProgressSentry PS(theProgress, "Surfaces", 0, nbsurf, 1);
-  for (i = 1; i <= nbsurf && PS.More(); i++, PS.Next()) {
+  Message_ProgressScope aPS(theProgress, "Surfaces", nbsurf);
+  for (i = 1; i <= nbsurf && aPS.More(); i++, aPS.Next()) {
     Handle(Geom_Surface) S = GeomTools_SurfaceSet::ReadSurface (IS);
     myMap.Add(S);
   }
index 4877427..1276687 100644 (file)
@@ -26,7 +26,8 @@
 #include <Standard_OStream.hxx>
 #include <Standard_IStream.hxx>
 #include <Standard_Boolean.hxx>
-class Message_ProgressIndicator;
+#include <Message_ProgressRange.hxx>
+
 class Standard_OutOfRange;
 class Geom_Surface;
 
@@ -61,12 +62,12 @@ public:
   //! Writes the content of  me  on the stream <OS> in a
   //! format that can be read back by Read.
   Standard_EXPORT void Write (Standard_OStream& OS,
-                              const Handle(Message_ProgressIndicator)& theProgress = NULL) const;
+                              const Message_ProgressRange& theProgress = Message_ProgressRange()) const;
   
   //! Reads the content of me from the  stream  <IS>. me
   //! is first cleared.
   Standard_EXPORT void Read (Standard_IStream& IS,
-                             const Handle(Message_ProgressIndicator)& theProgress = NULL);
+                             const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Dumps the surface on the stream,  if compact is True
   //! use the compact format that can be read back.
index 4d2e796..86e71e6 100644 (file)
@@ -45,8 +45,8 @@
 #include <XSControl_WorkSession.hxx>
 
 //=======================================================================
-//function : Transfer
-//purpose  : basic working method
+//function : checkColorRange
+//purpose  : 
 //=======================================================================
 static void checkColorRange (Standard_Real& theCol)
 {
@@ -143,7 +143,12 @@ static void AddCompositeShape (const Handle(XCAFDoc_ShapeTool)& theSTool,
   return;
 }
 
-Standard_Boolean IGESCAFControl_Reader::Transfer (Handle(TDocStd_Document) &doc)
+//=======================================================================
+//function : Transfer
+//purpose  : basic working method
+//=======================================================================
+Standard_Boolean IGESCAFControl_Reader::Transfer (Handle(TDocStd_Document) &doc,
+                                                  const Message_ProgressRange& theProgress)
 {
   // read all shapes
   Standard_Integer num;// = NbRootsForTransfer();
@@ -152,7 +157,7 @@ Standard_Boolean IGESCAFControl_Reader::Transfer (Handle(TDocStd_Document) &doc)
   //  TransferOneRoot ( i );
   //}
   
-  TransferRoots(); // replaces the above
+  TransferRoots(theProgress); // replaces the above
   num = NbShapes();
   if ( num <=0 ) return Standard_False;
 
@@ -334,8 +339,9 @@ Standard_Boolean IGESCAFControl_Reader::Transfer (Handle(TDocStd_Document) &doc)
 //=======================================================================
 
 Standard_Boolean IGESCAFControl_Reader::Perform (const Standard_CString filename,
-                                                Handle(TDocStd_Document) &doc)
+                                                 Handle(TDocStd_Document) &doc,
+                                                 const Message_ProgressRange& theProgress)
 {
   if ( ReadFile ( filename ) != IFSelect_RetDone ) return Standard_False;
-  return Transfer ( doc );
+  return Transfer ( doc, theProgress );
 }
index a155e7b..e7fbb97 100644 (file)
@@ -68,14 +68,19 @@ class IGESCAFControl_Reader  : public IGESControl_Reader
   
   //! Translates currently loaded IGES file into the document
   //! Returns True if succeeded, and False in case of fail
-  Standard_EXPORT Standard_Boolean Transfer (Handle(TDocStd_Document)& theDoc);
+  Standard_EXPORT Standard_Boolean Transfer (Handle(TDocStd_Document)& theDoc,
+                                             const Message_ProgressRange& theProgress = Message_ProgressRange());
   
-  Standard_Boolean Perform (const TCollection_AsciiString& theFileName, Handle(TDocStd_Document)& theDoc)
-  { return Perform (theFileName.ToCString(), theDoc); }
+  Standard_Boolean Perform (const TCollection_AsciiString& theFileName,
+                            Handle(TDocStd_Document)& theDoc,
+                            const Message_ProgressRange& theProgress = Message_ProgressRange())
+  { return Perform (theFileName.ToCString(), theDoc, theProgress); }
   
   //! Translate IGES file given by filename into the document
   //! Return True if succeeded, and False in case of fail
-  Standard_EXPORT Standard_Boolean Perform (const Standard_CString theFileName, Handle(TDocStd_Document)& theDoc);
+  Standard_EXPORT Standard_Boolean Perform (const Standard_CString theFileName,
+                                            Handle(TDocStd_Document)& theDoc,
+                                            const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Set ColorMode for indicate read Colors or not.
   void SetColorMode (const Standard_Boolean theMode)
index fdca8f6..e8a4963 100644 (file)
@@ -22,6 +22,7 @@
 #include <IGESGraph_DefinitionLevel.hxx>
 #include <IGESSolid_Face.hxx>
 #include <IGESBasic_Name.hxx>
+#include <Message_ProgressScope.hxx>
 #include <NCollection_DataMap.hxx>
 #include <Standard_Transient.hxx>
 #include <TCollection_AsciiString.hxx>
@@ -142,7 +143,8 @@ IGESCAFControl_Writer::IGESCAFControl_Writer (const Handle(XSControl_WorkSession
 //purpose  : 
 //=======================================================================
 
-Standard_Boolean IGESCAFControl_Writer::Transfer (const Handle(TDocStd_Document) &doc)
+Standard_Boolean IGESCAFControl_Writer::Transfer (const Handle(TDocStd_Document) &doc,
+                                                  const Message_ProgressRange& theProgress)
 {  
   // translate free top-level shapes of the DECAF document
   Handle(XCAFDoc_ShapeTool) STool = XCAFDoc_DocumentTool::ShapeTool( doc->Main() );
@@ -150,7 +152,7 @@ Standard_Boolean IGESCAFControl_Writer::Transfer (const Handle(TDocStd_Document)
 
   TDF_LabelSequence labels;
   STool->GetFreeShapes ( labels );
-  return Transfer (labels);
+  return Transfer (labels, theProgress);
 }  
 
 //=======================================================================
@@ -158,11 +160,12 @@ Standard_Boolean IGESCAFControl_Writer::Transfer (const Handle(TDocStd_Document)
 //purpose  : 
 //=======================================================================
 
-Standard_Boolean IGESCAFControl_Writer::Transfer (const TDF_Label& label)
+Standard_Boolean IGESCAFControl_Writer::Transfer (const TDF_Label& label,
+                                                  const Message_ProgressRange& theProgress)
 {
   TDF_LabelSequence labels;
   labels.Append( label );
-  return Transfer( labels );
+  return Transfer( labels, theProgress );
 }
 
 //=======================================================================
@@ -170,13 +173,16 @@ Standard_Boolean IGESCAFControl_Writer::Transfer (const TDF_Label& label)
 //purpose  : 
 //=======================================================================
 
-Standard_Boolean IGESCAFControl_Writer::Transfer (const TDF_LabelSequence& labels)
+Standard_Boolean IGESCAFControl_Writer::Transfer (const TDF_LabelSequence& labels,
+                                                  const Message_ProgressRange& theProgress)
 {  
   if ( labels.Length() <=0 ) return Standard_False;
-  for ( Standard_Integer i=1; i <= labels.Length(); i++ ) {
+  Message_ProgressScope aPS(theProgress, "Labels", labels.Length());
+  for ( Standard_Integer i=1; i <= labels.Length() && aPS.More(); i++ )
+  {
     TopoDS_Shape shape = XCAFDoc_ShapeTool::GetShape ( labels.Value(i) );
     if ( ! shape.IsNull() ) 
-      AddShape ( shape );
+      AddShape (shape, aPS.Next());
 //      IGESControl_Writer::Transfer ( shape );
   }
   
@@ -205,9 +211,10 @@ Standard_Boolean IGESCAFControl_Writer::Transfer (const TDF_LabelSequence& label
 //=======================================================================
 
 Standard_Boolean IGESCAFControl_Writer::Perform (const Handle(TDocStd_Document) &doc,
-                                                const Standard_CString filename)
+                                                 const Standard_CString filename,
+                                                 const Message_ProgressRange& theProgress)
 {
-  if ( ! Transfer ( doc ) ) return Standard_False;
+  if ( ! Transfer ( doc, theProgress ) ) return Standard_False;
   return Write ( filename ) == IFSelect_RetDone;
 }
   
@@ -217,9 +224,10 @@ Standard_Boolean IGESCAFControl_Writer::Perform (const Handle(TDocStd_Document)
 //=======================================================================
 
 Standard_Boolean IGESCAFControl_Writer::Perform (const Handle(TDocStd_Document) &doc,
-                                                const TCollection_AsciiString &filename)
+                                                 const TCollection_AsciiString &filename,
+                                                 const Message_ProgressRange& theProgress)
 {
-  if ( ! Transfer ( doc ) ) return Standard_False;
+  if ( ! Transfer ( doc, theProgress ) ) return Standard_False;
   return Write ( filename.ToCString() ) == IFSelect_RetDone;
 }
   
index a8cdeb9..24a953d 100644 (file)
@@ -69,21 +69,28 @@ public:
   
   //! Transfers a document to a IGES model
   //! Returns True if translation is OK
-  Standard_EXPORT Standard_Boolean Transfer (const Handle(TDocStd_Document)& doc);
+  Standard_EXPORT Standard_Boolean Transfer (const Handle(TDocStd_Document)& doc,
+                                             const Message_ProgressRange& theProgress = Message_ProgressRange());
 
   //! Transfers labels to a IGES model
   //! Returns True if translation is OK
-  Standard_EXPORT Standard_Boolean Transfer (const TDF_LabelSequence& labels);
+  Standard_EXPORT Standard_Boolean Transfer (const TDF_LabelSequence& labels,
+                                             const Message_ProgressRange& theProgress = Message_ProgressRange());
 
   //! Transfers label to a IGES model
   //! Returns True if translation is OK
-  Standard_EXPORT Standard_Boolean Transfer (const TDF_Label& label);
+  Standard_EXPORT Standard_Boolean Transfer (const TDF_Label& label,
+                                             const Message_ProgressRange& theProgress = Message_ProgressRange());
 
-  Standard_EXPORT Standard_Boolean Perform (const Handle(TDocStd_Document)& doc, const TCollection_AsciiString& filename);
+  Standard_EXPORT Standard_Boolean Perform (const Handle(TDocStd_Document)& doc,
+                                            const TCollection_AsciiString& filename,
+                                            const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Transfers a document and writes it to a IGES file
   //! Returns True if translation is OK
-  Standard_EXPORT Standard_Boolean Perform (const Handle(TDocStd_Document)& doc, const Standard_CString filename);
+  Standard_EXPORT Standard_Boolean Perform (const Handle(TDocStd_Document)& doc,
+                                            const Standard_CString filename,
+                                            const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Set ColorMode for indicate write Colors or not.
   Standard_EXPORT void SetColorMode (const Standard_Boolean colormode);
index 4708b06..836803c 100644 (file)
@@ -54,7 +54,8 @@ Standard_Boolean  IGESControl_ActorWrite::Recognize
 
 Handle(Transfer_Binder)  IGESControl_ActorWrite::Transfer
   (const Handle(Transfer_Finder)& start,
-   const Handle(Transfer_FinderProcess)& FP)
+   const Handle(Transfer_FinderProcess)& FP,
+   const Message_ProgressRange& theProgress)
 {
   XSAlgo::AlgoContainer()->PrepareForTransfer();
     
@@ -74,14 +75,14 @@ Handle(Transfer_Binder)  IGESControl_ActorWrite::Transfer
     shape = XSAlgo::AlgoContainer()->ProcessShape( shape, Tol, maxTol, 
                                                    "write.iges.resource.name", 
                                                    "write.iges.sequence", info,
-                                                   FP->GetProgress() );
+                                                   theProgress );
 //  modified by NIZHNY-EAP Tue Aug 29 11:17:01 2000 ___END___
 
     BRepToIGES_BREntity   BR0; BR0.SetModel(modl);  BR0.SetTransferProcess(FP);
     BRepToIGESBRep_Entity BR1; BR1.SetModel(modl);  BR1.SetTransferProcess(FP);
 
-    if (themodetrans == 0) ent = BR0.TransferShape(shape);
-    if (themodetrans == 1) ent = BR1.TransferShape(shape);
+    if (themodetrans == 0) ent = BR0.TransferShape(shape, theProgress);
+    if (themodetrans == 1) ent = BR1.TransferShape(shape, theProgress);
 //  modified by NIZHNY-EAP Tue Aug 29 11:37:18 2000 ___BEGIN___
     XSAlgo::AlgoContainer()->MergeTransferInfo(FP, info);
 //  modified by NIZHNY-EAP Tue Aug 29 11:37:25 2000 ___END___
index cabe728..e6a17a8 100644 (file)
@@ -46,7 +46,10 @@ public:
   //!
   //! ModeTrans may be : 0 -> groups of Faces
   //! or 1 -> BRep
-  Standard_EXPORT virtual Handle(Transfer_Binder) Transfer (const Handle(Transfer_Finder)& start, const Handle(Transfer_FinderProcess)& FP) Standard_OVERRIDE;
+  Standard_EXPORT virtual Handle(Transfer_Binder) Transfer
+                   (const Handle(Transfer_Finder)& start,
+                    const Handle(Transfer_FinderProcess)& FP,
+                    const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
 
 
 
index e9a04f2..633bd37 100644 (file)
@@ -344,9 +344,10 @@ Handle(Transfer_ActorOfTransientProcess) IGESControl_Controller::ActorRead (cons
 IFSelect_ReturnStatus IGESControl_Controller::TransferWriteShape (const TopoDS_Shape& shape,
                                                                   const Handle(Transfer_FinderProcess)& FP,
                                                                   const Handle(Interface_InterfaceModel)& model,
-                                                                  const Standard_Integer modetrans) const
+                                                                  const Standard_Integer modetrans,
+                                                                  const Message_ProgressRange& theProgress) const
 {
-  return XSControl_Controller::TransferWriteShape (shape,FP,model,modetrans);
+  return XSControl_Controller::TransferWriteShape(shape, FP, model, modetrans, theProgress);
 }
 
 //=======================================================================
index 7a84729..89b9b70 100644 (file)
@@ -62,7 +62,12 @@ public:
   //! -2 bad model (requires an IGESModel)
   //! modeshape : 0  groupe of face (version < 5.1)
   //! 1  BREP-version 5.1 of IGES
-  Standard_EXPORT virtual IFSelect_ReturnStatus TransferWriteShape (const TopoDS_Shape& shape, const Handle(Transfer_FinderProcess)& FP, const Handle(Interface_InterfaceModel)& model, const Standard_Integer modetrans = 0) const Standard_OVERRIDE;
+  Standard_EXPORT virtual IFSelect_ReturnStatus TransferWriteShape
+                   (const TopoDS_Shape& shape,
+                    const Handle(Transfer_FinderProcess)& FP,
+                    const Handle(Interface_InterfaceModel)& model,
+                    const Standard_Integer modetrans = 0,
+                    const Message_ProgressRange& theProgress = Message_ProgressRange()) const Standard_OVERRIDE;
   
   //! Standard Initialisation. It creates a Controller for IGES and
   //! records it to various names, available to select it later
index 8c07d4f..3d4913a 100644 (file)
@@ -37,7 +37,7 @@
 #include <IGESSelect_WorkLibrary.hxx>
 #include <Interface_Macros.hxx>
 #include <Interface_Static.hxx>
-#include <Message_ProgressIndicator.hxx>
+#include <Message_ProgressScope.hxx>
 #include <OSD_OpenFile.hxx>
 #include <ShapeAnalysis_ShapeTolerance.hxx>
 #include <Standard_Stream.hxx>
@@ -82,21 +82,14 @@ IGESControl_Writer::IGESControl_Writer
        myEditor (model,IGESSelect_WorkLibrary::DefineProtocol()) ,
        myWriteMode (modecr) , myIsComputed (Standard_False)     {  }
 
-Standard_Boolean IGESControl_Writer::AddShape (const TopoDS_Shape& theShape)
+Standard_Boolean IGESControl_Writer::AddShape (const TopoDS_Shape& theShape,
+                                               const Message_ProgressRange& theProgress)
 {
   if (theShape.IsNull()) return Standard_False;
   
-  // for progress indication
-  Handle(Message_ProgressIndicator) progress = myTP->GetProgress();
-  if ( ! progress.IsNull() ) { 
-    Standard_Integer nbfaces=0;
-    for( TopExp_Explorer exp(theShape,TopAbs_FACE); exp.More(); exp.Next() )
-      nbfaces++;
-    progress->SetScale ( "Faces", 0, nbfaces, 1 );
-  }
-  
   XSAlgo::AlgoContainer()->PrepareForTransfer();
   
+  Message_ProgressScope aPS(theProgress, NULL, 2);
   //  modified by NIZHNY-EAP Tue Aug 29 11:16:54 2000 ___BEGIN___
   Handle(Standard_Transient) info;
   Standard_Real Tol = Interface_Static::RVal("write.precision.val");
@@ -104,11 +97,17 @@ Standard_Boolean IGESControl_Writer::AddShape (const TopoDS_Shape& theShape)
   TopoDS_Shape Shape = XSAlgo::AlgoContainer()->ProcessShape( theShape, Tol, maxTol, 
                                                               "write.iges.resource.name", 
                                                               "write.iges.sequence", info,
-                                                              progress );
+                                                              aPS.Next());
+  if (!aPS.More())
+    return Standard_False;
+
   //  modified by NIZHNY-EAP Tue Aug 29 11:17:01 2000 ___END___
   BRepToIGES_BREntity   B0;  B0.SetTransferProcess(myTP); B0.SetModel(myModel);
   BRepToIGESBRep_Entity B1;  B1.SetTransferProcess(myTP); B1.SetModel(myModel);
-  Handle(IGESData_IGESEntity) ent = myWriteMode? B1.TransferShape(Shape) : B0.TransferShape(Shape);
+  Handle(IGESData_IGESEntity) ent = myWriteMode?
+    B1.TransferShape (Shape, aPS.Next()) : B0.TransferShape(Shape, aPS.Next());
+  if (!aPS.More())
+    return Standard_False;
 
   if(ent.IsNull())
     return Standard_False;
index b8aa67d..5f74b96 100644 (file)
@@ -26,6 +26,8 @@
 #include <Standard_Boolean.hxx>
 #include <Standard_CString.hxx>
 #include <Standard_OStream.hxx>
+#include <Message_ProgressRange.hxx>
+
 class Transfer_FinderProcess;
 class IGESData_IGESModel;
 class TopoDS_Shape;
@@ -85,7 +87,8 @@ public:
   
   //! Translates a Shape to IGES Entities and adds them to the model
   //! Returns True if done, False if Shape not suitable for IGES or null
-  Standard_EXPORT Standard_Boolean AddShape (const TopoDS_Shape& sh);
+  Standard_EXPORT Standard_Boolean AddShape (const TopoDS_Shape& sh,
+                                             const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Translates a Geometry (Surface or Curve) to IGES Entities and
   //! adds them to the model
index 620cb00..79b0de7 100644 (file)
@@ -22,7 +22,7 @@
 #include <Interface_InterfaceModel.hxx>
 #include <Interface_Macros.hxx>
 #include <Interface_Static.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 #include <ShapeExtend_Explorer.hxx>
 #include <ShapeFix_ShapeTolerance.hxx>
 #include <Standard_ErrorHandler.hxx>
@@ -141,7 +141,8 @@ static void TrimTolerances (const TopoDS_Shape& shape,
 //purpose  : 
 //=======================================================================
 Handle(Transfer_Binder) IGESToBRep_Actor::Transfer
-(const Handle(Standard_Transient)& start, const Handle(Transfer_TransientProcess)& TP)
+(const Handle(Standard_Transient)& start, const Handle(Transfer_TransientProcess)& TP,
+ const Message_ProgressRange& theProgress)
 {
   DeclareAndCast(IGESData_IGESModel,mymodel,themodel);
   DeclareAndCast(IGESData_IGESEntity,ent,start);
@@ -162,7 +163,7 @@ Handle(Transfer_Binder) IGESToBRep_Actor::Transfer
       (typnum == 408) || (typnum == 308)) {
 
     // Start progress scope (no need to check if progress exists -- it is safe)
-    Message_ProgressSentry aPSentry(TP->GetProgress(), "Transfer stage", 0, 2, 1);
+    Message_ProgressScope aPS(theProgress, "Transfer stage", 2);
 
     XSAlgo::AlgoContainer()->PrepareForTransfer();
     IGESToBRep_CurveAndSurface CAS;
@@ -189,22 +190,19 @@ Handle(Transfer_Binder) IGESToBRep_Actor::Transfer
     {
       try {
         OCC_CATCH_SIGNALS
-       shape = CAS.TransferGeometry(ent);
+        shape = CAS.TransferGeometry(ent, aPS.Next());
       }
       catch(Standard_Failure const&) {
        shape.Nullify();
       }
     }
-
-    // Switch to fix stage.
-    aPSentry.Next();
     
     // fixing shape
     Handle(Standard_Transient) info;
     shape = XSAlgo::AlgoContainer()->ProcessShape( shape, theeps, CAS.GetMaxTol(), 
                                                    "read.iges.resource.name", 
                                                    "read.iges.sequence", info,
-                                                   TP->GetProgress() );
+                                                   aPS.Next());
     XSAlgo::AlgoContainer()->MergeTransferInfo(TP, info, nbTPitems);
   }
 
index d2c4d6d..2ad39d0 100644 (file)
 #include <Standard_Real.hxx>
 #include <Transfer_ActorOfTransientProcess.hxx>
 #include <Standard_Boolean.hxx>
+#include <Message_ProgressRange.hxx>
+
 class Interface_InterfaceModel;
 class Standard_Transient;
 class Transfer_Binder;
 class Transfer_TransientProcess;
 
-
 class IGESToBRep_Actor;
 DEFINE_STANDARD_HANDLE(IGESToBRep_Actor, Transfer_ActorOfTransientProcess)
 
@@ -58,7 +59,10 @@ public:
   
   Standard_EXPORT virtual Standard_Boolean Recognize (const Handle(Standard_Transient)& start) Standard_OVERRIDE;
   
-  Standard_EXPORT virtual Handle(Transfer_Binder) Transfer (const Handle(Standard_Transient)& start, const Handle(Transfer_TransientProcess)& TP) Standard_OVERRIDE;
+  Standard_EXPORT virtual Handle(Transfer_Binder) Transfer
+                   (const Handle(Standard_Transient)& start,
+                    const Handle(Transfer_TransientProcess)& TP,
+                    const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
   
   //! Returns the tolerance which was actually used, either from
   //! the file or from statics
index 22b45f6..da5128e 100644 (file)
@@ -59,7 +59,7 @@
 #include <IGESToBRep_TopoSurface.hxx>
 #include <Interface_Macros.hxx>
 #include <Message_Msg.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 #include <Precision.hxx>
 #include <ShapeBuild_Edge.hxx>
 #include <ShapeExtend_WireData.hxx>
@@ -128,7 +128,8 @@ IGESToBRep_BRepEntity::IGESToBRep_BRepEntity
 //purpose  : 
 //=======================================================================
 TopoDS_Shape IGESToBRep_BRepEntity::TransferBRepEntity
-  (const Handle(IGESData_IGESEntity)& start)
+  (const Handle(IGESData_IGESEntity)& start,
+   const Message_ProgressRange& theProgress)
 {
   TopoDS_Shape res;
 
@@ -138,11 +139,11 @@ TopoDS_Shape IGESToBRep_BRepEntity::TransferBRepEntity
   }
   else if (start->IsKind(STANDARD_TYPE(IGESSolid_Shell))) {
     DeclareAndCast(IGESSolid_Shell, st514, start);
-    res = TransferShell(st514);
+    res = TransferShell(st514, theProgress);
   }
   else if (start->IsKind(STANDARD_TYPE(IGESSolid_ManifoldSolid))) {
     DeclareAndCast(IGESSolid_ManifoldSolid, st186, start);
-    res = TransferManifoldSolid(st186);
+    res = TransferManifoldSolid(st186, theProgress);
   }
   else {
     Message_Msg Msg1005("IGES_1005");
@@ -531,7 +532,8 @@ TopoDS_Shape IGESToBRep_BRepEntity::TransferFace
 //purpose  : 
 //=======================================================================
 TopoDS_Shape IGESToBRep_BRepEntity::TransferShell
-  (const Handle(IGESSolid_Shell)& start)
+  (const Handle(IGESSolid_Shell)& start,
+   const Message_ProgressRange& theProgress)
 {
   TopoDS_Shape res;
 
@@ -542,13 +544,8 @@ TopoDS_Shape IGESToBRep_BRepEntity::TransferShell
     Standard_Integer nbfaces = start->NbFaces();
     if (nbfaces != 0) {
       Standard_Boolean closed = Standard_True; //:39
-      Handle(Message_ProgressIndicator) progress = GetTransferProcess()->GetProgress();
-      if ( ! progress.IsNull() ) progress->SetScale ( "Face", 0, nbfaces, 1 );
-      for (Standard_Integer iface = 1; iface <= nbfaces; iface++) {
-        if ( ! progress.IsNull() ) { 
-          progress->Increment(); 
-          if ( progress->UserBreak() ) break; 
-        }
+      Message_ProgressScope aPS(theProgress, "Face", nbfaces);
+      for (Standard_Integer iface = 1; iface <= nbfaces && aPS.More(); iface++, aPS.Next()) {
        Handle(IGESSolid_Face) face = start->Face(iface);
        Standard_Boolean orientation = start->Orientation(iface);
        TopoDS_Shape Sh = TransferFace(face);
@@ -595,7 +592,8 @@ TopoDS_Shape IGESToBRep_BRepEntity::TransferShell
 //purpose  : 
 //=======================================================================
 TopoDS_Shape IGESToBRep_BRepEntity::TransferManifoldSolid
-  (const Handle(IGESSolid_ManifoldSolid)& start)
+  (const Handle(IGESSolid_ManifoldSolid)& start,
+   const Message_ProgressRange& theProgress)
 {
   TopoDS_Shape res;
 
@@ -606,7 +604,7 @@ TopoDS_Shape IGESToBRep_BRepEntity::TransferManifoldSolid
     Handle(IGESSolid_Shell) shell = start->Shell();
     Standard_Boolean isoriented   = start->OrientationFlag();
     Standard_Integer nbshell      = start->NbVoidShells();
-    TopoDS_Shape Sh = TransferShell(shell);
+    TopoDS_Shape Sh = TransferShell(shell, theProgress);
     if (!Sh.IsNull()) {
       if (Sh.ShapeType() == TopAbs_SHELL) {
        TopoDS_Shell Shell = TopoDS::Shell(Sh);
@@ -616,11 +614,11 @@ TopoDS_Shape IGESToBRep_BRepEntity::TransferManifoldSolid
 
       if (nbshell != 0) {
         // progress scope without name, since usually we have single shell in solid
-        Message_ProgressSentry PS ( GetTransferProcess()->GetProgress(), 0, 0, nbshell, 1 );
-       for (Standard_Integer ishell=1; ishell<= nbshell && PS.More(); ishell++, PS.Next()) {
+        Message_ProgressScope aPS (theProgress, NULL, nbshell);
+       for (Standard_Integer ishell=1; ishell<= nbshell && aPS.More(); ishell++) {
          Handle(IGESSolid_Shell) voidshell= start->VoidShell(ishell);
 //       Standard_Boolean orientation = start->VoidOrientationFlag(ishell);
-         TopoDS_Shape aSh = TransferShell(voidshell);
+         TopoDS_Shape aSh = TransferShell (voidshell, aPS.Next());
          if (!aSh.IsNull()) {
            if (aSh.ShapeType() == TopAbs_SHELL) {
              TopoDS_Shell Shell = TopoDS::Shell(aSh);
index 93ac124..3ddc784 100644 (file)
@@ -25,6 +25,8 @@
 #include <Standard_Real.hxx>
 #include <Standard_Boolean.hxx>
 #include <Standard_Integer.hxx>
+#include <Message_ProgressRange.hxx>
+
 class IGESToBRep_CurveAndSurface;
 class TopoDS_Shape;
 class IGESData_IGESEntity;
@@ -63,7 +65,8 @@ public:
   Standard_EXPORT IGESToBRep_BRepEntity(const Standard_Real eps, const Standard_Real epsGeom, const Standard_Real epsCoeff, const Standard_Boolean mode, const Standard_Boolean modeapprox, const Standard_Boolean optimized);
   
   //! Transfer the BRepEntity" : Face, Shell or ManifoldSolid.
-  Standard_EXPORT TopoDS_Shape TransferBRepEntity (const Handle(IGESData_IGESEntity)& start);
+  Standard_EXPORT TopoDS_Shape TransferBRepEntity (const Handle(IGESData_IGESEntity)& start,
+                                                   const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Transfer the entity number "index" of the VertexList "start"
   Standard_EXPORT TopoDS_Vertex TransferVertex (const Handle(IGESSolid_VertexList)& start, const Standard_Integer index);
@@ -78,10 +81,12 @@ public:
   Standard_EXPORT TopoDS_Shape TransferFace (const Handle(IGESSolid_Face)& start);
   
   //! Transfer the Shell Entity
-  Standard_EXPORT TopoDS_Shape TransferShell (const Handle(IGESSolid_Shell)& start);
+  Standard_EXPORT TopoDS_Shape TransferShell (const Handle(IGESSolid_Shell)& start,
+                                              const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Transfer the ManifoldSolid Entity
-  Standard_EXPORT TopoDS_Shape TransferManifoldSolid (const Handle(IGESSolid_ManifoldSolid)& start);
+  Standard_EXPORT TopoDS_Shape TransferManifoldSolid (const Handle(IGESSolid_ManifoldSolid)& start,
+                                                      const Message_ProgressRange& theProgress = Message_ProgressRange());
 
 
 
index b73e14f..8ed684f 100644 (file)
@@ -39,7 +39,7 @@
 #include <Interface_Static.hxx>
 #include <Message_Messenger.hxx>
 #include <Message_Msg.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 #include <Precision.hxx>
 #include <Standard_ErrorHandler.hxx>
 #include <Standard_Failure.hxx>
@@ -178,7 +178,8 @@ void IGESToBRep_CurveAndSurface::SetModel(const Handle(IGESData_IGESModel)& mode
 //=======================================================================
 
 TopoDS_Shape IGESToBRep_CurveAndSurface::TransferCurveAndSurface
-       (const Handle(IGESData_IGESEntity)& start)
+       (const Handle(IGESData_IGESEntity)& start,
+        const Message_ProgressRange& theProgress)
 {
   TopoDS_Shape res;
   if (start.IsNull()) {
@@ -199,7 +200,7 @@ TopoDS_Shape IGESToBRep_CurveAndSurface::TransferCurveAndSurface
   }
   else if (IGESToBRep::IsBRepEntity(start)) {
     IGESToBRep_BRepEntity TS(*this);
-    res = TS.TransferBRepEntity(start);
+    res = TS.TransferBRepEntity(start, theProgress);
   }
   else {
     Message_Msg msg1015("IGES_1015");
@@ -231,7 +232,8 @@ TopoDS_Shape IGESToBRep_CurveAndSurface::TransferCurveAndSurface
 //=======================================================================
 
 TopoDS_Shape IGESToBRep_CurveAndSurface::TransferGeometry
-                               (const Handle(IGESData_IGESEntity)& start)
+                               (const Handle(IGESData_IGESEntity)& start,
+                                const Message_ProgressRange& theProgress)
 {
   // Declaration of messages// 
   // DCE 22/12/98
@@ -263,7 +265,7 @@ TopoDS_Shape IGESToBRep_CurveAndSurface::TransferGeometry
       return res;
     try {
       OCC_CATCH_SIGNALS
-        res = TransferCurveAndSurface(start);
+        res = TransferCurveAndSurface(start, theProgress);
     }
     catch(Standard_Failure const&) {
       Message_Msg msg1015("IGES_1015");
@@ -295,7 +297,7 @@ TopoDS_Shape IGESToBRep_CurveAndSurface::TransferGeometry
       else {
        try {
          OCC_CATCH_SIGNALS
-         res = TransferGeometry(stsub);
+         res = TransferGeometry(stsub, theProgress);
        }
     catch(Standard_Failure const&) {
          res.Nullify();
@@ -319,8 +321,10 @@ TopoDS_Shape IGESToBRep_CurveAndSurface::TransferGeometry
       SendFail( st308, msg210);
       return res;
     }
-    Message_ProgressSentry PS ( myTP->GetProgress(), "Subfigure item", 0, st308->NbEntities(), 1 );
-    for (Standard_Integer i=1; i <= st308->NbEntities() && PS.More(); i++, PS.Next()) {
+    Message_ProgressScope PS (theProgress, "Subfigure item", st308->NbEntities());
+    for (Standard_Integer i=1; i <= st308->NbEntities() && PS.More(); i++)
+    {
+      Message_ProgressRange aRange = PS.Next();
       TopoDS_Shape item;
       if (st308->AssociatedEntity(i).IsNull()) {
        Message_Msg msg1020("IGES_1020");
@@ -338,7 +342,7 @@ TopoDS_Shape IGESToBRep_CurveAndSurface::TransferGeometry
       else {
        try {      
          OCC_CATCH_SIGNALS
-         item = TransferGeometry(st308->AssociatedEntity(i));
+         item = TransferGeometry (st308->AssociatedEntity(i), aRange);
        }
     catch(Standard_Failure const&) {
          item.Nullify();
@@ -372,9 +376,11 @@ TopoDS_Shape IGESToBRep_CurveAndSurface::TransferGeometry
       SendFail(st402f1, msg202);
       return res;
     }
-    Message_ProgressSentry PS ( myTP->GetProgress(), "Group item", 0, st402f1->NbEntities(), 1 );
+    Message_ProgressScope PS (theProgress, "Group item", st402f1->NbEntities());
     Standard_Boolean ProblemInGroup = Standard_False;
-    for (Standard_Integer i=1; i <= st402f1->NbEntities() && PS.More(); i++, PS.Next()) {
+    for (Standard_Integer i=1; i <= st402f1->NbEntities() && PS.More(); i++)
+    {
+      Message_ProgressRange aRange = PS.Next();
       TopoDS_Shape item;
       if (st402f1->Entity(i).IsNull()) {
        Message_Msg msg1020("IGES_1020");
@@ -392,7 +398,7 @@ TopoDS_Shape IGESToBRep_CurveAndSurface::TransferGeometry
       else {
        try {
          OCC_CATCH_SIGNALS
-         item = TransferGeometry(st402f1->Entity(i));
+         item = TransferGeometry (st402f1->Entity(i), aRange);
        }
     catch(Standard_Failure const&) {
          item.Nullify();
@@ -435,9 +441,11 @@ TopoDS_Shape IGESToBRep_CurveAndSurface::TransferGeometry
       SendFail(st402f7, msg202); 
       return res;
     }
-    Message_ProgressSentry PS ( myTP->GetProgress(), "Group item", 0, st402f7->NbEntities(), 1 );
+    Message_ProgressScope PS (theProgress, "Group item", st402f7->NbEntities());
     Standard_Boolean ProblemInGroup = Standard_False;
-    for (Standard_Integer i=1; i <= st402f7->NbEntities() && PS.More(); i++, PS.Next()) {
+    for (Standard_Integer i=1; i <= st402f7->NbEntities() && PS.More(); i++)
+    {
+      Message_ProgressRange aRange = PS.Next();
       TopoDS_Shape item;
       if (st402f7->Entity(i).IsNull()) {
        Message_Msg msg1020("IGES_1020");
@@ -455,7 +463,7 @@ TopoDS_Shape IGESToBRep_CurveAndSurface::TransferGeometry
       else {
        try {
          OCC_CATCH_SIGNALS
-         item = TransferGeometry(st402f7->Entity(i));
+         item = TransferGeometry (st402f7->Entity(i), aRange);
        }
     catch(Standard_Failure const&) {
          item.Nullify();
index 3d46fef..7d5db96 100644 (file)
@@ -24,6 +24,8 @@
 #include <Standard_Real.hxx>
 #include <Standard_Boolean.hxx>
 #include <Standard_Integer.hxx>
+#include <Message_ProgressRange.hxx>
+
 class Geom_Surface;
 class IGESData_IGESModel;
 class Transfer_TransientProcess;
@@ -31,7 +33,6 @@ class TopoDS_Shape;
 class IGESData_IGESEntity;
 class Message_Msg;
 
-
 //! Provides methods to transfer CurveAndSurface from IGES to CASCADE.
 class IGESToBRep_CurveAndSurface 
 {
@@ -142,12 +143,14 @@ public:
   //! Returns the result of the transfert of any IGES Curve
   //! or Surface Entity.  If  the transfer has  failed,  this
   //! member return a NullEntity.
-  Standard_EXPORT TopoDS_Shape TransferCurveAndSurface (const Handle(IGESData_IGESEntity)& start);
+  Standard_EXPORT TopoDS_Shape TransferCurveAndSurface (const Handle(IGESData_IGESEntity)& start,
+                                                        const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Returns the result of the transfert the geometry of
   //! any IGESEntity.  If  the transfer has  failed,  this
   //! member return a NullEntity.
-  Standard_EXPORT TopoDS_Shape TransferGeometry (const Handle(IGESData_IGESEntity)& start);
+  Standard_EXPORT TopoDS_Shape TransferGeometry (const Handle(IGESData_IGESEntity)& start,
+                                                 const Message_ProgressRange& theProgress = Message_ProgressRange());
   
   //! Records a new Fail message
     void SendFail (const Handle(IGESData_IGESEntity)& start, const Message_Msg& amsg);
index c2863d5..d0a50d1 100644 (file)
@@ -40,7 +40,7 @@
 #include <Interface_Static.hxx>
 #include <Message_Messenger.hxx>
 #include <Message_Msg.hxx>
-#include <Message_ProgressSentry.hxx>
+#include <Message_ProgressScope.hxx>
 #include <OSD_Timer.hxx>
 #include <ShapeAlgo.hxx>
 #include <ShapeAlgo_AlgoContainer.hxx>
@@ -368,7 +368,8 @@ static void TrimTolerances (const TopoDS_Shape& shape,
 //function : TransferRoots
 //purpose  : Transfers all Roots Entities
 //=======================================================================
-void  IGESToBRep_Reader::TransferRoots (const Standard_Boolean onlyvisible)
+void  IGESToBRep_Reader::TransferRoots (const Standard_Boolean onlyvisible,
+                                        const Message_ProgressRange& theProgress)
 {
   if (theModel.IsNull() || theProc.IsNull()) return;
 
@@ -417,8 +418,10 @@ void  IGESToBRep_Reader::TransferRoots (const Standard_Boolean onlyvisible)
   // sln 11.06.2002 OCC448
   Interface_Static::SetIVal("read.iges.onlyvisible",onlyvisible);
   
-  Message_ProgressSentry PS ( theProc->GetProgress(), "Root", 0, nb, 1 );
-  for (Standard_Integer i = 1; i <= nb && PS.More(); i++, PS.Next()) {
+  Message_ProgressScope PS (theProgress, "Root", nb);
+  for (Standard_Integer i = 1; i <= nb && PS.More(); i++)
+  {
+    Message_ProgressRange aRange = PS.Next();
     Handle(IGESData_IGESEntity) ent = theModel->Entity(i);
     if ( SH.IsShared(ent) || ! theActor->Recognize (ent) ) continue;
     if (level > 0) {
@@ -433,7 +436,7 @@ void  IGESToBRep_Reader::TransferRoots (const Sta