]> OCCT Git - occt.git/commitdiff
// fixing remarks
authordpasukhi <dpasukhi@opencascade.com>
Thu, 16 Mar 2023 14:15:08 +0000 (14:15 +0000)
committerdpasukhi <dpasukhi@opencascade.com>
Thu, 16 Mar 2023 16:57:20 +0000 (16:57 +0000)
 personizeWS() should be after parameter setting up
 a minor fix with calling IGES controller
 implement static parameters controller
 fixing regression tests
 fixing warnings

src/DE/DE_Provider.cxx
src/IGESCAFControl/IGESCAFControl_Provider.cxx
src/IGESCAFControl/IGESCAFControl_Provider.hxx
src/RWStl/RWStl_Provider.cxx
src/STEPCAFControl/STEPCAFControl_Provider.cxx
src/STEPCAFControl/STEPCAFControl_Provider.hxx
src/XDEDRAW/XDEDRAW_Common.cxx
tests/de/step_3/A1
tests/de/step_5/B6

index f1314ac6a40b9883aa5556d01b845b0177ee5f7b..a4d1993aee803450ce268d54930a5c3a81b2f6ed 100644 (file)
@@ -63,6 +63,7 @@ bool DE_Provider::Read(std::istream& theIStream,
 {
   (void)theIStream;
   (void)theDocument;
+  (void)theName;
   (void)theWS;
   (void)theProgress;
   Message::SendFail() << "Error: provider " << GetFormat() <<
@@ -136,6 +137,7 @@ bool DE_Provider::Read(std::istream& theIStream,
 {
   (void)theIStream;
   (void)theShape;
+  (void)theName;
   (void)theWS;
   (void)theProgress;
   Message::SendFail() << "Error: provider " << GetFormat() <<
index e2de53cf7eae0ee8f610b4011bb0167836662c29..eab92b41cd96627fd0af74fd6ce953505d25dd3e 100644 (file)
 
 #include <IGESCAFControl_Provider.hxx>
 
-#include <BinXCAFDrivers.hxx>
-#include <IGESControl_Controller.hxx>
 #include <IGESCAFControl_ConfigurationNode.hxx>
 #include <IGESCAFControl_Reader.hxx>
 #include <IGESCAFControl_Writer.hxx>
+#include <IGESControl_Controller.hxx>
 #include <IGESData.hxx>
 #include <IGESData_IGESModel.hxx>
 #include <Interface_Static.hxx>
 #include <Message.hxx>
+#include <UnitsMethods.hxx>
 #include <XCAFDoc_DocumentTool.hxx>
 #include <XSControl_WorkSession.hxx>
-#include <UnitsMethods.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(IGESCAFControl_Provider, DE_Provider)
 
+namespace
+{
+  //! Special class to handle static parameters.
+  //! Initialize all parameters in the begin of life
+  //! and reset changed parameters in the end of life
+  class IGESCAFControl_ParameterController
+  {
+  public:
+
+    IGESCAFControl_ParameterController(const Handle(IGESCAFControl_ConfigurationNode)& theNode,
+                                       const Standard_Boolean theUpdateStatic);
+
+    ~IGESCAFControl_ParameterController();
+
+  protected:
+
+    void setStatic(const IGESCAFControl_ConfigurationNode::IGESCAFControl_InternalSection theParameter);
+
+  private:
+
+    bool myToUpdateStaticParameters; //!< Flag to updating static parameters
+    IGESCAFControl_ConfigurationNode::IGESCAFControl_InternalSection myOldValues; //!< Container to save previous static parameters
+    IGESCAFControl_ConfigurationNode::DE_SectionGlobal myOldGlobalValues; //!< Container to save previous global parameters
+  };
+
+  //=======================================================================
+  // function : IGESCAFControl_ParameterController
+  // purpose  :
+  //=======================================================================
+  IGESCAFControl_ParameterController::IGESCAFControl_ParameterController(const Handle(IGESCAFControl_ConfigurationNode)& theNode,
+                                                                         const Standard_Boolean theUpdateStatic)
+    : myToUpdateStaticParameters(theUpdateStatic)
+  {
+    IGESControl_Controller::Init();
+    IGESData::Init();
+    if (!myToUpdateStaticParameters)
+    {
+      return;
+    }
+    // Get previous values
+    myOldValues.ReadBSplineContinuity =
+      (IGESCAFControl_ConfigurationNode::ReadMode_BSplineContinuity)
+      Interface_Static::IVal("read.iges.bspline.continuity");
+    myOldValues.ReadPrecisionMode =
+      (IGESCAFControl_ConfigurationNode::ReadMode_Precision)
+      Interface_Static::IVal("read.precision.mode");
+    myOldValues.ReadPrecisionVal =
+      Interface_Static::RVal("read.precision.val");
+    myOldValues.ReadMaxPrecisionMode =
+      (IGESCAFControl_ConfigurationNode::ReadMode_MaxPrecision)
+      Interface_Static::IVal("read.maxprecision.mode");
+    myOldValues.ReadMaxPrecisionVal =
+      Interface_Static::RVal("read.maxprecision.val");
+    myOldValues.ReadSameParamMode =
+      Interface_Static::IVal("read.stdsameparameter.mode") == 1;
+    myOldValues.ReadSurfaceCurveMode =
+      (IGESCAFControl_ConfigurationNode::ReadMode_SurfaceCurve)
+      Interface_Static::IVal("read.surfacecurve.mode");
+    myOldValues.EncodeRegAngle =
+      Interface_Static::RVal("read.encoderegularity.angle") * 180.0 / M_PI;
+
+    myOldValues.ReadApproxd1 =
+      Interface_Static::IVal("read.iges.bspline.approxd1.mode") == 1;
+    myOldValues.ReadResourceName =
+      Interface_Static::CVal("read.iges.resource.name");
+    myOldValues.ReadSequence =
+      Interface_Static::CVal("read.iges.sequence");
+    myOldValues.ReadFaultyEntities =
+      Interface_Static::IVal("read.iges.faulty.entities") == 1;
+    myOldValues.ReadOnlyVisible =
+      Interface_Static::IVal("read.iges.onlyvisible") == 1;
+
+    myOldValues.WriteBRepMode =
+      (IGESCAFControl_ConfigurationNode::WriteMode_BRep)
+      Interface_Static::IVal("write.iges.brep.mode");
+    myOldValues.WriteConvertSurfaceMode =
+      (IGESCAFControl_ConfigurationNode::WriteMode_ConvertSurface)
+      Interface_Static::IVal("write.convertsurface.mode");
+    myOldValues.WriteUnit =
+      (UnitsMethods_LengthUnit)
+      Interface_Static::IVal("write.iges.unit");
+    myOldValues.WriteHeaderAuthor =
+      Interface_Static::CVal("write.iges.header.author");
+    myOldValues.WriteHeaderCompany =
+      Interface_Static::CVal("write.iges.header.company");
+    myOldValues.WriteHeaderProduct =
+      Interface_Static::CVal("write.iges.header.product");
+    myOldValues.WriteHeaderReciever =
+      Interface_Static::CVal("write.iges.header.receiver");
+    myOldValues.WriteResourceName =
+      Interface_Static::CVal("write.iges.resource.name");
+    myOldValues.WriteSequence =
+      Interface_Static::CVal("write.iges.sequence");
+    myOldValues.WritePrecisionMode =
+      (IGESCAFControl_ConfigurationNode::WriteMode_PrecisionMode)
+      Interface_Static::IVal("write.precision.mode");
+    myOldValues.WritePrecisionVal =
+      Interface_Static::RVal("write.precision.val");
+    myOldValues.WritePlaneMode =
+      (IGESCAFControl_ConfigurationNode::WriteMode_PlaneMode)
+      Interface_Static::IVal("write.iges.plane.mode");
+    myOldValues.WriteOffsetMode =
+      Interface_Static::IVal("write.iges.offset.mode") == 1;
+
+    myOldGlobalValues.LengthUnit = 0.001 *
+      UnitsMethods::GetLengthFactorValue(Interface_Static::IVal("xstep.cascade.unit"));
+    // Set new values
+    TCollection_AsciiString aStrUnit(
+      UnitsMethods::DumpLengthUnit(theNode->GlobalParameters.LengthUnit));
+    aStrUnit.UpperCase();
+    Interface_Static::SetCVal("xstep.cascade.unit", aStrUnit.ToCString());
+    UnitsMethods::SetCasCadeLengthUnit(theNode->GlobalParameters.LengthUnit);
+    setStatic(theNode->InternalParameters);
+  }
+
+  //=======================================================================
+  // function : ~IGESCAFControl_ParameterController
+  // purpose  :
+  //=======================================================================
+  IGESCAFControl_ParameterController::~IGESCAFControl_ParameterController()
+  {
+    if (!myToUpdateStaticParameters)
+    {
+      return;
+    }
+    // Set new values
+    TCollection_AsciiString aStrUnit(
+      UnitsMethods::DumpLengthUnit(myOldGlobalValues.LengthUnit,
+      UnitsMethods_LengthUnit_Meter));
+    aStrUnit.UpperCase();
+    Interface_Static::SetCVal("xstep.cascade.unit", aStrUnit.ToCString());
+    setStatic(myOldValues);
+  }
+
+  //=======================================================================
+  // function : setStatic
+  // purpose  :
+  //=======================================================================
+  void IGESCAFControl_ParameterController::setStatic(const IGESCAFControl_ConfigurationNode::IGESCAFControl_InternalSection theParameter)
+  {
+    Interface_Static::SetIVal("read.iges.bspline.continuity",
+                              theParameter.ReadBSplineContinuity);
+    Interface_Static::SetIVal("read.precision.mode",
+                              theParameter.ReadPrecisionMode);
+    Interface_Static::SetRVal("read.precision.val",
+                              theParameter.ReadPrecisionVal);
+    Interface_Static::SetIVal("read.maxprecision.mode",
+                              theParameter.ReadMaxPrecisionMode);
+    Interface_Static::SetRVal("read.maxprecision.val",
+                              theParameter.ReadMaxPrecisionVal);
+    Interface_Static::SetIVal("read.stdsameparameter.mode",
+                              theParameter.ReadSameParamMode);
+    Interface_Static::SetIVal("read.surfacecurve.mode",
+                              theParameter.ReadSurfaceCurveMode);
+    Interface_Static::SetRVal("read.encoderegularity.angle",
+                              theParameter.EncodeRegAngle * M_PI / 180.0);
+
+    Interface_Static::SetIVal("read.iges.bspline.approxd1.mode",
+                              theParameter.ReadApproxd1);
+    Interface_Static::SetCVal("read.iges.resource.name",
+                              theParameter.ReadResourceName.ToCString());
+    Interface_Static::SetCVal("read.iges.sequence",
+                              theParameter.ReadSequence.ToCString());
+    Interface_Static::SetIVal("read.iges.faulty.entities",
+                              theParameter.ReadFaultyEntities);
+    Interface_Static::SetIVal("read.iges.onlyvisible",
+                              theParameter.ReadOnlyVisible);
+
+    Interface_Static::SetIVal("write.iges.brep.mode",
+                              theParameter.WriteBRepMode);
+    Interface_Static::SetIVal("write.convertsurface.mode",
+                              theParameter.WriteConvertSurfaceMode);
+    Interface_Static::SetIVal("write.iges.unit",
+                              theParameter.WriteUnit);
+    Interface_Static::SetCVal("write.iges.header.author",
+                              theParameter.WriteHeaderAuthor.ToCString());
+    Interface_Static::SetCVal("write.iges.header.company",
+                              theParameter.WriteHeaderCompany.ToCString());
+    Interface_Static::SetCVal("write.iges.header.product",
+                              theParameter.WriteHeaderProduct.ToCString());
+    Interface_Static::SetCVal("write.iges.header.receiver",
+                              theParameter.WriteHeaderReciever.ToCString());
+    Interface_Static::SetCVal("write.iges.resource.name",
+                              theParameter.WriteResourceName.ToCString());
+    Interface_Static::SetCVal("write.iges.sequence",
+                              theParameter.WriteSequence.ToCString());
+    Interface_Static::SetIVal("write.precision.mode",
+                              theParameter.WritePrecisionMode);
+    Interface_Static::SetRVal("write.precision.val",
+                              theParameter.WritePrecisionVal);
+    Interface_Static::SetIVal("write.iges.plane.mode",
+                              theParameter.WritePlaneMode);
+    Interface_Static::SetIVal("write.iges.offset.mode",
+                              theParameter.WriteOffsetMode);
+  }
+}
+
 //=======================================================================
 // function : IGESCAFControl_Provider
 // purpose  :
@@ -63,176 +259,6 @@ void IGESCAFControl_Provider::personizeWS(Handle(XSControl_WorkSession)& theWS)
   }
 }
 
-//=======================================================================
-// function : initStatic
-// purpose  :
-//=======================================================================
-void IGESCAFControl_Provider::initStatic(const Handle(DE_ConfigurationNode)& theNode)
-{
-  Handle(IGESCAFControl_ConfigurationNode) aNode =
-    Handle(IGESCAFControl_ConfigurationNode)::DownCast(theNode);
-  IGESData::Init();
-  if (!myToUpdateStaticParameters)
-  {
-    return;
-  }
-  // Get previous values
-  myOldValues.ReadBSplineContinuity =
-    (IGESCAFControl_ConfigurationNode::ReadMode_BSplineContinuity)
-    Interface_Static::IVal("read.iges.bspline.continuity");
-  myOldValues.ReadPrecisionMode =
-    (IGESCAFControl_ConfigurationNode::ReadMode_Precision)
-    Interface_Static::IVal("read.precision.mode");
-  myOldValues.ReadPrecisionVal =
-    Interface_Static::RVal("read.precision.val");
-  myOldValues.ReadMaxPrecisionMode =
-    (IGESCAFControl_ConfigurationNode::ReadMode_MaxPrecision)
-    Interface_Static::IVal("read.maxprecision.mode");
-  myOldValues.ReadMaxPrecisionVal =
-    Interface_Static::RVal("read.maxprecision.val");
-  myOldValues.ReadSameParamMode =
-    Interface_Static::IVal("read.stdsameparameter.mode") == 1;
-  myOldValues.ReadSurfaceCurveMode =
-    (IGESCAFControl_ConfigurationNode::ReadMode_SurfaceCurve)
-    Interface_Static::IVal("read.surfacecurve.mode");
-  myOldValues.EncodeRegAngle =
-    Interface_Static::RVal("read.encoderegularity.angle") * 180.0 / M_PI;
-
-  myOldValues.ReadApproxd1 =
-    Interface_Static::IVal("read.iges.bspline.approxd1.mode") == 1;
-  myOldValues.ReadResourceName =
-    Interface_Static::CVal("read.iges.resource.name");
-  myOldValues.ReadSequence =
-    Interface_Static::CVal("read.iges.sequence");
-  myOldValues.ReadFaultyEntities =
-    Interface_Static::IVal("read.iges.faulty.entities") == 1;
-  myOldValues.ReadOnlyVisible =
-    Interface_Static::IVal("read.iges.onlyvisible") == 1;
-
-  myOldValues.WriteBRepMode =
-    (IGESCAFControl_ConfigurationNode::WriteMode_BRep)
-    Interface_Static::IVal("write.iges.brep.mode");
-  myOldValues.WriteConvertSurfaceMode =
-    (IGESCAFControl_ConfigurationNode::WriteMode_ConvertSurface)
-    Interface_Static::IVal("write.convertsurface.mode");
-  myOldValues.WriteUnit =
-    (UnitsMethods_LengthUnit)
-    Interface_Static::IVal("write.iges.unit");
-  myOldValues.WriteHeaderAuthor =
-    Interface_Static::CVal("write.iges.header.author");
-  myOldValues.WriteHeaderCompany =
-    Interface_Static::CVal("write.iges.header.company");
-  myOldValues.WriteHeaderProduct =
-    Interface_Static::CVal("write.iges.header.product");
-  myOldValues.WriteHeaderReciever =
-    Interface_Static::CVal("write.iges.header.receiver");
-  myOldValues.WriteResourceName =
-    Interface_Static::CVal("write.iges.resource.name");
-  myOldValues.WriteSequence =
-    Interface_Static::CVal("write.iges.sequence");
-  myOldValues.WritePrecisionMode =
-    (IGESCAFControl_ConfigurationNode::WriteMode_PrecisionMode)
-    Interface_Static::IVal("write.precision.mode");
-  myOldValues.WritePrecisionVal =
-    Interface_Static::RVal("write.precision.val");
-  myOldValues.WritePlaneMode =
-    (IGESCAFControl_ConfigurationNode::WriteMode_PlaneMode)
-    Interface_Static::IVal("write.iges.plane.mode");
-  myOldValues.WriteOffsetMode =
-    Interface_Static::IVal("write.iges.offset.mode") == 1;
-
-  myOldGlobalValues.LengthUnit = 0.001 *
-    UnitsMethods::GetLengthFactorValue(Interface_Static::IVal("xstep.cascade.unit"));
-  // Set new values
-  TCollection_AsciiString aStrUnit(
-    UnitsMethods::DumpLengthUnit(aNode->GlobalParameters.LengthUnit));
-  aStrUnit.UpperCase();
-  Interface_Static::SetCVal("xstep.cascade.unit", aStrUnit.ToCString());
-  UnitsMethods::SetCasCadeLengthUnit(aNode->GlobalParameters.LengthUnit);
-  setStatic(aNode->InternalParameters);
-}
-
-//=======================================================================
-// function : setStatic
-// purpose  :
-//=======================================================================
-void IGESCAFControl_Provider::setStatic(const IGESCAFControl_ConfigurationNode::IGESCAFControl_InternalSection theParameter)
-{
-  Interface_Static::SetIVal("read.iges.bspline.continuity",
-                            theParameter.ReadBSplineContinuity);
-  Interface_Static::SetIVal("read.precision.mode",
-                            theParameter.ReadPrecisionMode);
-  Interface_Static::SetRVal("read.precision.val",
-                            theParameter.ReadPrecisionVal);
-  Interface_Static::SetIVal("read.maxprecision.mode",
-                            theParameter.ReadMaxPrecisionMode);
-  Interface_Static::SetRVal("read.maxprecision.val",
-                            theParameter.ReadMaxPrecisionVal);
-  Interface_Static::SetIVal("read.stdsameparameter.mode",
-                            theParameter.ReadSameParamMode);
-  Interface_Static::SetIVal("read.surfacecurve.mode",
-                            theParameter.ReadSurfaceCurveMode);
-  Interface_Static::SetRVal("read.encoderegularity.angle",
-                            theParameter.EncodeRegAngle * M_PI / 180.0);
-
-  Interface_Static::SetIVal("read.iges.bspline.approxd1.mode",
-                            theParameter.ReadApproxd1);
-  Interface_Static::SetCVal("read.iges.resource.name",
-                            theParameter.ReadResourceName.ToCString());
-  Interface_Static::SetCVal("read.iges.sequence",
-                            theParameter.ReadSequence.ToCString());
-  Interface_Static::SetIVal("read.iges.faulty.entities",
-                            theParameter.ReadFaultyEntities);
-  Interface_Static::SetIVal("read.iges.onlyvisible",
-                            theParameter.ReadOnlyVisible);
-
-  Interface_Static::SetIVal("write.iges.brep.mode",
-                            theParameter.WriteBRepMode);
-  Interface_Static::SetIVal("write.convertsurface.mode",
-                            theParameter.WriteConvertSurfaceMode);
-  Interface_Static::SetIVal("write.iges.unit",
-                            theParameter.WriteUnit);
-  Interface_Static::SetCVal("write.iges.header.author",
-                            theParameter.WriteHeaderAuthor.ToCString());
-  Interface_Static::SetCVal("write.iges.header.company",
-                            theParameter.WriteHeaderCompany.ToCString());
-  Interface_Static::SetCVal("write.iges.header.product",
-                            theParameter.WriteHeaderProduct.ToCString());
-  Interface_Static::SetCVal("write.iges.header.receiver",
-                            theParameter.WriteHeaderReciever.ToCString());
-  Interface_Static::SetCVal("write.iges.resource.name",
-                            theParameter.WriteResourceName.ToCString());
-  Interface_Static::SetCVal("write.iges.sequence",
-                            theParameter.WriteSequence.ToCString());
-  Interface_Static::SetIVal("write.precision.mode",
-                            theParameter.WritePrecisionMode);
-  Interface_Static::SetRVal("write.precision.val",
-                            theParameter.WritePrecisionVal);
-  Interface_Static::SetIVal("write.iges.plane.mode",
-                            theParameter.WritePlaneMode);
-  Interface_Static::SetIVal("write.iges.offset.mode",
-                            theParameter.WriteOffsetMode);
-}
-
-//=======================================================================
-// function : resetStatic
-// purpose  :
-//=======================================================================
-void IGESCAFControl_Provider::resetStatic()
-{
-  if (!myToUpdateStaticParameters)
-  {
-    return;
-  }
-  // Set new values
-  TCollection_AsciiString aStrUnit(
-    UnitsMethods::DumpLengthUnit(myOldGlobalValues.LengthUnit,
-    UnitsMethods_LengthUnit_Meter));
-  aStrUnit.UpperCase();
-  Interface_Static::SetCVal("xstep.cascade.unit", aStrUnit.ToCString());
-  setStatic(myOldValues);
-}
-
 //=======================================================================
 // function : Read
 // purpose  :
@@ -256,8 +282,7 @@ bool IGESCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
   }
   Handle(IGESCAFControl_ConfigurationNode) aNode =
     Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode());
