]> OCCT Git - occt.git/commitdiff
0033799: Data Exchange - Shape Healing interface update
authorichesnok <ichesnok@opencascade.com>
Fri, 16 Aug 2024 09:45:07 +0000 (10:45 +0100)
committerichesnok <ichesnok@opencascade.com>
Thu, 19 Sep 2024 11:45:23 +0000 (12:45 +0100)
ProcessShape() function contents were moved to XSAlgo_AlgoProcessShape class.

src/DE/DE_ShapeFixParameters.hxx
src/TKXSBase/EXTERNLIB
src/XSAlgo/FILES
src/XSAlgo/XSAlgo_AlgoContainer.cxx
src/XSAlgo/XSAlgo_AlgoContainer.hxx
src/XSAlgo/XSAlgo_AlgoProcessShape.cxx [new file with mode: 0644]
src/XSAlgo/XSAlgo_AlgoProcessShape.hxx [new file with mode: 0644]

index 98c0dfd52cec7b0a780f36e1653d0f7379e9142c..5d61a8a867bc197f853deb20965d339169002831 100644 (file)
@@ -21,11 +21,11 @@ struct DE_ShapeFixParameters
   enum class FixMode : char
   {
     FixOrNot = -1, //!< Procedure will be executed or not (depending on the situation)
-    NotFix = 0,    //!< Procedure will be executed
-    Fix = 1        //!< Procedure will be executed anyway
+    NotFix   = 0,  //!< Procedure will be executed
+    Fix      = 1   //!< Procedure will be executed anyway
   };
 
-  double Tolerance3d = 1.e-6;
+  double Tolerance3d = 1.e-3;
   double MaxTolerance3d = 1.0;
   double MinTolerance3d = 1.e-7;
   FixMode FixFreeShellMode = FixMode::FixOrNot;
index 69976d2ca0f7d704ee91d7f054031f5eb3aad897..cbf5e5188372608d7dc030f50d767b92538ae441 100755 (executable)
@@ -1,3 +1,4 @@
+TKDE
 TKBRep
 TKernel
 TKMath
index 9e535d2da900915a6bc4f349456b6c6fb1d073ed..8b63dda4ee9e3d5cf6621b3849429afb56e380ef 100644 (file)
@@ -3,6 +3,8 @@ XSAlgo.hxx
 XSAlgo_AlgoContainer.cxx
 XSAlgo_AlgoContainer.hxx
 XSAlgo_AlgoContainer.lxx
+XSAlgo_AlgoProcessShape.cxx
+XSAlgo_AlgoProcessShape.hxx
 XSAlgo_Caller.hxx
 XSAlgo_ToolContainer.cxx
 XSAlgo_ToolContainer.hxx
index d329d85a01335944c4e974b784cadcfee04acd4c..dfc20b26cb5822631c59bfd6772d37e9496c90cc 100644 (file)
@@ -56,6 +56,7 @@
 #include <TransferBRep_ShapeMapper.hxx>
 #include <UnitsMethods.hxx>
 #include <XSAlgo_AlgoContainer.hxx>
+#include <XSAlgo_AlgoProcessShape.hxx>
 #include <XSAlgo_ToolContainer.hxx>
 #include <TopExp_Explorer.hxx>
 
@@ -66,6 +67,7 @@ IMPLEMENT_STANDARD_RTTIEXT(XSAlgo_AlgoContainer,Standard_Transient)
 //purpose  : 
 //=======================================================================
 XSAlgo_AlgoContainer::XSAlgo_AlgoContainer()
+  : myDEHealingParamsUsage(false)
 {
   myTC = new XSAlgo_ToolContainer;
 }
@@ -100,88 +102,21 @@ TopoDS_Shape XSAlgo_AlgoContainer::ProcessShape(const TopoDS_Shape& theShape,
     return theShape;
   }
 
