FEM: add preference setting to keep results on rerun an analysis
This commit is contained in:
parent
62cb403125
commit
fca5cd99bb
|
@ -76,6 +76,16 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
|
|||
self.mesh.ViewObject.ElementColor = {}
|
||||
self.mesh.ViewObject.setNodeColorByScalars()
|
||||
|
||||
## Resets mesh color, deformation and removes all result objects if preferences to keep them is not set
|
||||
# @param self The python object self
|
||||
def reset_mesh_purge_results_checked(self):
|
||||
self.fem_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem")
|
||||
keep_results_on_rerun = self.fem_prefs.GetBool("KeepResultsOnReRun", False)
|
||||
if not keep_results_on_rerun:
|
||||
self.purge_results()
|
||||
self.reset_mesh_color()
|
||||
self.reset_mesh_deformation()
|
||||
|
||||
## Resets mesh color, deformation and removes all result objects
|
||||
# @param self The python object self
|
||||
def reset_all(self):
|
||||
|
@ -96,6 +106,8 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
|
|||
self.reset_mesh_color()
|
||||
return
|
||||
if self.result_object:
|
||||
if self.result_object.Mesh.ViewObject.Visibility is False:
|
||||
self.result_object.Mesh.ViewObject.Visibility = True
|
||||
if result_type == "Sabs":
|
||||
values = self.result_object.StressValues
|
||||
elif result_type == "Uabs":
|
||||
|
@ -362,13 +374,31 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
|
|||
# Update inp file name
|
||||
self.set_inp_file_name()
|
||||
|
||||
## Set the analysis result object
|
||||
# if no result object is provided, check if the analysis has result objects
|
||||
# if the analysis has exact one result object use this result object
|
||||
# @param self The python object self
|
||||
# @param result object name
|
||||
def use_results(self, results_name=None):
|
||||
self.result_object = None
|
||||
if results_name is not None:
|
||||
for m in self.analysis.Member:
|
||||
if m.isDerivedFrom("Fem::FemResultObject") and m.Name == results_name:
|
||||
self.result_object = m
|
||||
break
|
||||
if not self.result_object:
|
||||
raise Exception("{} doesn't exist".format(results_name))
|
||||
else:
|
||||
has_results = False
|
||||
for m in self.analysis.Member:
|
||||
if m.isDerivedFrom("Fem::FemResultObject"):
|
||||
self.result_object = m
|
||||
if has_results is True:
|
||||
self.result_object = None
|
||||
raise Exception("No result name was provided, but more than one result objects in the analysis.")
|
||||
has_results = True
|
||||
if not self.result_object:
|
||||
raise Exception("No result object found in the analysis")
|
||||
|
||||
## Returns minimum, average and maximum value for provided result type
|
||||
# @param self The python object self
|
||||
|
|
|
@ -194,11 +194,10 @@ class FemToolsCcx(FemTools.FemTools):
|
|||
import ccxFrdReader
|
||||
frd_result_file = os.path.splitext(self.inp_file_name)[0] + '.frd'
|
||||
if os.path.isfile(frd_result_file):
|
||||
ccxFrdReader.importFrd(frd_result_file, self.analysis)
|
||||
result_name_prefix = 'CalculiX_' + self.solver.AnalysisType + '_'
|
||||
ccxFrdReader.importFrd(frd_result_file, self.analysis, result_name_prefix)
|
||||
for m in self.analysis.Member:
|
||||
if m.isDerivedFrom("Fem::FemResultObject"):
|
||||
self.result_object = m
|
||||
if self.result_object:
|
||||
self.results_present = True
|
||||
else:
|
||||
raise Exception('FEM: No results found at {}!'.format(frd_result_file))
|
||||
|
|
|
@ -121,15 +121,13 @@ class FemToolsZ88(FemTools.FemTools):
|
|||
# z88_testrun for memory
|
||||
QtCore.QDir.setCurrent(self.calc_path.path())
|
||||
if not self.z88_is_running:
|
||||
#self.z88_binary = "/home/hugo/z88progr/z88v14os/bin/unix64/z88r"
|
||||
#self.z88_testrun.start(self.z88_binary, ["-c -choly"])
|
||||
z88_testrun_binary = self.z88_binary + " -t -choly"
|
||||
print("Testrun Z88")
|
||||
print(z88_testrun_binary)
|
||||
self.z88_is_running = True
|
||||
self.z88_testrun.start(z88_testrun_binary)
|
||||
else:
|
||||
print("Can not stat CalculiX, because it runs (testrun)!")
|
||||
print("Unable to start Z88, because it runs (testrun)!")
|
||||
QtCore.QDir.setCurrent(self.cwd)
|
||||
QApplication.restoreOverrideCursor()
|
||||
|
||||
|
@ -143,7 +141,7 @@ class FemToolsZ88(FemTools.FemTools):
|
|||
self.z88_is_running = True
|
||||
self.z88_solverun.start(z88_solverun_binary)
|
||||
else:
|
||||
print("Can not stat CalculiX, because it runs (solverun)!")
|
||||
print("Unable to start Z88, because it runs (solverun)!")
|
||||
QtCore.QDir.setCurrent(self.cwd)
|
||||
QApplication.restoreOverrideCursor()
|
||||
|
||||
|
@ -179,11 +177,10 @@ class FemToolsZ88(FemTools.FemTools):
|
|||
import z88DispReader
|
||||
disp_result_file = self.working_dir + '/z88o2.txt'
|
||||
if os.path.isfile(disp_result_file):
|
||||
z88DispReader.import_z88_disp(disp_result_file, self.analysis)
|
||||
result_name_prefix = 'Z88_' + self.solver.AnalysisType + '_'
|
||||
z88DispReader.import_z88_disp(disp_result_file, self.analysis, result_name_prefix)
|
||||
for m in self.analysis.Member:
|
||||
if m.isDerivedFrom("Fem::FemResultObject"):
|
||||
self.result_object = m
|
||||
if self.result_object:
|
||||
self.results_present = True
|
||||
else:
|
||||
raise Exception('FEM: No results found at {}!'.format(disp_result_file))
|
||||
|
|
|
@ -573,6 +573,25 @@
|
|||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<widget class="Gui::PrefCheckBox" name="cb_keep_results_on_rerun">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Keep results on calculation Re-Run</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>KeepResultsOnReRun</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Fem</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Gui::PrefCheckBox" name="cb_restore_result_dialog">
|
||||
<property name="text">
|
||||
|
|
|
@ -62,6 +62,7 @@ void DlgSettingsFemImp::saveSettings()
|
|||
cb_use_mat_from_custom_dir->onSave();
|
||||
fc_custom_mat_dir->onSave();
|
||||
cb_restore_result_dialog->onSave();
|
||||
cb_keep_results_on_rerun->onSave();
|
||||
}
|
||||
|
||||
void DlgSettingsFemImp::loadSettings()
|
||||
|
@ -80,6 +81,7 @@ void DlgSettingsFemImp::loadSettings()
|
|||
cb_use_mat_from_custom_dir->onRestore();
|
||||
fc_custom_mat_dir->onRestore();
|
||||
cb_restore_result_dialog->onRestore();
|
||||
cb_keep_results_on_rerun->onRestore();
|
||||
|
||||
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath
|
||||
("User parameter:BaseApp/Preferences/Mod/Fem");
|
||||
|
|
|
@ -243,7 +243,6 @@ class FemTest(unittest.TestCase):
|
|||
|
||||
fcc_print('Checking FEM frd file read from static analysis...')
|
||||
fea.load_results()
|
||||
fcc_print('Result object created as \"{}\"'.format(fea.result_object.Name))
|
||||
self.assertTrue(fea.results_present, "Cannot read results from {}.frd frd file".format(fea.base_name))
|
||||
|
||||
fcc_print('Reading stats from result object for static analysis...')
|
||||
|
@ -293,8 +292,6 @@ class FemTest(unittest.TestCase):
|
|||
|
||||
fcc_print('Checking FEM frd file read from frequency analysis...')
|
||||
fea.load_results()
|
||||
|
||||
fcc_print('Last result object created as \"{}\"'.format(fea.result_object.Name))
|
||||
self.assertTrue(fea.results_present, "Cannot read results from {}.frd frd file".format(fea.base_name))
|
||||
|
||||
fcc_print('Reading stats from result object for frequency analysis...')
|
||||
|
|
|
@ -54,7 +54,7 @@ class _CommandRunSolver(FemCommands):
|
|||
if FreeCADGui.Selection.getSelection()[0].SolverType == "FemSolverCalculix":
|
||||
import FemToolsCcx
|
||||
self.fea = FemToolsCcx.FemToolsCcx()
|
||||
self.fea.reset_all()
|
||||
self.fea.reset_mesh_purge_results_checked()
|
||||
message = self.fea.check_prerequisites()
|
||||
if message:
|
||||
QtGui.QMessageBox.critical(None, "Missing prerequisite", message)
|
||||
|
@ -64,7 +64,7 @@ class _CommandRunSolver(FemCommands):
|
|||
elif FreeCADGui.Selection.getSelection()[0].SolverType == "FemSolverZ88":
|
||||
import FemToolsZ88
|
||||
self.fea = FemToolsZ88.FemToolsZ88()
|
||||
self.fea.reset_all()
|
||||
self.fea.reset_mesh_purge_results_checked()
|
||||
message = self.fea.check_prerequisites()
|
||||
if message:
|
||||
QtGui.QMessageBox.critical(None, "Missing prerequisite", message)
|
||||
|
|
|
@ -142,7 +142,7 @@ class _TaskPanelFemSolverCalculix:
|
|||
self.femConsoleMessage("Loading result sets...")
|
||||
self.form.l_time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start))
|
||||
fea = FemToolsCcx.FemToolsCcx()
|
||||
fea.reset_all()
|
||||
fea.reset_mesh_purge_results_checked()
|
||||
fea.inp_file_name = self.inp_file_name
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
fea.load_results()
|
||||
|
|
|
@ -305,7 +305,7 @@ def calculate_von_mises(i):
|
|||
return vm_stress
|
||||
|
||||
|
||||
def importFrd(filename, analysis=None):
|
||||
def importFrd(filename, analysis=None, result_name_prefix=None):
|
||||
m = readResult(filename)
|
||||
mesh_object = None
|
||||
if(len(m['Nodes']) > 0):
|
||||
|
@ -341,9 +341,9 @@ def importFrd(filename, analysis=None):
|
|||
for result_set in m['Results']:
|
||||
eigenmode_number = result_set['number']
|
||||
if eigenmode_number > 0:
|
||||
results_name = 'Mode_' + str(eigenmode_number) + '_results'
|
||||
results_name = result_name_prefix + 'mode_' + str(eigenmode_number) + '_results'
|
||||
else:
|
||||
results_name = 'Results'
|
||||
results_name = result_name_prefix + 'results'
|
||||
results = FreeCAD.ActiveDocument.addObject('Fem::FemResultObject', results_name)
|
||||
for m in analysis_object.Member:
|
||||
if m.isDerivedFrom("Fem::FemMeshObject"):
|
||||
|
|
|
@ -53,7 +53,7 @@ def insert(filename, docname):
|
|||
import_z88_disp(filename)
|
||||
|
||||
|
||||
def import_z88_disp(filename, analysis=None):
|
||||
def import_z88_disp(filename, analysis=None, result_name_prefix=None):
|
||||
'''insert a FreeCAD FEM Result object in the ActiveDocument
|
||||
'''
|
||||
m = read_z88_disp(filename)
|
||||
|
@ -67,7 +67,7 @@ def import_z88_disp(filename, analysis=None):
|
|||
analysis_object = analysis # see if statement few lines later, if not analysis -> no FemMesh object is created !
|
||||
|
||||
for result_set in m['Results']:
|
||||
results_name = 'Results'
|
||||
results_name = result_name_prefix + 'results'
|
||||
results = FreeCAD.ActiveDocument.addObject('Fem::FemResultObject', results_name)
|
||||
for m in analysis_object.Member:
|
||||
if m.isDerivedFrom("Fem::FemMeshObject"):
|
||||
|
|
Loading…
Reference in New Issue
Block a user