From f2b7f2805f45952c8ddb36ef652c86d10bb63ebd Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 6 Nov 2019 16:09:50 +0100 Subject: [PATCH] improve detection of OpenSCAD executable to print a more appropriate error message in case of failures --- src/Mod/Mesh/Gui/Command.cpp | 6 +++--- src/Mod/OpenSCAD/OpenSCADUtils.py | 11 +++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Mod/Mesh/Gui/Command.cpp b/src/Mod/Mesh/Gui/Command.cpp index e45348d18c..e4e3eafec7 100644 --- a/src/Mod/Mesh/Gui/Command.cpp +++ b/src/Mod/Mesh/Gui/Command.cpp @@ -254,7 +254,7 @@ void CmdMeshUnion::activated(int) PyObject* dict = PyModule_GetDict(main); Py::Dict d(PyDict_Copy(dict), true); - const char* cmd = "import OpenSCADUtils\nopenscadfilename = OpenSCADUtils.searchforopenscadexe()"; + const char* cmd = "import OpenSCADUtils\nopenscadfilename = OpenSCADUtils.getopenscadexe()"; PyObject* result = PyRun_String(cmd, Py_file_input, d.ptr(), d.ptr()); Py_XDECREF(result); @@ -324,7 +324,7 @@ void CmdMeshDifference::activated(int) PyObject* dict = PyModule_GetDict(main); Py::Dict d(PyDict_Copy(dict), true); - const char* cmd = "import OpenSCADUtils\nopenscadfilename = OpenSCADUtils.searchforopenscadexe()"; + const char* cmd = "import OpenSCADUtils\nopenscadfilename = OpenSCADUtils.getopenscadexe()"; PyObject* result = PyRun_String(cmd, Py_file_input, d.ptr(), d.ptr()); Py_XDECREF(result); @@ -394,7 +394,7 @@ void CmdMeshIntersection::activated(int) PyObject* dict = PyModule_GetDict(main); Py::Dict d(PyDict_Copy(dict), true); - const char* cmd = "import OpenSCADUtils\nopenscadfilename = OpenSCADUtils.searchforopenscadexe()"; + const char* cmd = "import OpenSCADUtils\nopenscadfilename = OpenSCADUtils.getopenscadexe()"; PyObject* result = PyRun_String(cmd, Py_file_input, d.ptr(), d.ptr()); Py_XDECREF(result); diff --git a/src/Mod/OpenSCAD/OpenSCADUtils.py b/src/Mod/OpenSCAD/OpenSCADUtils.py index 5069a2e922..4596c9f5a0 100644 --- a/src/Mod/OpenSCAD/OpenSCADUtils.py +++ b/src/Mod/OpenSCAD/OpenSCADUtils.py @@ -57,6 +57,17 @@ class OpenSCADError(BaseError): def __str__(self): return repr(self.value) +def getopenscadexe(osfilename=None): + import os,subprocess,time + if not osfilename: + import FreeCAD + osfilename = FreeCAD.ParamGet(\ + "User parameter:BaseApp/Preferences/Mod/OpenSCAD").\ + GetString('openscadexecutable') + if osfilename and os.path.isfile(osfilename): + return osfilename + return searchforopenscadexe() + def searchforopenscadexe(): import os,sys,subprocess if sys.platform == 'win32':