-  initStatic(aNode);
-
+  IGESCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
   personizeWS(theWS);
   XCAFDoc_DocumentTool::SetLengthUnit(theDocument,
                                       aNode->GlobalParameters.LengthUnit,
@@ -301,17 +326,14 @@ bool IGESCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
   {
     Message::SendFail() << "Error: IGESCAFControl_Provider : ["
       << aFile << "] : abandon, no model loaded";
-    resetStatic();
     return false;
   }
   if (!aReader.Transfer(theDocument, theProgress))
   {
     Message::SendFail() << "Error: IGESCAFControl_Provider : [" <<
       aFile << "] : Cannot read any relevant data from the IGES file";
-    resetStatic();
     return false;
   }
-  resetStatic();
   return true;
 }
 
@@ -332,8 +354,7 @@ bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
   }
   Handle(IGESCAFControl_ConfigurationNode) aNode =
     Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode());
-  initStatic(aNode);
-
+  IGESCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
   personizeWS(theWS);
   TCollection_AsciiString aUnit(
     UnitsMethods::DumpLengthUnit(aNode->InternalParameters.WriteUnit));
@@ -365,12 +386,10 @@ bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
   {
     Message::SendFail() << "Error: IGESCAFControl_Provider : "
       << "The document cannot be translated or gives no result";
-    resetStatic();
     return false;
   }
   if (thePath == ".")
   {
-    resetStatic();
     Message::SendInfo() << "Document has been translated into the session";
     return true;
   }
