Salome HOME
Merge branch 'V9_11_BR'
authorjfa <jfa@opencascade.com>
Wed, 19 Jul 2023 15:12:36 +0000 (16:12 +0100)
committerjfa <jfa@opencascade.com>
Wed, 19 Jul 2023 15:12:36 +0000 (16:12 +0100)
src/NETGENPlugin/NETGENPlugin_Mesher.cxx
src/NETGENPlugin/NETGENPlugin_Mesher.hxx

index 331192c113482c600fb2dc31688659a3d2c374e0..30215872ec357aa8e398d2274ea4f70f8af54eef 100644 (file)
@@ -504,6 +504,8 @@ namespace
 
 } // namespace
 
+
+
 //=============================================================================
 /*!
  *
@@ -4440,7 +4442,7 @@ int& NETGENPlugin_NetgenLibWrapper::instanceCounter()
 //================================================================================
 
 NETGENPlugin_NetgenLibWrapper::NETGENPlugin_NetgenLibWrapper():
-  _ngMesh(0)
+  _ngMesh(0),_tmpDir(SALOMEDS_Tool::GetTmpDir())
 {
   if ( instanceCounter() == 0 )
   {
index 7f028cb820728ab4df86a4622c3cf02e6871b985..fe66ad2623ed5a3a17f1ee3e4617996995ad776c 100644 (file)
@@ -35,7 +35,9 @@
 #include <SMDS_MeshElement.hxx>
 #include <SMESH_Algo.hxx>
 #include <SMESH_ProxyMesh.hxx>
-
+#include <SALOMEDS_Tool.hxx>
+#include "Basics_Utils.hxx"
+#include "SALOME_Basics.hxx"
 #include <TopTools_IndexedMapOfShape.hxx>
 
 namespace nglib {
@@ -59,6 +61,32 @@ namespace netgen {
   class OCCGeometry;
   class Mesh;
 }
+
+// Class for temporary folder switching
+class ChdirRAII
+{
+  public:
+#ifndef WIN32
+    ChdirRAII(const std::string& wd):_wd(wd) { if(_wd.empty()) return ; char *pwd(get_current_dir_name()); _od = pwd; free(pwd); chdir(_wd.c_str()); }
+    ~ChdirRAII() { if(_od.empty()) return ; chdir(_od.c_str()); }
+#else
+    ChdirRAII(const std::string& wd) : _wd(wd) {
+      if (_wd.empty())
+        return;
+      TCHAR pwd[MAX_PATH];
+      GetCurrentDirectory(sizeof(pwd), pwd);
+      _od = Kernel_Utils::utf8_encode_s(pwd);
+      SetCurrentDirectory(Kernel_Utils::utf8_decode_s(_wd).c_str());
+    }
+    ~ChdirRAII() {
+      if (_od.empty()) return;
+      SetCurrentDirectory(Kernel_Utils::utf8_decode_s(_od).c_str());
+    }
+#endif
+  private:
+    std::string _wd;
+    std::string _od;
+};
 //=============================================================================
 /*!
  * \brief Struct storing nb of entities in netgen mesh
@@ -111,6 +139,9 @@ struct NETGENPLUGIN_EXPORT NETGENPlugin_NetgenLibWrapper
   std::string getOutputFileName();
   void        removeOutputFile();
   std::string _outputFileName;
+  // This will change current directory when the class is instanciated and switch
+  ChdirRAII _tmpDir;
+
 
   ostream *       _ngcout;
   ostream *       _ngcerr;