-  Handle(ShapeProcess_ShapeContext) aContext = Handle(ShapeProcess_ShapeContext)::DownCast(theInfo);
-  if (aContext.IsNull())
-  {
-    Standard_CString aRscfile = Interface_Static::CVal(thePrscfile);
-    aContext = new ShapeProcess_ShapeContext(theShape, aRscfile);
-    if (!aContext->ResourceManager()->IsInitialized())
-    {
-      // If resource file wasn't found, use static values instead
-      Interface_Static::FillMap(aContext->ResourceManager()->GetMap());
-    }
-    aContext->SetDetalisation(theDetalisationLevel);
-  }
-  aContext->SetNonManifold(theNonManifold);
-  theInfo = aContext;
-
-  Standard_CString aSeq = Interface_Static::CVal(thePseq);
-  if (!aSeq) aSeq = thePseq;
-
-  // if resource file is not loaded or does not define <seq>.exec.op, 
-  // do default fixes
-  Handle(Resource_Manager) aRsc = aContext->ResourceManager();
-  TCollection_AsciiString aStr(aSeq);
-  aStr += ".exec.op";
-  if (!aRsc->Find(aStr.ToCString()))
-  {
-#ifdef OCCT_DEBUG
-    {
-      static Standard_Integer aTime = 0;
-      if (!aTime)
-        std::cout << "Warning: XSAlgo_AlgoContainer::ProcessShape(): Sequence " << aStr.ToCString() <<
-        " is not defined in " << thePrscfile << " resource; do default processing" << std::endl;
-      aTime++;
-    }
-#endif
-    // if reading, do default ShapeFix
-    if (!strncmp(thePseq, "read.", 5))
-    {
-      try {
-        OCC_CATCH_SIGNALS
-        Handle(ShapeExtend_MsgRegistrator) aMsg = new ShapeExtend_MsgRegistrator;
-        Handle(ShapeFix_Shape) aSfs = ShapeAlgo::AlgoContainer()->ToolContainer()->FixShape();
-        aSfs->Init(theShape);
-        aSfs->SetMsgRegistrator(aMsg);
-        aSfs->SetPrecision(thePrec);
-        aSfs->SetMaxTolerance(theMaxTol);
-        aSfs->FixFaceTool()->FixWireTool()->FixSameParameterMode() = Standard_False;
-        aSfs->FixSolidTool()->CreateOpenSolidMode() = Standard_False;
-        aSfs->SetContext(theReShape);
-        aSfs->Perform(theProgress);
-
-        TopoDS_Shape aShape = aSfs->Shape();
-        if (!aShape.IsNull() && aShape != theShape)
-        {
-          aContext->RecordModification(aSfs->Context(), aMsg);
-          aContext->SetResult(aShape);
-        }
-      }
-      catch (Standard_Failure const& anException)
-      {
-#ifdef OCCT_DEBUG
-        std::cout << "Error: XSAlgo_AlgoContainer::ProcessShape(): Exception in ShapeFix::Shape" << std::endl;
-        anException.Print(std::cout); std::cout << std::endl;
-#endif
-        (void)anException;
-      }
-      return aContext->Result();
-    }
-    // for writing, define default sequence of DirectFaces
-    else if (!strncmp(thePseq, "write.", 6))
-    {
-      aRsc->SetResource(aStr.ToCString(), "DirectFaces");
-    }
-  }
-
-  // Define runtime tolerances and do Shape Processing 
-  aRsc->SetResource("Runtime.Tolerance", thePrec);
-  aRsc->SetResource("Runtime.MaxTolerance", theMaxTol);
-
-  if (!ShapeProcess::Perform(aContext, aSeq, theProgress))
-    return theShape; // return original shape
-
-  return aContext->Result();
+  XSAlgo_AlgoProcessShape aProcessShape;
+  aProcessShape.SetShape(theShape);
+  aProcessShape.SetPrscfile(thePrscfile);
+  aProcessShape.SetPseq(thePseq);
+  aProcessShape.SetInfo(theInfo);
+  aProcessShape.SetHealingParamsFlag(myDEHealingParamsUsage);
+  aProcessShape.SetHealingParameters(myHealingParameters);
+  aProcessShape.SetDetalisationLevel(theDetalisationLevel);
+  aProcessShape.SetNonManifold(theNonManifold);
+  aProcessShape.SetProgressRange(theProgress);
+  aProcessShape.SetPrecision(thePrec);
+  aProcessShape.SetMaxTol(theMaxTol);
+  aProcessShape.SetReShape(theReShape);
+
+  return aProcessShape.ProcessShape();
 }
 
 //=======================================================================