@@ -378,11 +397,9 @@ bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
   {
     Message::SendFail() << "Error: IGESCAFControl_Provider : [" <<
       thePath << "] : Write failed";
-    resetStatic();
     return false;
   }
   Message::SendInfo() << "IGES file [" << thePath << "] Successfully written";
-  resetStatic();
   return true;
 }
 
@@ -404,7 +421,7 @@ bool IGESCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
   }
   Handle(IGESCAFControl_ConfigurationNode) aNode =
     Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode());
-  initStatic(aNode);
+  IGESCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
   personizeWS(theWS);
   IGESControl_Reader aReader;
   aReader.SetWS(theWS);
@@ -422,18 +439,15 @@ bool IGESCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
   {
     Message::SendFail() << "Error: IGESCAFControl_Provider : [" <<
       thePath << "] : Could not read file, no model loaded";
-    resetStatic();
     return false;
   }
   if (aReader.TransferRoots() <= 0)
   {
     Message::SendFail() << "Error: IGESCAFControl_Provider : [" <<
       thePath << "] : Cannot read any relevant data from the IGES file";
-    resetStatic();
     return false;
   }
   theShape = aReader.OneShape();
-  resetStatic();
   return true;
 }
 
@@ -456,7 +470,8 @@ bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
   }
   Handle(IGESCAFControl_ConfigurationNode) aNode =
     Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode());
