From 4586eba18f94f4f606cb9238a0f5bc7cdd1938bc Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Sun, 24 Jan 2016 08:38:10 +0000 Subject: [PATCH] don't hardcode solver extensions: use new Solver.Extension? option --- Common/Context.h | 3 ++- Common/DefaultOptions.h | 21 +++++++++++++++ Common/OpenFile.cpp | 58 ++++++++++++++++++++++------------------- Common/Options.cpp | 58 +++++++++++++++++++++++++++++++++++++++++ Common/Options.h | 11 ++++++++ 5 files changed, 123 insertions(+), 28 deletions(-) diff --git a/Common/Context.h b/Common/Context.h index e08c318c3f..7647532ecf 100644 --- a/Common/Context.h +++ b/Common/Context.h @@ -259,7 +259,8 @@ class CTX { int plugins, listen; double timeout; std::string socketName, pythonInterpreter, octaveInterpreter; - std::string name[NUM_SOLVERS], executable[NUM_SOLVERS], remoteLogin[NUM_SOLVERS]; + std::string name[NUM_SOLVERS], extension[NUM_SOLVERS]; + std::string executable[NUM_SOLVERS], remoteLogin[NUM_SOLVERS]; int autoSaveDatabase, autoArchiveOutputFiles, autoMesh, autoMergeFile; int autoShowViews, autoShowLastStep, autoCheck, showInvisibleParameters; }solver; diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h index 6c51538984..06c9936ff4 100644 --- a/Common/DefaultOptions.h +++ b/Common/DefaultOptions.h @@ -189,6 +189,27 @@ StringXString SolverOptions_String[] = { { F|S, "Name9" , opt_solver_name9 , "" , "Name of solver 9" }, + { F|S, "Extension0" , opt_solver_extension0 , ".pro" , + "File extension for solver 0" }, + { F|S, "Extension1" , opt_solver_extension1 , "" , + "File extension for solver 1" }, + { F|S, "Extension2" , opt_solver_extension2 , "" , + "File extension for solver 2" }, + { F|S, "Extension3" , opt_solver_extension3 , "" , + "File extension for solver 3" }, + { F|S, "Extension4" , opt_solver_extension4 , "" , + "File extension for solver 4" }, + { F|S, "Extension5" , opt_solver_extension5 , "" , + "File extension for solver 5" }, + { F|S, "Extension6" , opt_solver_extension6 , "" , + "File extension for solver 6" }, + { F|S, "Extension7" , opt_solver_extension7 , "" , + "File extension for solver 7" }, + { F|S, "Extension8" , opt_solver_extension8 , "" , + "File extension for solver 8" }, + { F|S, "Extension9" , opt_solver_extension9 , "" , + "File extension for solver 9" }, + { F|S, "OctaveInterpreter" , opt_solver_octave_interpreter , "octave" , "Name of the Octave interpreter (used to run .m files)" }, { F|S, "PythonInterpreter" , opt_solver_python_interpreter , "python" , diff --git a/Common/OpenFile.cpp b/Common/OpenFile.cpp index 711daa5d2b..cdbe0a1a71 100644 --- a/Common/OpenFile.cpp +++ b/Common/OpenFile.cpp @@ -276,6 +276,15 @@ void ParseString(const std::string &str, bool inCurrentModelDir) } } +static std::string getSolverForExtension(const std::string &ext) +{ + for(int i = 0; i < NUM_SOLVERS; i++){ + if(opt_solver_extension(i, GMSH_GET, "") == ext) + return opt_solver_name(i, GMSH_GET, ""); + } + return ""; +} + static int defineSolver(const std::string &name) { for(int i = 0; i < NUM_SOLVERS; i++){ @@ -343,6 +352,28 @@ int MergeFile(const std::string &fileName, bool warnIfMissing, bool setWindowTit #endif int status = 0; +#if defined(HAVE_ONELAB) + std::string solver = getSolverForExtension(ext); + if(solver.size()){ + int num = defineSolver(solver); + GModel::current()->setName(split[1] + ".geo"); + GModel::current()->setFileName(split[0] + split[1] + ".geo"); + CTX::instance()->launchSolverAtStartup = num; + CTX::instance()->solverToRun = num; // used in ONELAB2 + return 1; + + } + else if(ext == ".py" || ext == ".PY" || + ext == ".m" || ext == ".M" || + ext == ".exe" || ext == ".EXE"){ + int num = defineSolver(split[1]); + opt_solver_executable(num, GMSH_SET, fileName); + CTX::instance()->launchSolverAtStartup = num; + CTX::instance()->solverToRun = num; // used in ONELAB2 + return 1; + } + else +#endif if(ext == ".stl" || ext == ".STL"){ status = GModel::current()->readSTL(fileName, CTX::instance()->geom.tolerance); } @@ -433,33 +464,6 @@ int MergeFile(const std::string &fileName, bool warnIfMissing, bool setWindowTit else if(ext == ".csv"){ status = readFile3M(fileName); } -#endif -#if defined(HAVE_ONELAB) - else if(ext == ".pro" || ext == ".PRO"){ - int num = defineSolver("GetDP"); - GModel::current()->setName(split[1] + ".geo"); - GModel::current()->setFileName(split[0] + split[1] + ".geo"); - CTX::instance()->launchSolverAtStartup = num; - CTX::instance()->solverToRun = num; // used in ONELAB2 - return 1; - } - else if(ext == ".vnek" || ext == ".VNEK"){ - int num = defineSolver("vNek.exe"); - GModel::current()->setName(split[1] + ".vnek"); - GModel::current()->setFileName(split[0] + split[1] + ".vnek"); - CTX::instance()->launchSolverAtStartup = num; - CTX::instance()->solverToRun = num; // used in ONELAB2 - return 1; - } - else if(ext == ".py" || ext == ".PY" || - ext == ".m" || ext == ".M" || - ext == ".exe" || ext == ".EXE"){ - int num = defineSolver(split[1]); - opt_solver_executable(num, GMSH_SET, fileName); - CTX::instance()->launchSolverAtStartup = num; - CTX::instance()->solverToRun = num; // used in ONELAB2 - return 1; - } #endif else { CTX::instance()->geom.draw = 1; diff --git a/Common/Options.cpp b/Common/Options.cpp index e54d7756b9..ff2cafc5d4 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -1433,6 +1433,64 @@ std::string opt_solver_name9(OPT_ARGS_STR) return opt_solver_name(9, action, val); } +std::string opt_solver_extension(OPT_ARGS_STR) +{ + if(num < 0 || num > NUM_SOLVERS - 1) return ""; + if(action & GMSH_SET) + CTX::instance()->solver.extension[num] = val; + return CTX::instance()->solver.extension[num]; +} + +std::string opt_solver_extension0(OPT_ARGS_STR) +{ + return opt_solver_extension(0, action, val); +} + +std::string opt_solver_extension1(OPT_ARGS_STR) +{ + return opt_solver_extension(1, action, val); +} + +std::string opt_solver_extension2(OPT_ARGS_STR) +{ + return opt_solver_extension(2, action, val); +} + +std::string opt_solver_extension3(OPT_ARGS_STR) +{ + return opt_solver_extension(3, action, val); +} + +std::string opt_solver_extension4(OPT_ARGS_STR) +{ + return opt_solver_extension(4, action, val); +} + +std::string opt_solver_extension5(OPT_ARGS_STR) +{ + return opt_solver_extension(5, action, val); +} + +std::string opt_solver_extension6(OPT_ARGS_STR) +{ + return opt_solver_extension(6, action, val); +} + +std::string opt_solver_extension7(OPT_ARGS_STR) +{ + return opt_solver_extension(7, action, val); +} + +std::string opt_solver_extension8(OPT_ARGS_STR) +{ + return opt_solver_extension(8, action, val); +} + +std::string opt_solver_extension9(OPT_ARGS_STR) +{ + return opt_solver_extension(9, action, val); +} + std::string opt_solver_executable(OPT_ARGS_STR) { if(num < 0 || num > NUM_SOLVERS - 1) return ""; diff --git a/Common/Options.h b/Common/Options.h index 6d85ca161c..71afb1ac84 100644 --- a/Common/Options.h +++ b/Common/Options.h @@ -74,6 +74,17 @@ std::string opt_solver_name6(OPT_ARGS_STR); std::string opt_solver_name7(OPT_ARGS_STR); std::string opt_solver_name8(OPT_ARGS_STR); std::string opt_solver_name9(OPT_ARGS_STR); +std::string opt_solver_extension(OPT_ARGS_STR); +std::string opt_solver_extension0(OPT_ARGS_STR); +std::string opt_solver_extension1(OPT_ARGS_STR); +std::string opt_solver_extension2(OPT_ARGS_STR); +std::string opt_solver_extension3(OPT_ARGS_STR); +std::string opt_solver_extension4(OPT_ARGS_STR); +std::string opt_solver_extension5(OPT_ARGS_STR); +std::string opt_solver_extension6(OPT_ARGS_STR); +std::string opt_solver_extension7(OPT_ARGS_STR); +std::string opt_solver_extension8(OPT_ARGS_STR); +std::string opt_solver_extension9(OPT_ARGS_STR); std::string opt_solver_executable(OPT_ARGS_STR); std::string opt_solver_executable0(OPT_ARGS_STR); std::string opt_solver_executable1(OPT_ARGS_STR); -- GitLab