diff --git a/src/Mod/Fem/femsolver/settings.py b/src/Mod/Fem/femsolver/settings.py index 4e6ec51bf3..22e455dcc3 100644 --- a/src/Mod/Fem/femsolver/settings.py +++ b/src/Mod/Fem/femsolver/settings.py @@ -1,5 +1,6 @@ # *************************************************************************** # * Copyright (c) 2017 Markus Hovorka * +# * Copyright (c) 2019 Bernd Hahnebach * # * * # * This program is free software; you can redistribute it and/or modify * # * it under the terms of the GNU Lesser General Public License (LGPL) * @@ -20,28 +21,34 @@ # *************************************************************************** __title__ = "FreeCAD FEM solver settings" -__author__ = "Markus Hovorka" +__author__ = "Markus Hovorka, Bernd Hahnebach" __url__ = "http://www.freecadweb.org" ## \addtogroup FEM # @{ -import distutils.spawn +''' +parameter in FreeCAD can be edited in two ways, either in the +Preferences: menu Edit --> Preferences +or +Parameter editor: menu Tools --> Edit parameter +''' + import FreeCAD +# working directory: possible choices TEMPORARY = "temporary" BESIDE = "beside" CUSTOM = "custom" +# FEM parameter location path _PARAM_PATH = "User parameter:BaseApp/Preferences/Mod/Fem/" _GENERAL_PARAM = _PARAM_PATH + "General" -_CCX_PARAM = _PARAM_PATH + "Ccx" -_ELMER_PARAM = _PARAM_PATH + "Elmer" -_Z88_PARAM = _PARAM_PATH + "Z88" +# ******** binary parameter ********************************************************************** class _BinaryDlg(object): def __init__(self, default, param, useDefault, customPath): @@ -51,34 +58,58 @@ class _BinaryDlg(object): self.customPath = customPath def getBinary(self): + + # get the parameter object where the paramete are saved in paramObj = FreeCAD.ParamGet(self.param) + + # set the binary path to the FreeCAD defaults, ATM pure unix shell commands without path names are used + # TODO see todo on useDefault later in this module binary = self.default FreeCAD.Console.PrintLog('Solver binary path: {} \n'.format(binary)) + + # check if useDefault is set to True + # if True the standard binary path will be overwritten with a user binary path if not paramObj.GetBool(self.useDefault, True): binary = paramObj.GetString(self.customPath) FreeCAD.Console.PrintLog('Solver binary path: {} \n'.format(binary)) - return distutils.spawn.find_executable(binary) + + # get the whole binary path name for the given command or binary path and return it + from distutils.spawn import find_executable as find_bin + return find_bin(binary) +''' +default: + default command to run the binary, this one is taken if the UseStandardXXXLocation is not given or set to True +param: + path where these settings are saved, in FEM normally one path in one Tab in Preferences GUI +useDefault: + the UseStandardXXXLocation parameter identifier + if this parameter is set to True FreeCAD standards for the binary are used, or FreeCAD tries to find the binary + TODO: see method setup_ccx in ccx tools module, which sets up ccx binary for various os +customPath: + the xxxBinaryPath parameter identifier + binary path given by the user +''' _BINARIES = { "Calculix": _BinaryDlg( default="ccx", - param=_CCX_PARAM, + param=_PARAM_PATH + "Ccx", useDefault="UseStandardCcxLocation", customPath="ccxBinaryPath"), "ElmerSolver": _BinaryDlg( default="ElmerSolver", - param=_ELMER_PARAM, + param=_PARAM_PATH + "Elmer", useDefault="UseStandardElmerLocation", customPath="elmerBinaryPath"), "ElmerGrid": _BinaryDlg( default="ElmerGrid", - param=_ELMER_PARAM, + param=_PARAM_PATH + "Elmer", useDefault="UseStandardGridLocation", customPath="gridBinaryPath"), "Z88": _BinaryDlg( default="z88r", - param=_Z88_PARAM, + param=_PARAM_PATH + "Z88", useDefault="UseStandardZ88Location", customPath="z88BinaryPath"), } @@ -96,6 +127,7 @@ def getBinary(name): return None +# ******** working directory parameter *********************************************************** def getCustomDir(): param = FreeCAD.ParamGet(_GENERAL_PARAM) return param.GetString("CustomDirectoryPath")