index c4f33071c099757ed4000eb898e3cd2e7d553ecb..0716afaaf613dbbe64bbe913a2dc544ac0221469 100644 (file)
@@ -19,6 +19,7 @@
 #include <Standard.hxx>
 #include <Standard_Type.hxx>
 
+#include <DE_ShapeFixParameters.hxx>
 #include <Message_ProgressRange.hxx>
 #include <Standard_Integer.hxx>
 #include <Standard_Transient.hxx>
@@ -46,10 +47,35 @@ public:
   Standard_EXPORT XSAlgo_AlgoContainer();
   
   //! Sets ToolContainer
-    void SetToolContainer (const Handle(XSAlgo_ToolContainer)& TC);
+  void SetToolContainer (const Handle(XSAlgo_ToolContainer)& TC);
+
+  //! Gets healing parameters flag
+  const bool GetHealingParameteresFlag()
+  {
+    return myDEHealingParamsUsage;
+  }
+
+  //! Sets healing parameters flag
+  //! Uses defined DE healing parameters (if true) or parameters from resource file/Static_Interface
+  void SetHealingParametersFlag(const bool theHealingParamsFlag)
+  {
+    myDEHealingParamsUsage = theHealingParamsFlag;
+  }
+
+  //! Gets healing parameters
+  const DE_ShapeFixParameters& GetHealingParameteres()
+  {
+    return myHealingParameters;
+  }
+
+  //! Sets healing parameters
+  void SetHealingParameters(const DE_ShapeFixParameters& theHealingParams)
+  {
+    myHealingParameters = theHealingParams;
+  }
   
   //! Returns ToolContainer
-    Handle(XSAlgo_ToolContainer) ToolContainer() const;
+  Handle(XSAlgo_ToolContainer) ToolContainer() const;
   
   //! Performs actions necessary for preparing environment
   //! for transfer. Empty in Open version.
@@ -122,8 +148,9 @@ protected:
 
 private:
 
-
+  bool myDEHealingParamsUsage;
   Handle(XSAlgo_ToolContainer) myTC;
+  DE_ShapeFixParameters myHealingParameters;
 
 
 };
