From ebbe781771c839f757e81eaa3e7b1f202f440a0c Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Tue, 29 Jan 2019 23:51:43 +0100 Subject: [PATCH] FEM: import tools, displacement abs, move calculation and adding into result tools --- src/Mod/Fem/feminout/importCcxFrdResults.py | 1 + src/Mod/Fem/feminout/importToolsFem.py | 7 ------- src/Mod/Fem/feminout/importVTKResults.py | 7 +++---- src/Mod/Fem/femresult/resulttools.py | 14 ++++++++++++++ 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/Mod/Fem/feminout/importCcxFrdResults.py b/src/Mod/Fem/feminout/importCcxFrdResults.py index 40ba1ca462..d4b8dc4ac3 100644 --- a/src/Mod/Fem/feminout/importCcxFrdResults.py +++ b/src/Mod/Fem/feminout/importCcxFrdResults.py @@ -103,6 +103,7 @@ def importFrd(filename, analysis=None, result_name_prefix=None): # only compact result if not Flow 1D results # compact result object, workaround for bug 2873, https://www.freecadweb.org/tracker/view.php?id=2873 res_obj = restools.compact_result(res_obj) + res_obj = restools.add_disp_apps(res_obj) # fill DisplacementLengths res_obj = restools.fill_femresult_stats(res_obj) # fill Stats else: error_message = ( diff --git a/src/Mod/Fem/feminout/importToolsFem.py b/src/Mod/Fem/feminout/importToolsFem.py index 11cc00d3e6..6c9962e899 100644 --- a/src/Mod/Fem/feminout/importToolsFem.py +++ b/src/Mod/Fem/feminout/importToolsFem.py @@ -240,7 +240,6 @@ def fill_femresult_mechanical(results, result_set): results.DisplacementVectors = list(map((lambda x: x * scale), disp.values())) results.NodeNumbers = list(disp.keys()) - results.DisplacementLengths = calculate_disp_abs(displacement) if 'stress' in result_set: stress = result_set['stress'] @@ -368,12 +367,6 @@ def calculate_principal_stress(i): return (float('NaN'), float('NaN'), float('NaN'), float('NaN')) -def calculate_disp_abs(displacements): - disp_abs = [] - for d in displacements: - disp_abs.append(sqrt(pow(d[0], 2) + pow(d[1], 2) + pow(d[2], 2))) - return disp_abs - def get_span(node_items): positions = [] # list of node vectors for k, v in node_items: diff --git a/src/Mod/Fem/feminout/importVTKResults.py b/src/Mod/Fem/feminout/importVTKResults.py index 8b3af92984..6d05f198f5 100644 --- a/src/Mod/Fem/feminout/importVTKResults.py +++ b/src/Mod/Fem/feminout/importVTKResults.py @@ -119,7 +119,6 @@ def importVtkFCResult(filename, resultname, analysis=None, result_name_prefix=No # See _getFreeCADMechResultProperties() in FemVTKTools.cpp for the supported names import ObjectsFem - from . import importToolsFem if result_name_prefix is None: result_name_prefix = '' if analysis: @@ -129,10 +128,10 @@ def importVtkFCResult(filename, resultname, analysis=None, result_name_prefix=No result_obj = ObjectsFem.makeResultMechanical(FreeCAD.ActiveDocument, results_name) Fem.readResult(filename, result_obj.Name) # readResult always creates a new femmesh named ResultMesh - # workaround for the DisplacementLengths (They should have been calculated by Fem.readResult) + # add missing DisplacementLengths (They should have been added by Fem.readResult) if not result_obj.DisplacementLengths: - result_obj.DisplacementLengths = importToolsFem.calculate_disp_abs(result_obj.DisplacementVectors) - FreeCAD.Console.PrintMessage('Recalculated DisplacementLengths.\n') + import femresult.resulttools as restools + result_obj = restools.add_disp_apps(result_obj) # DisplacementLengths ''' seems unused at the moment filenamebase = '.'.join(filename.split('.')[:-1]) # pattern: filebase_timestamp.vtk diff --git a/src/Mod/Fem/femresult/resulttools.py b/src/Mod/Fem/femresult/resulttools.py index 502c43c62a..bb9e864104 100644 --- a/src/Mod/Fem/femresult/resulttools.py +++ b/src/Mod/Fem/femresult/resulttools.py @@ -28,6 +28,7 @@ __url__ = "http://www.freecadweb.org" # @{ import FreeCAD +from math import sqrt ## Removes all result objects from an analysis group @@ -240,6 +241,12 @@ def fill_femresult_stats(results): return results +def add_disp_apps(res_obj): + res_obj.DisplacementLengths = calculate_disp_abs(res_obj.DisplacementVectors) + FreeCAD.Console.PrintMessage('Added DisplacementLengths.\n') + return res_obj + + def compact_result(res_obj): ''' compacts result.Mesh and appropriate result.NodeNumbers @@ -264,4 +271,11 @@ def compact_result(res_obj): return res_obj + +def calculate_disp_abs(displacements): + disp_abs = [] + for d in displacements: + disp_abs.append(sqrt(pow(d[0], 2) + pow(d[1], 2) + pow(d[2], 2))) + return disp_abs + ## @}