-  initStatic(aNode);
+  IGESCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
+  personizeWS(theWS);
   TCollection_AsciiString aUnit(
     UnitsMethods::DumpLengthUnit(aNode->InternalParameters.WriteUnit));
   aUnit.UpperCase();
@@ -467,7 +482,6 @@ bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
   {
     Message::SendFail() << "Error: IGESCAFControl_Provider : "
       << "Can't translate shape to IGES model";
-    resetStatic();
     return false;
   }
 
@@ -475,10 +489,8 @@ bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
   {
     Message::SendFail() << "Error: IGESCAFControl_Provider : "
       << "Can't write IGES file" << thePath;
-    resetStatic();
     return false;
   }
-  resetStatic();
   return true;
 }
 
index 2c102a007e82dd362e7c21c14c3fbf9660962d19..929eeec4dbe23e77c574f9aa9110f05f234fdcc8 100644 (file)
@@ -114,20 +114,9 @@ private:
   //! @param[in] theWS current work session
   void personizeWS(Handle(XSControl_WorkSession)& theWS);
 
-  //! Initialize static variables
-  void initStatic(const Handle(DE_ConfigurationNode)& theNode);
-
-  //! Initialize static variables
-  void setStatic(const IGESCAFControl_ConfigurationNode::IGESCAFControl_InternalSection theParameter);
-
-  //! Reset used interface static variables
-  void resetStatic();
-
 private:
 
   bool myToUpdateStaticParameters = true; //!< Flag to updating static parameters
-  IGESCAFControl_ConfigurationNode::IGESCAFControl_InternalSection myOldValues; //!< Container to save previous static parameters
-  IGESCAFControl_ConfigurationNode::DE_SectionGlobal myOldGlobalValues; //!< Container to save previous static parameters
 
 };
 