diff --git a/src/XSAlgo/XSAlgo_AlgoProcessShape.cxx b/src/XSAlgo/XSAlgo_AlgoProcessShape.cxx
new file mode 100644 (file)
index 0000000..2f895a3
--- /dev/null
@@ -0,0 +1,208 @@
+// Created on: 2000-01-19
+// Created by: data exchange team
+// Copyright (c) 2000-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <XSAlgo_AlgoProcessShape.hxx>
+
+#include <Interface_Static.hxx>
+#include <Resource_Manager.hxx>
+#include <ShapeAlgo.hxx>
+#include <ShapeAlgo_AlgoContainer.hxx>
+#include <ShapeAlgo_ToolContainer.hxx>
+#include <ShapeBuild_ReShape.hxx>
+#include <ShapeExtend_MsgRegistrator.hxx>
+#include <ShapeFix_Shape.hxx>
+#include <ShapeProcess.hxx>
+#include <ShapeProcess_ShapeContext.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(XSAlgo_AlgoProcessShape, Standard_Transient)
+
+//=======================================================================
+//function : XSAlgo_AlgoProcessShape
+//purpose  : 
+//=======================================================================
+XSAlgo_AlgoProcessShape::XSAlgo_AlgoProcessShape()
+  : myPrscfile(""),
+  myPseq(""),
+  myPrecision(0.001),
+  myMaxTol(1.),
+  myNonManifold(false),
+  myDetalisationLevel(TopAbs_VERTEX),
+  myDEHealingParamsUsage(false),
+  myProgressRange(Message_ProgressRange())
+{
+}
+
+//=======================================================================
+//function : ProcessShape
+//purpose  :
+//=======================================================================
+TopoDS_Shape XSAlgo_AlgoProcessShape::ProcessShape()
+{
+  if (myShape.IsNull())
+  {
+    return myShape;
+  }
+
+  Standard_CString aRscfile = "";
+  Handle(ShapeProcess_ShapeContext) aContext = Handle(ShapeProcess_ShapeContext)::DownCast(myInfo);
+  if (aContext.IsNull())
+  {
+    aRscfile = Interface_Static::CVal(myPrscfile);
+    aContext = new ShapeProcess_ShapeContext(myShape, aRscfile);
+    if (myDEHealingParamsUsage)
+    {
+      // Use defined shape healing parameters
+      FillMap(aContext->ResourceManager()->GetMap());
+    }
+    else if (!aContext->ResourceManager()->IsInitialized())
+    {
+      // If resource file wasn't found, use static values instead
+      Interface_Static::FillMap(aContext->ResourceManager()->GetMap());
+    }
+  }
+  aContext->SetDetalisation(myDetalisationLevel);
+  aContext->SetNonManifold(myNonManifold);
+  myInfo = aContext;
+
+  Standard_CString aSeq = Interface_Static::CVal(myPseq);
+  if (!aSeq) aSeq = myPseq;
+
+  // if resource file is not loaded or does not define <seq>.exec.op, 
+  // do default fixes
+  Handle(Resource_Manager) aRsc = aContext->ResourceManager();
+  TCollection_AsciiString aStr(aSeq);
+  aStr += ".exec.op";
+  if (strncmp(myPseq, "read.", 5) == 0)
+  {
+    aRsc->SetResource(aStr.ToCString(), "FixShape");
+    try {
+      OCC_CATCH_SIGNALS
+      Handle(ShapeExtend_MsgRegistrator) aMsg = new ShapeExtend_MsgRegistrator;
+      Handle(ShapeFix_Shape) aSfs = ShapeAlgo::AlgoContainer()->ToolContainer()->FixShape();
+      aSfs->Init(myShape);
+      aSfs->SetMsgRegistrator(aMsg);
+      aSfs->SetPrecision(myPrecision);
+      aSfs->SetMaxTolerance(myMaxTol);
+      aSfs->FixFaceTool()->FixWireTool()->FixSameParameterMode() = Standard_False;
+      if (strcmp(aRscfile, "IGES") == 0 || strcmp(aRscfile, "XT") == 0)
+      {
+        aSfs->FixSolidTool()->CreateOpenSolidMode() = Standard_True;
+      }
+      else
+      {
+        aSfs->FixSolidTool()->CreateOpenSolidMode() = Standard_False;
+      }
+      aSfs->SetContext(myReShape);
+      aSfs->Perform(myProgressRange);
+
+      TopoDS_Shape aShape = aSfs->Shape();
+      if (!aShape.IsNull() && aShape != myShape)
+      {
+        aContext->RecordModification(aSfs->Context(), aMsg);
+        aContext->SetResult(aShape);
+      }
+    }
+    catch (Standard_Failure const& anException)
+    {
+#ifdef OCCT_DEBUG
+      std::cout << "Error: XSAlgo_AlgoContainer::ProcessShape(): Exception in ShapeFix::Shape" << std::endl;
+      anException.Print(std::cout); std::cout << std::endl;
+#endif
+      (void)anException;
+    }
+    return aContext->Result();
+  }
+  else if (strncmp(myPseq, "write.", 6) == 0)
+  {
+    if (strcmp(aRscfile, "STEP") == 0)
+    {
+      aRsc->SetResource(aStr.ToCString(), "SplitCommonVertex,DirectFaces");
+    }
+    else
+    {
+      aRsc->SetResource(aStr.ToCString(), "DirectFaces");
+    }
+  }
+
+  // Define runtime tolerances and do Shape Processing 
+  aRsc->SetResource("Runtime.Tolerance", myPrecision);
+  aRsc->SetResource("Runtime.MaxTolerance", myMaxTol);
+
+  if (!ShapeProcess::Perform(aContext, aSeq, myProgressRange))
+    return myShape; // return original shape
+
+  return aContext->Result();
+}
+
+//=======================================================================
+//function : FillMap
+//purpose  :
+//=======================================================================
+void XSAlgo_AlgoProcessShape::FillMap(NCollection_DataMap<TCollection_AsciiString, TCollection_AsciiString>& theMap) const
+{
+  theMap.Clear();
+  theMap.Bind("Tolerance3d", TCollection_AsciiString(myHealingParameters.Tolerance3d));
+  theMap.Bind("MinTolerance3d", TCollection_AsciiString(myHealingParameters.MinTolerance3d));
+  theMap.Bind("MaxTolerance3d", TCollection_AsciiString(myHealingParameters.MaxTolerance3d));
+  theMap.Bind("FixFreeShellMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixFreeShellMode)));
+  theMap.Bind("FixFreeFaceMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixFreeFaceMode)));
+  theMap.Bind("FixFreeFaceMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixFreeFaceMode)));
+  theMap.Bind("FixFreeWireMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixFreeWireMode)));
+  theMap.Bind("FixSameParameterMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixSameParameterMode)));
+  theMap.Bind("FixSolidMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixSolidMode)));
+  theMap.Bind("FixShellOrientationMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixShellOrientationMode)));
+  theMap.Bind("CreateOpenSolidMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.CreateOpenSolidMode)));
+  theMap.Bind("FixShellMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixShellMode)));
+  theMap.Bind("FixFaceOrientationMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixFaceOrientationMode)));
+  theMap.Bind("FixFaceMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixFaceMode)));
+  theMap.Bind("FixWireMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixWireMode)));
+  theMap.Bind("FixOrientationMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixOrientationMode)));
+  theMap.Bind("FixAddNaturalBoundMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixAddNaturalBoundMode)));
+  theMap.Bind("FixMissingSeamMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixMissingSeamMode)));
+  theMap.Bind("FixSmallAreaWireMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixSmallAreaWireMode)));
+  theMap.Bind("RemoveSmallAreaFaceMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.RemoveSmallAreaFaceMode)));
+  theMap.Bind("FixIntersectingWiresMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixIntersectingWiresMode)));
+  theMap.Bind("FixLoopWiresMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixLoopWiresMode)));
+  theMap.Bind("FixSplitFaceMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixSplitFaceMode)));
+  theMap.Bind("AutoCorrectPrecisionMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.AutoCorrectPrecisionMode)));
+  theMap.Bind("ModifyTopologyMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.ModifyTopologyMode)));
+  theMap.Bind("ClosedWireMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.ClosedWireMode)));
+  theMap.Bind("PreferencePCurveMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.PreferencePCurveMode)));
+  theMap.Bind("FixReorderMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixReorderMode)));
+  theMap.Bind("FixSmallMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixSmallMode)));
+  theMap.Bind("FixConnectedMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixConnectedMode)));
+  theMap.Bind("FixEdgeCurvesMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixEdgeCurvesMode)));
+  theMap.Bind("FixDegeneratedMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixDegeneratedMode)));
+  theMap.Bind("FixLackingMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixLackingMode)));
+  theMap.Bind("FixSelfIntersectionMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixSelfIntersectionMode)));
+  theMap.Bind("RemoveLoopMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.RemoveLoopMode)));
+  theMap.Bind("FixReversed2dMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixReversed2dMode)));
+  theMap.Bind("FixRemovePCurveMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixRemovePCurveMode)));
+  theMap.Bind("FixRemoveCurve3dMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixRemoveCurve3dMode)));
+  theMap.Bind("FixAddPCurveMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixAddPCurveMode)));
+  theMap.Bind("FixAddCurve3dMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixAddCurve3dMode)));
+  theMap.Bind("FixSeamMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixSeamMode)));
+  theMap.Bind("FixShiftedMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixShiftedMode)));
+  theMap.Bind("FixEdgeSameParameterMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixEdgeSameParameterMode)));
+  theMap.Bind("FixNotchedEdgesMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixNotchedEdgesMode)));
+  theMap.Bind("FixTailMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixTailMode)));
+  theMap.Bind("MaxTailAngle", TCollection_AsciiString(static_cast<int>(myHealingParameters.MaxTailAngle)));
+  theMap.Bind("MaxTailWidth", TCollection_AsciiString(static_cast<int>(myHealingParameters.MaxTailWidth)));
+  theMap.Bind("FixSelfIntersectingEdgeMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixSelfIntersectingEdgeMode)));
+  theMap.Bind("FixIntersectingEdgesMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixIntersectingEdgesMode)));
+  theMap.Bind("FixNonAdjacentIntersectingEdgesMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixNonAdjacentIntersectingEdgesMode)));
+  theMap.Bind("FixVertexPositionMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixVertexPositionMode)));
+  theMap.Bind("FixVertexToleranceMode", TCollection_AsciiString(static_cast<int>(myHealingParameters.FixVertexToleranceMode)));
+}
diff --git a/src/XSAlgo/XSAlgo_AlgoProcessShape.hxx b/src/XSAlgo/XSAlgo_AlgoProcessShape.hxx
new file mode 100644 (file)
index 0000000..dc12666
--- /dev/null
@@ -0,0 +1,145 @@
+// Copyright (c) 2024 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _XSAlgo_AlgoProcessShape_HeaderFile
+#define _XSAlgo_AlgoProcessShape_HeaderFile
+
+#include <Standard.hxx>
+#include <Standard_Type.hxx>
+
+#include <DE_ShapeFixParameters.hxx>
+#include <Message_ProgressRange.hxx>
+#include <NCollection_DataMap.hxx>
+#include <Standard_Integer.hxx>
+#include <Standard_Transient.hxx>
+#include <TopAbs_ShapeEnum.hxx>
+#include <TopoDS_Shape.hxx>
+
+class ShapeBuild_ReShape;
+class XSAlgo_ToolContainer;
+class TopoDS_Edge;
+class TopoDS_Face;
+class Transfer_TransientProcess;
+class Transfer_FinderProcess;
+
+class XSAlgo_AlgoProcessShape;
+DEFINE_STANDARD_HANDLE(XSAlgo_AlgoProcessShape, Standard_Transient)
+
+//! Class for shape processing
+class XSAlgo_AlgoProcessShape : public Standard_Transient
+{
+
+public:
+
+  //! Empty constructor
+  Standard_EXPORT XSAlgo_AlgoProcessShape();
+  
+  //! Shape processing with specified tolerances
+  Standard_EXPORT TopoDS_Shape ProcessShape();
+
+  //! Fill map from DE shape healing parameters
+  void FillMap(NCollection_DataMap<TCollection_AsciiString, TCollection_AsciiString>& theMap) const;
+
+  //! Get shape for processing
+  const TopoDS_Shape& GetShape() { return myShape; }
+
+  //! Set shape for processing
+  void SetShape(const TopoDS_Shape& theShape) { myShape = theShape; }
+
+  //! Get name of the resource file
+  const Standard_CString& GetPrscfile() { return myPrscfile; }
+
+  //! Set name of the resource file
+  void SetPrscfile(const Standard_CString& thePrscfile) { myPrscfile = thePrscfile; }
+
+  //! Get name of the sequence of operators defined in the resource file for Shape Processing
+  const Standard_CString& GetPseq() { return myPseq; }
+
+  //! Set name of the sequence of operators defined in the resource file for Shape Processing
+  void SetPseq(const Standard_CString& thePseq) { myPseq = thePseq; }
+
+  //! Get information to be recorded in the translation map
+  const Handle(Standard_Transient)& GetInfo() { return myInfo; }
+
+  //! Set information to be recorded in the translation map
+  void SetInfo(const Handle(Standard_Transient)& theInfo) { myInfo = theInfo; }
+
+  //! Get flag of healing parameters
+  const bool GetHealingParamsFlag() { return myDEHealingParamsUsage; }
+
+  //! Set flag of healing parameters
+  //! Uses defined DE healing parameters (if true) or parameters from resource file/Static_Interface
+  void SetHealingParamsFlag(const bool theHealingParamsFlag) { myDEHealingParamsUsage = theHealingParamsFlag; }
+
+  //! Get healing parameters
+  const DE_ShapeFixParameters& GetHealingParameters() { return myHealingParameters; }
+
+  //! Set healing parameters
+  void SetHealingParameters(const DE_ShapeFixParameters& theHealingParams) { myHealingParameters = theHealingParams; }
+
+  //! Get flag to proceed with non-manifold topology
+  const bool GetNonManifold() { return myNonManifold; }
+
+  //! Set flag to proceed with non-manifold topology
+  void SetNonManifold(const bool theNonManifold) { myNonManifold = theNonManifold; }
+
+  //! Get detalisation level
+  const TopAbs_ShapeEnum GetDetalisationLevel() { return myDetalisationLevel; }
+
+  //! Set detalisation level
+  void SetDetalisationLevel(const TopAbs_ShapeEnum theDetalisationLevel) { myDetalisationLevel = theDetalisationLevel; }
+
+  //! Get progress indicator
+  const Message_ProgressRange& GetProgressRange() { return myProgressRange; }
+
+  //! Set progress indicator
+  void SetProgressRange(const Message_ProgressRange& theProgressRange) { myProgressRange = theProgressRange; }
+
+  //! Get maximum allowed tolerance
+  const double GetMaxTol() { return myMaxTol; }
+
+  //! Set maximum allowed tolerance
+  void SetMaxTol(const double theMaxTol) { myMaxTol = theMaxTol; }
+
+  //! Get basic precision
+  const double GetPrecision() { return myPrecision; }
+
+  //! Set basic precision
+  void SetPrecision(const double thePrecision) { myPrecision = thePrecision; }
+
+  //! Get tool to record the modifications of input shape
+  const Handle(ShapeBuild_ReShape)& GetReShape() { return myReShape; }
+
+  //! Set tool to record the modifications of input shape
+  void SetReShape(const Handle(ShapeBuild_ReShape)& theReShape) { myReShape = theReShape; }
+
+  DEFINE_STANDARD_RTTIEXT(XSAlgo_AlgoProcessShape, Standard_Transient)
+
+private:
+
+  TopoDS_Shape     myShape;
+  Standard_CString myPrscfile;
+  Standard_CString myPseq;
+  double           myPrecision;
+  double           myMaxTol;
+  bool             myNonManifold;
+  TopAbs_ShapeEnum myDetalisationLevel;
+  bool myDEHealingParamsUsage;
+  DE_ShapeFixParameters myHealingParameters;
+  Message_ProgressRange myProgressRange;
+  Handle(Standard_Transient) myInfo;
+  Handle(ShapeBuild_ReShape) myReShape;
+
+};
+
+#endif // _XSAlgo_AlgoProcessShape_HeaderFile