improve detection of OpenSCAD executable to print a more appropriate error message in case of failures

This commit is contained in:
wmayer
2019-11-06 16:09:50 +01:00
parent 843d8ba8b1
commit f2b7f2805f
2 changed files with 14 additions and 3 deletions

View File

@@ -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);

View File

@@ -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':