index c73189bfeeff4fe735f0d40f5c3caa90b4a659e8..6647498f2bcff42cf6d3b2c63cbaf46163491c1d 100644 (file)
@@ -144,9 +144,9 @@ bool RWStl_Provider::Read(const TCollection_AsciiString& thePath,
       // Read STL file to the triangulation list.
       RWStl::ReadFile(thePath.ToCString(), aMergeAngle, aTriangList, theProgress);
       BRep_Builder aB;
-      TopoDS_Face aFace;
       if (aTriangList.Size() == 1)
       {
+        TopoDS_Face aFace;
         aB.MakeFace(aFace);
         aB.UpdateFace(aFace, aTriangList.First());
         theShape = aFace;
@@ -161,11 +161,8 @@ bool RWStl_Provider::Read(const TCollection_AsciiString& thePath,
           {
             aB.MakeCompound(aCmp);
           }
-          if (aFace.IsNull())
-          {
-            aB.MakeFace(aFace);
-          }
-          aB.UpdateFace(aFace, anIt.Value());
+          TopoDS_Face aFace;
+          aB.MakeFace(aFace, anIt.Value());
           aB.Add(aCmp, aFace);
         }
         theShape = aCmp;
index 6647b8c59556fe71e4795cd8f5581e53e2abb531..337aee92a1d078b452744d471348ca337b49df9b 100644 (file)
 
 #include <STEPCAFControl_Provider.hxx>
 
-#include <BinXCAFDrivers.hxx>
 #include <Interface_Static.hxx>
 #include <Message.hxx>
-#include <STEPControl_Controller.hxx>
-#include <StepData_StepModel.hxx>
-#include <STEPControl_ActorWrite.hxx>
 #include <STEPCAFControl_ConfigurationNode.hxx>
 #include <STEPCAFControl_Controller.hxx>
 #include <STEPCAFControl_Reader.hxx>
 #include <STEPCAFControl_Writer.hxx>
-#include <TDocStd_Document.hxx>
+#include <STEPControl_ActorWrite.hxx>
+#include <STEPControl_Controller.hxx>
+#include <StepData_StepModel.hxx>
 #include <TDataStd_Name.hxx>
 #include <TDF_Tool.hxx>
+#include <TDocStd_Document.hxx>
+#include <UnitsMethods.hxx>
 #include <XCAFDoc_DocumentTool.hxx>
 #include <XSControl_WorkSession.hxx>
-#include <UnitsMethods.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(STEPCAFControl_Provider, DE_Provider)
 
+namespace
+{
+  //! Special class to handle static parameters.
+  //! Initialize all parameters in the begin of life
+  //! and reset changed parameters in the end of life
+  class STEPCAFControl_ParameterController
+  {
+  public:
+
+    STEPCAFControl_ParameterController(const Handle(STEPCAFControl_ConfigurationNode)& theNode,
+                                       const Standard_Boolean theUpdateStatic);
+
+    ~STEPCAFControl_ParameterController();
+
+  protected:
+
+    void setStatic(const STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection theParameter);
+
+  private:
+
+    bool myToUpdateStaticParameters; //!< Flag to updating static parameters
+    STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection myOldValues; //!< Container to save previous static parameters
+  };
+
+  //=======================================================================
+  // function : STEPCAFControl_ParameterController
+  // purpose  :
+  //=======================================================================
+  STEPCAFControl_ParameterController::STEPCAFControl_ParameterController(const Handle(STEPCAFControl_ConfigurationNode)& theNode,
+                                                                         const Standard_Boolean theUpdateStatic)
+    : myToUpdateStaticParameters(theUpdateStatic)
+  {
+    STEPCAFControl_Controller::Init();
+    if (!myToUpdateStaticParameters)
+    {
+      return;
+    }
+    // Get previous values
+    myOldValues.ReadBSplineContinuity =
+      (STEPCAFControl_ConfigurationNode::ReadMode_BSplineContinuity)
+      Interface_Static::IVal("read.iges.bspline.continuity");
+    myOldValues.ReadPrecisionMode =
+      (STEPCAFControl_ConfigurationNode::ReadMode_Precision)
+      Interface_Static::IVal("read.precision.mode");
+    myOldValues.ReadPrecisionVal =
+      Interface_Static::RVal("read.precision.val");
+    myOldValues.ReadMaxPrecisionMode =
+      (STEPCAFControl_ConfigurationNode::ReadMode_MaxPrecision)
+      Interface_Static::IVal("read.maxprecision.mode");
+    myOldValues.ReadMaxPrecisionVal =
+      Interface_Static::RVal("read.maxprecision.val");
+    myOldValues.ReadSameParamMode =
+      Interface_Static::IVal("read.stdsameparameter.mode") == 1;
+    myOldValues.ReadSurfaceCurveMode =
+      (STEPCAFControl_ConfigurationNode::ReadMode_SurfaceCurve)
+      Interface_Static::IVal("read.surfacecurve.mode");
+    myOldValues.EncodeRegAngle =
+      Interface_Static::RVal("read.encoderegularity.angle") * 180.0 / M_PI;
+    myOldValues.AngleUnit =
+      (STEPCAFControl_ConfigurationNode::AngleUnitMode)
+      Interface_Static::IVal("step.angleunit.mode");
+
+    myOldValues.ReadResourceName =
+      Interface_Static::CVal("read.step.resource.name");
+    myOldValues.ReadSequence =
+      Interface_Static::CVal("read.step.sequence");
+    myOldValues.ReadProductMode =
+      Interface_Static::IVal("read.step.product.mode") == 1;
+    myOldValues.ReadProductContext =
+      (STEPCAFControl_ConfigurationNode::ReadMode_ProductContext)
+      Interface_Static::IVal("read.step.product.context");
+    myOldValues.ReadShapeRepr =
+      (STEPCAFControl_ConfigurationNode::ReadMode_ShapeRepr)
+      Interface_Static::IVal("read.step.shape.repr");
+    myOldValues.ReadTessellated =
+      (STEPCAFControl_ConfigurationNode::RWMode_Tessellated)
+      Interface_Static::IVal("read.step.tessellated");
+    myOldValues.ReadAssemblyLevel =
+      (STEPCAFControl_ConfigurationNode::ReadMode_AssemblyLevel)
+      Interface_Static::IVal("read.step.assembly.level");
+    myOldValues.ReadRelationship =
+      Interface_Static::IVal("read.step.shape.relationship") == 1;
+    myOldValues.ReadShapeAspect =
+      Interface_Static::IVal("read.step.shape.aspect") == 1;
+    myOldValues.ReadConstrRelation =
+      Interface_Static::IVal("read.step.constructivegeom.relationship") == 1;
+    myOldValues.ReadSubshapeNames =
+      Interface_Static::IVal("read.stepcaf.subshapes.name") == 1;
+    myOldValues.ReadCodePage =
+      (Resource_FormatType)Interface_Static::IVal("read.step.codepage");
+    myOldValues.ReadNonmanifold =
+      Interface_Static::IVal("read.step.nonmanifold") == 1;
+    myOldValues.ReadIdeas =
+      Interface_Static::IVal("read.step.ideas") == 1;
+    myOldValues.ReadAllShapes =
+      Interface_Static::IVal("read.step.all.shapes") == 1;
+    myOldValues.ReadRootTransformation =
+      Interface_Static::IVal("read.step.root.transformation") == 1;
+
+    myOldValues.WritePrecisionMode =
+      (STEPCAFControl_ConfigurationNode::WriteMode_PrecisionMode)
+      Interface_Static::IVal("write.precision.mode");
+    myOldValues.WritePrecisionVal =
+      Interface_Static::RVal("write.precision.val");
+    myOldValues.WriteAssembly =
+      (STEPCAFControl_ConfigurationNode::WriteMode_Assembly)
+      Interface_Static::IVal("write.step.assembly");
+    myOldValues.WriteSchema =
+      (STEPCAFControl_ConfigurationNode::WriteMode_StepSchema)
+      Interface_Static::IVal("write.step.schema");
+    myOldValues.WriteTessellated =
+      (STEPCAFControl_ConfigurationNode::RWMode_Tessellated)
+      Interface_Static::IVal("write.step.tessellated");
+    myOldValues.WriteProductName =
+      Interface_Static::CVal("write.step.product.name");
+    myOldValues.WriteSurfaceCurMode =
+      Interface_Static::IVal("write.surfacecurve.mode") == 1;
+    myOldValues.WriteUnit =
+      (UnitsMethods_LengthUnit)Interface_Static::IVal("write.step.unit");
+    myOldValues.WriteResourceName =
+      Interface_Static::CVal("write.resource.name");
+    myOldValues.WriteSequence =
+      Interface_Static::CVal("write.step.sequence");
+    myOldValues.WriteVertexMode =
+      (STEPCAFControl_ConfigurationNode::WriteMode_VertexMode)
+      Interface_Static::IVal("write.step.vertex.mode");
+    myOldValues.WriteSubshapeNames =
+      Interface_Static::IVal("write.stepcaf.subshapes.name") == 1;
+
+    // Set new values
+    setStatic(theNode->InternalParameters);
+  }
+
+  //=======================================================================
+  // function : ~STEPCAFControl_ParameterController
+  // purpose  :
+  //=======================================================================
+  STEPCAFControl_ParameterController::~STEPCAFControl_ParameterController()
+  {
+    if (!myToUpdateStaticParameters)
+    {
+      return;
+    }
+    setStatic(myOldValues);
+  }
+
+  //=======================================================================
+  // function : setStatic
+  // purpose  :
+  //=======================================================================
+  void STEPCAFControl_ParameterController::setStatic(const STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection theParameter)
+  {
+    Interface_Static::SetIVal("read.iges.bspline.continuity",
+                              theParameter.ReadBSplineContinuity);
+    Interface_Static::SetIVal("read.precision.mode",
+                              theParameter.ReadPrecisionMode);
+    Interface_Static::SetRVal("read.precision.val",
+                              theParameter.ReadPrecisionVal);
+    Interface_Static::SetIVal("read.maxprecision.mode",
+                              theParameter.ReadMaxPrecisionMode);
+    Interface_Static::SetRVal("read.maxprecision.val",
+                              theParameter.ReadMaxPrecisionVal);
+    Interface_Static::SetIVal("read.stdsameparameter.mode",
+                              theParameter.ReadSameParamMode);
+    Interface_Static::SetIVal("read.surfacecurve.mode",
+                              theParameter.ReadSurfaceCurveMode);
+    Interface_Static::SetRVal("read.encoderegularity.angle",
+                              theParameter.EncodeRegAngle * M_PI / 180.0);
+    Interface_Static::SetIVal("step.angleunit.mode",
+                              theParameter.AngleUnit);
+
+    Interface_Static::SetCVal("read.step.resource.name",
+                              theParameter.ReadResourceName.ToCString());
+    Interface_Static::SetCVal("read.step.sequence",
+                              theParameter.ReadSequence.ToCString());
+    Interface_Static::SetIVal("read.step.product.mode",
+                              theParameter.ReadProductMode);
+    Interface_Static::SetIVal("read.step.product.context",
+                              theParameter.ReadProductContext);
+    Interface_Static::SetIVal("read.step.shape.repr",
+                              theParameter.ReadShapeRepr);
+    Interface_Static::SetIVal("read.step.tessellated",
+                              theParameter.ReadTessellated);
+    Interface_Static::SetIVal("read.step.assembly.level",
+                              theParameter.ReadAssemblyLevel);
+    Interface_Static::SetIVal("read.step.shape.relationship",
+                              theParameter.ReadRelationship);
+    Interface_Static::SetIVal("read.step.shape.aspect",
+                              theParameter.ReadShapeAspect);
+    Interface_Static::SetIVal("read.step.constructivegeom.relationship",
+                              theParameter.ReadConstrRelation);
+    Interface_Static::SetIVal("read.stepcaf.subshapes.name",
+                              theParameter.ReadSubshapeNames);
+    Interface_Static::SetIVal("read.step.codepage",
+                              theParameter.ReadCodePage);
+    Interface_Static::SetIVal("read.step.nonmanifold",
+                              theParameter.ReadNonmanifold);
+    Interface_Static::SetIVal("read.step.ideas",
+                              theParameter.ReadIdeas);
+    Interface_Static::SetIVal("read.step.all.shapes",
+                              theParameter.ReadAllShapes);
+    Interface_Static::SetIVal("read.step.root.transformation",
+                              theParameter.ReadRootTransformation);
+
+    Interface_Static::SetIVal("write.precision.mode",
+                              theParameter.WritePrecisionMode);
+    Interface_Static::SetRVal("write.precision.val",
+                              theParameter.WritePrecisionVal);
+    Interface_Static::SetIVal("write.step.assembly",
+                              theParameter.WriteAssembly);
+    Interface_Static::SetIVal("write.step.schema",
+                              theParameter.WriteSchema);
+    Interface_Static::SetIVal("write.step.tessellated",
+                              theParameter.WriteTessellated);
+    Interface_Static::SetCVal("write.step.product.name",
+                              theParameter.WriteProductName.ToCString());
+    Interface_Static::SetIVal("write.surfacecurve.mode",
+                              theParameter.WriteSurfaceCurMode);
+    Interface_Static::SetIVal("write.step.unit",
+                              theParameter.WriteUnit);
+    Interface_Static::SetCVal("write.resource.name",
+                              theParameter.WriteResourceName.ToCString());
+    Interface_Static::SetCVal("write.step.sequence",
+                              theParameter.WriteSequence.ToCString());
+    Interface_Static::SetIVal("write.step.vertex.mode",
+                              theParameter.WriteVertexMode);
+    Interface_Static::SetIVal("write.stepcaf.subshapes.name",
+                              theParameter.WriteSubshapeNames);
+  }
+}
+
 //=======================================================================
 // function : STEPCAFControl_Provider
 // purpose  :
@@ -67,212 +297,6 @@ void STEPCAFControl_Provider::personizeWS(Handle(XSControl_WorkSession)& theWS)
   }
 }
 
-//=======================================================================
-// function : initStatic
-// purpose  :
-//=======================================================================
-void STEPCAFControl_Provider::initStatic(const Handle(DE_ConfigurationNode)& theNode)
-{
-  Handle(STEPCAFControl_ConfigurationNode) aNode =
-    Handle(STEPCAFControl_ConfigurationNode)::DownCast(theNode);
-  STEPCAFControl_Controller::Init();
-  if (!myToUpdateStaticParameters)
-  {
-    return;
-  }
-  // Get previous values
-  myOldValues.ReadBSplineContinuity =
-    (STEPCAFControl_ConfigurationNode::ReadMode_BSplineContinuity)
-    Interface_Static::IVal("read.iges.bspline.continuity");
-  myOldValues.ReadPrecisionMode =
-    (STEPCAFControl_ConfigurationNode::ReadMode_Precision)
-    Interface_Static::IVal("read.precision.mode");
-  myOldValues.ReadPrecisionVal =
-    Interface_Static::RVal("read.precision.val");
-  myOldValues.ReadMaxPrecisionMode =
-    (STEPCAFControl_ConfigurationNode::ReadMode_MaxPrecision)
-    Interface_Static::IVal("read.maxprecision.mode");
-  myOldValues.ReadMaxPrecisionVal =
-    Interface_Static::RVal("read.maxprecision.val");
-  myOldValues.ReadSameParamMode =
-    Interface_Static::IVal("read.stdsameparameter.mode") == 1;
-  myOldValues.ReadSurfaceCurveMode =
-    (STEPCAFControl_ConfigurationNode::ReadMode_SurfaceCurve)
-    Interface_Static::IVal("read.surfacecurve.mode");
-  myOldValues.EncodeRegAngle =
-    Interface_Static::RVal("read.encoderegularity.angle") * 180.0 / M_PI;
-  myOldValues.AngleUnit =
-    (STEPCAFControl_ConfigurationNode::AngleUnitMode)
-    Interface_Static::IVal("step.angleunit.mode");
-
-  myOldValues.ReadResourceName =
-    Interface_Static::CVal("read.step.resource.name");
-  myOldValues.ReadSequence =
-    Interface_Static::CVal("read.step.sequence");
-  myOldValues.ReadProductMode =
-    Interface_Static::IVal("read.step.product.mode") == 1;
-  myOldValues.ReadProductContext =
-    (STEPCAFControl_ConfigurationNode::ReadMode_ProductContext)
-    Interface_Static::IVal("read.step.product.context");
-  myOldValues.ReadShapeRepr =
-    (STEPCAFControl_ConfigurationNode::ReadMode_ShapeRepr)
-    Interface_Static::IVal("read.step.shape.repr");
-  myOldValues.ReadTessellated =
-    (STEPCAFControl_ConfigurationNode::RWMode_Tessellated)
-    Interface_Static::IVal("read.step.tessellated");
-  myOldValues.ReadAssemblyLevel =
-    (STEPCAFControl_ConfigurationNode::ReadMode_AssemblyLevel)
-    Interface_Static::IVal("read.step.assembly.level");
-  myOldValues.ReadRelationship =
-    Interface_Static::IVal("read.step.shape.relationship") == 1;
-  myOldValues.ReadShapeAspect =
-    Interface_Static::IVal("read.step.shape.aspect") == 1;
-  myOldValues.ReadConstrRelation =
-    Interface_Static::IVal("read.step.constructivegeom.relationship") == 1;
-  myOldValues.ReadSubshapeNames =
-    Interface_Static::IVal("read.stepcaf.subshapes.name") == 1;
-  myOldValues.ReadCodePage =
-    (Resource_FormatType)Interface_Static::IVal("read.step.codepage");
-  myOldValues.ReadNonmanifold =
-    Interface_Static::IVal("read.step.nonmanifold") == 1;
-  myOldValues.ReadIdeas =
-    Interface_Static::IVal("read.step.ideas") == 1;
-  myOldValues.ReadAllShapes =
-    Interface_Static::IVal("read.step.all.shapes") == 1;
-  myOldValues.ReadRootTransformation =
-    Interface_Static::IVal("read.step.root.transformation") == 1;
-
-  myOldValues.WritePrecisionMode =
-    (STEPCAFControl_ConfigurationNode::WriteMode_PrecisionMode)
-    Interface_Static::IVal("write.precision.mode");
-  myOldValues.WritePrecisionVal =
-    Interface_Static::RVal("write.precision.val");
-  myOldValues.WriteAssembly =
-    (STEPCAFControl_ConfigurationNode::WriteMode_Assembly)
-    Interface_Static::IVal("write.step.assembly");
-  myOldValues.WriteSchema =
-    (STEPCAFControl_ConfigurationNode::WriteMode_StepSchema)
-    Interface_Static::IVal("write.step.schema");
-  myOldValues.WriteTessellated =
-    (STEPCAFControl_ConfigurationNode::RWMode_Tessellated)
-    Interface_Static::IVal("write.step.tessellated");
-  myOldValues.WriteProductName =
-    Interface_Static::CVal("write.step.product.name");
-  myOldValues.WriteSurfaceCurMode =
-    Interface_Static::IVal("write.surfacecurve.mode") == 1;
-  myOldValues.WriteUnit =
-    (UnitsMethods_LengthUnit)Interface_Static::IVal("write.step.unit");
-  myOldValues.WriteResourceName =
-    Interface_Static::CVal("write.resource.name");
-  myOldValues.WriteSequence =
-    Interface_Static::CVal("write.step.sequence");
-  myOldValues.WriteVertexMode =
-    (STEPCAFControl_ConfigurationNode::WriteMode_VertexMode)
-    Interface_Static::IVal("write.step.vertex.mode");
-  myOldValues.WriteSubshapeNames =
-    Interface_Static::IVal("write.stepcaf.subshapes.name") == 1;
-
-  // Set new values
-  setStatic(aNode->InternalParameters);
-}
-
-//=======================================================================
-// function : setStatic
-// purpose  :
-//=======================================================================
-void STEPCAFControl_Provider::setStatic(const STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection theParameter)
-{
-  Interface_Static::SetIVal("read.iges.bspline.continuity",
-                            theParameter.ReadBSplineContinuity);
-  Interface_Static::SetIVal("read.precision.mode",
-                            theParameter.ReadPrecisionMode);
-  Interface_Static::SetRVal("read.precision.val",
-                            theParameter.ReadPrecisionVal);
-  Interface_Static::SetIVal("read.maxprecision.mode",
-                            theParameter.ReadMaxPrecisionMode);
-  Interface_Static::SetRVal("read.maxprecision.val",
-                            theParameter.ReadMaxPrecisionVal);
-  Interface_Static::SetIVal("read.stdsameparameter.mode",
-                            theParameter.ReadSameParamMode);
-  Interface_Static::SetIVal("read.surfacecurve.mode",
-                            theParameter.ReadSurfaceCurveMode);
-  Interface_Static::SetRVal("read.encoderegularity.angle",
-                            theParameter.EncodeRegAngle * M_PI / 180.0);
-  Interface_Static::SetIVal("step.angleunit.mode",
-                            theParameter.AngleUnit);
-
-  Interface_Static::SetCVal("read.step.resource.name",
-                            theParameter.ReadResourceName.ToCString());
-  Interface_Static::SetCVal("read.step.sequence",
-                            theParameter.ReadSequence.ToCString());
-  Interface_Static::SetIVal("read.step.product.mode",
-                            theParameter.ReadProductMode);
-  Interface_Static::SetIVal("read.step.product.context",
-                            theParameter.ReadProductContext);
-  Interface_Static::SetIVal("read.step.shape.repr",
-                            theParameter.ReadShapeRepr);
-  Interface_Static::SetIVal("read.step.tessellated",
-                            theParameter.ReadTessellated);
-  Interface_Static::SetIVal("read.step.assembly.level",
-                            theParameter.ReadAssemblyLevel);
-  Interface_Static::SetIVal("read.step.shape.relationship",
-                            theParameter.ReadRelationship);
-  Interface_Static::SetIVal("read.step.shape.aspect",
-                            theParameter.ReadShapeAspect);
-  Interface_Static::SetIVal("read.step.constructivegeom.relationship",
-                            theParameter.ReadConstrRelation);
-  Interface_Static::SetIVal("read.stepcaf.subshapes.name",
-                            theParameter.ReadSubshapeNames);
-  Interface_Static::SetIVal("read.step.codepage",
-                            theParameter.ReadCodePage);
-  Interface_Static::SetIVal("read.step.nonmanifold",
-                            theParameter.ReadNonmanifold);
-  Interface_Static::SetIVal("read.step.ideas",
-                            theParameter.ReadIdeas);
-  Interface_Static::SetIVal("read.step.all.shapes",
-                            theParameter.ReadAllShapes);
-  Interface_Static::SetIVal("read.step.root.transformation",
-                            theParameter.ReadRootTransformation);
-
-  Interface_Static::SetIVal("write.precision.mode",
-                            theParameter.WritePrecisionMode);
-  Interface_Static::SetRVal("write.precision.val",
-                            theParameter.WritePrecisionVal);
-  Interface_Static::SetIVal("write.step.assembly",
-                            theParameter.WriteAssembly);
-  Interface_Static::SetIVal("write.step.schema",
-                            theParameter.WriteSchema);
-  Interface_Static::SetIVal("write.step.tessellated",
-                            theParameter.WriteTessellated);
-  Interface_Static::SetCVal("write.step.product.name",
-                            theParameter.WriteProductName.ToCString());
-  Interface_Static::SetIVal("write.surfacecurve.mode",
-                            theParameter.WriteSurfaceCurMode);
-  Interface_Static::SetIVal("write.step.unit",
-                            theParameter.WriteUnit);
-  Interface_Static::SetCVal("write.resource.name",
-                            theParameter.WriteResourceName.ToCString());
-  Interface_Static::SetCVal("write.step.sequence",
-                            theParameter.WriteSequence.ToCString());
-  Interface_Static::SetIVal("write.step.vertex.mode",
-                            theParameter.WriteVertexMode);
-  Interface_Static::SetIVal("write.stepcaf.subshapes.name",
-                            theParameter.WriteSubshapeNames);
-}
-
-//=======================================================================
-// function : resetStatic
-// purpose  :
-//=======================================================================
-void STEPCAFControl_Provider::resetStatic()
-{
-  if (!myToUpdateStaticParameters)
-  {
-    return;
-  }
-  setStatic(myOldValues);
-}
-
 //=======================================================================
 // function : Read
 // purpose  :
@@ -297,8 +321,7 @@ bool STEPCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
   }
   Handle(STEPCAFControl_ConfigurationNode) aNode =
     Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
-  initStatic(aNode);
-
+  STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
   personizeWS(theWS);
   XCAFDoc_DocumentTool::SetLengthUnit(theDocument,
                                       aNode->GlobalParameters.LengthUnit,
@@ -335,17 +358,14 @@ bool STEPCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : ["
       << aFile << "] : abandon, no model loaded";
-    resetStatic();
     return false;
   }
   if (!aReader.Transfer(theDocument, theProgress))
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : [" <<
       aFile << "] : Cannot read any relevant data from the STEP file";
-    resetStatic();
     return false;
   }
-  resetStatic();
   myProcessedExtFiles = aReader.ExternFiles();
   return true;
 }
@@ -376,8 +396,7 @@ bool STEPCAFControl_Provider::Read(std::istream& theIStream,
   }
   Handle(STEPCAFControl_ConfigurationNode) aNode =
     Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
-  initStatic(aNode);
-
+  STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
   personizeWS(theWS);
   XCAFDoc_DocumentTool::SetLengthUnit(theDocument,
                                       aNode->GlobalParameters.LengthUnit,
@@ -394,17 +413,14 @@ bool STEPCAFControl_Provider::Read(std::istream& theIStream,
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : "
       << "Abandon, no model loaded via stream";
-    resetStatic();
     return false;
   }
   if (!aReader.Transfer(theDocument, theProgress))
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : "
       << "Cannot read any relevant data from the STEP file";
-    resetStatic();
     return false;
   }
-  resetStatic();
   myProcessedExtFiles = aReader.ExternFiles();
   return true;
 }
@@ -427,13 +443,11 @@ bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
   }
   Handle(STEPCAFControl_ConfigurationNode) aNode =
     Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
-  initStatic(aNode);
+  STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
+  personizeWS(theWS);
   XCAFDoc_DocumentTool::SetLengthUnit(theDocument,
-                                      UnitsMethods::GetLengthUnitScale(
-                                      aNode->InternalParameters.WriteUnit,
-                                      UnitsMethods_LengthUnit_Millimeter),
+                                      aNode->GlobalParameters.LengthUnit,
                                       UnitsMethods_LengthUnit_Millimeter);
-  personizeWS(theWS);
   STEPCAFControl_Writer aWriter(theWS, Standard_True);
   STEPControl_StepModelType aMode =
     static_cast<STEPControl_StepModelType>(aNode->InternalParameters.WriteModelType);
@@ -489,12 +503,10 @@ bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : "
       << "The document cannot be translated or gives no result";
-    resetStatic();
     return false;
   }
   if (thePath == ".")
   {
-    resetStatic();
     Message::SendInfo() << "Document has been translated into the session";
     return true;
   }
@@ -502,11 +514,9 @@ bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : [" <<
       thePath << "] : Write failed";
-    resetStatic();
     return false;
   }
   Message::SendInfo() << "STEP file [" << thePath << "] Successfully written";
-  resetStatic();
   myProcessedExtFiles = aWriter.ExternFiles();
   return true;
 }
@@ -529,7 +539,7 @@ bool STEPCAFControl_Provider::Write(std::ostream& theOStream,
   }
   Handle(STEPCAFControl_ConfigurationNode) aNode =
     Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
-  initStatic(aNode);
+  STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
   personizeWS(theWS);
   STEPCAFControl_Writer aWriter(theWS, Standard_True);
   STEPControl_StepModelType aMode =
@@ -538,10 +548,6 @@ bool STEPCAFControl_Provider::Write(std::ostream& theOStream,
   aWriter.SetNameMode(aNode->InternalParameters.WriteName);
   aWriter.SetLayerMode(aNode->InternalParameters.WriteLayer);
   aWriter.SetPropsMode(aNode->InternalParameters.WriteProps);
-  Handle(StepData_StepModel) aModel = aWriter.ChangeWriter().Model();
-  aModel->SetWriteLengthUnit(UnitsMethods::GetLengthUnitScale(
-    aNode->InternalParameters.WriteUnit,
-    UnitsMethods_LengthUnit_Millimeter));
   TDF_LabelSequence aLabels;
   TCollection_AsciiString aLabelsString;
   for (TColStd_ListOfAsciiString::Iterator anIter(aNode->InternalParameters.WriteLabels);
@@ -588,17 +594,14 @@ bool STEPCAFControl_Provider::Write(std::ostream& theOStream,
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : "
       << "The document cannot be translated or gives no result";
-    resetStatic();
     return false;
   }
   if (aWriter.WriteStream(theOStream) != IFSelect_RetDone)
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : Write to stream failed";
-    resetStatic();
     return false;
   }
   Message::SendInfo() << "STEP file to stream successfully written";
-  resetStatic();
   myProcessedExtFiles = aWriter.ExternFiles();
   return true;
 }
@@ -622,14 +625,13 @@ bool STEPCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
   }
   Handle(STEPCAFControl_ConfigurationNode) aNode =
     Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
-  initStatic(aNode);
+  STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
   personizeWS(theWS);
   STEPControl_Reader aReader(theWS);
   if (aReader.ReadFile(thePath.ToCString()) != IFSelect_RetDone)
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : ["
       << thePath << "] : abandon, no model loaded";
-    resetStatic();
     return false;
   }
   Handle(StepData_StepModel) aModel = Handle(StepData_StepModel)::DownCast(aReader.Model());
@@ -638,11 +640,9 @@ bool STEPCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : [" <<
       thePath << "] : Cannot read any relevant data from the STEP file";
-    resetStatic();
     return false;
   }
   theShape = aReader.OneShape();
-  resetStatic();
   return true;
 }
 
@@ -666,14 +666,13 @@ bool STEPCAFControl_Provider::Read(std::istream& theIStream,
   }
   Handle(STEPCAFControl_ConfigurationNode) aNode =
     Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
-  initStatic(aNode);
+  STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
   personizeWS(theWS);
   STEPControl_Reader aReader(theWS);
   if (aReader.ReadStream(theName.ToCString(), theIStream) != IFSelect_RetDone)
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : "
       << "Abandon, no model loaded from STEP stream";
-    resetStatic();
     return false;
   }
   Handle(StepData_StepModel) aModel = Handle(StepData_StepModel)::DownCast(aReader.Model());
@@ -682,11 +681,9 @@ bool STEPCAFControl_Provider::Read(std::istream& theIStream,
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : "
       << "Cannot read any relevant data from the STEP stream";
-    resetStatic();
     return false;
   }
   theShape = aReader.OneShape();
-  resetStatic();
   return true;
 }
 
@@ -708,8 +705,7 @@ bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
   }
   Handle(STEPCAFControl_ConfigurationNode) aNode =
     Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
-  initStatic(aNode);
-
+  STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
   personizeWS(theWS);
   STEPControl_Writer aWriter(theWS, Standard_True);
   Handle(StepData_StepModel) aModel = aWriter.Model();
@@ -727,12 +723,10 @@ bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : "
       << "Can't translate shape to STEP model";
-    resetStatic();
     return false;
   }
   if (thePath == ".")
   {
-    resetStatic();
     Message::SendInfo() << "Step model has been translated into the session";
     return true;
   }
@@ -740,10 +734,8 @@ bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : "
       << "Can't write STEP file " << thePath;
-    resetStatic();
     return false;
   }
-  resetStatic();
   return true;
 }
 
@@ -765,8 +757,7 @@ bool STEPCAFControl_Provider::Write(std::ostream& theOStream,
   }
   Handle(STEPCAFControl_ConfigurationNode) aNode =
     Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
-  initStatic(aNode);
-
+  STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
   personizeWS(theWS);
   STEPControl_Writer aWriter(theWS, Standard_True);
   Handle(StepData_StepModel) aModel = aWriter.Model();
@@ -784,17 +775,14 @@ bool STEPCAFControl_Provider::Write(std::ostream& theOStream,
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : "
       << "Can't translate shape to STEP model";
-    resetStatic();
     return false;
   }
   if (aWriter.WriteStream(theOStream) != IFSelect_RetDone)
   {
     Message::SendFail() << "Error: STEPCAFControl_Provider : "
       << "Can't write STEP to stream";
-    resetStatic();
     return false;
   }
-  resetStatic();
   return true;
 }
 
index 75b029d55576cc848ff1b1d443152d8047383e69..79b91d5a12a7e370b81694623f3076d0c90fecb2 100644 (file)
@@ -170,19 +170,9 @@ private:
   //! @param[in] theWS current work session
   void personizeWS(Handle(XSControl_WorkSession)& theWS);
 
-  //! Initialize static variables
-  void initStatic(const Handle(DE_ConfigurationNode)& theNode);
-
-  //! Initialize static variables
-  void setStatic(const STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection theParameter);
-
-  //! Reset used interface static variables
-  void resetStatic();
-
 private:
 
   bool myToUpdateStaticParameters = true; //!< Flag to updating static parameters
-  STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection myOldValues; //!< Container to save previous static parameters
   NCollection_DataMap<TCollection_AsciiString, Handle(STEPCAFControl_ExternFile)> myProcessedExtFiles; //!< External files from the last operation
 
 };
index a15136359b9b39f2ceb1f22c8bab8634fb34f443..14d157e1c0132dfc2e46339278224289d7dcfdab 100644 (file)
@@ -854,7 +854,7 @@ static Standard_Integer WriteVrml(Draw_Interpretor& theDI,
   }
   Handle(Vrml_ConfigurationNode) aNode =
     new Vrml_ConfigurationNode();
-  aNode->GlobalParameters.LengthUnit = getLengthUnit(aDoc);
+  aNode->GlobalParameters.LengthUnit = getLengthUnit(aDoc) * 0.001;
   Handle(Vrml_Provider) aProvider =
     new Vrml_Provider(aNode);
 
index a6e96e7d6465c6bdd4790588dccc4ca769ccadca..000835de939950d8f06f075217c637a4ac235b39 100644 (file)
@@ -1,6 +1,6 @@
 # !!!! This file is generated automatically, do not edit manually! See end script
-puts "TODO CR23096 ALL: Error: First - file was not read - exception " 
-puts "TODO CR23096 ALL: Error : Here is reading problem" 
-
+puts "TODO CR00000 ALL: Error: First - file was not read - exception " 
+puts "TODO CR00000 ALL: Error : Here is reading problem" 
+puts "TODO CR00000 ALL: Error: STEPCAFControl_Provider" 
 
 set filename tr9_r0301-pe-adjusted.stp
index e22e7bce4305ebab093915d6e33a06bfaebbb8c9..1d6507d6b97243c384b40b91d7033d99e85d24e6 100644 (file)
@@ -1,6 +1,7 @@
 # !!!! This file is generated automatically, do not edit manually! See end script
-puts "TODO CR23096 ALL: Error: First - file was not read - exception " 
-puts "TODO CR23096 ALL: Error : Here is reading problem" 
+puts "TODO CR00000 ALL: Error: First - file was not read - exception " 
+puts "TODO CR00000 ALL: Error : Here is reading problem" 
+puts "TODO CR00000 ALL: Error: STEPCAFControl_Provider" 
 
 
 set filename buc60990.stp