FEM: z88 result reader, use generic result fill method

This commit is contained in:
Bernd Hahnebach 2017-02-28 11:51:26 +01:00 committed by wmayer
parent cf7bc38e16
commit 30941ac975
2 changed files with 11 additions and 48 deletions

View File

@ -119,9 +119,13 @@ def fill_femresult_mechanical(results, result_set, span):
''' fills an FreeCAD FEM mechanical result object with result data
'''
eigenmode_number = result_set['number']
step_time = result_set['time']
step_time = round(step_time, 2)
if 'number' in result_set:
eigenmode_number = result_set['number']
else:
eigenmode_number = 0
if 'time' in result_set:
step_time = result_set['time']
step_time = round(step_time, 2)
if 'disp' in result_set:
disp = result_set['disp']

View File

@ -30,7 +30,6 @@ __url__ = "http://www.freecadweb.org"
import FreeCAD
import os
from math import pow, sqrt
Debug = False
@ -63,8 +62,9 @@ def insert(filename, docname):
########## module specific methods ##########
def import_z88_disp(filename, analysis=None, result_name_prefix=None):
'''insert a FreeCAD FEM Result object in the ActiveDocument
'''insert a FreeCAD FEM mechanical result object in the ActiveDocument
'''
import importToolsFem
import ObjectsFem
if result_name_prefix is None:
result_name_prefix = ''
@ -80,52 +80,11 @@ def import_z88_disp(filename, analysis=None, result_name_prefix=None):
for result_set in m['Results']:
results_name = result_name_prefix + 'results'
results = ObjectsFem.makeResultMechanical(results_name)
#results = FreeCAD.ActiveDocument.addObject('Fem::FemResultObject', results_name)
for m in analysis_object.Member:
for m in analysis_object.Member: # TODO analysis could have multiple mesh objects in the future
if m.isDerivedFrom("Fem::FemMeshObject"):
results.Mesh = m
break
disp = result_set['disp']
no_of_values = len(disp)
displacement = []
for k, v in disp.iteritems():
displacement.append(v)
x_max, y_max, z_max = map(max, zip(*displacement))
scale = 1.0
if len(disp) > 0:
results.DisplacementVectors = map((lambda x: x * scale), disp.values())
results.NodeNumbers = disp.keys()
x_min, y_min, z_min = map(min, zip(*displacement))
sum_list = map(sum, zip(*displacement))
x_avg, y_avg, z_avg = [i / no_of_values for i in sum_list]
# set stats of not imported values to 0
s_max = s_min = s_avg = 0
p1_min = p1_avg = p1_max = p2_min = p2_avg = p2_max = p3_min = p3_avg = p3_max = 0
ms_min = ms_avg = ms_max = peeq_min = peeq_avg = peeq_max = 0
disp_abs = []
for d in displacement:
disp_abs.append(sqrt(pow(d[0], 2) + pow(d[1], 2) + pow(d[2], 2)))
results.DisplacementLengths = disp_abs
a_max = max(disp_abs)
a_min = min(disp_abs)
a_avg = sum(disp_abs) / no_of_values
results.Stats = [x_min, x_avg, x_max,
y_min, y_avg, y_max,
z_min, z_avg, z_max,
a_min, a_avg, a_max,
s_min, s_avg, s_max,
p1_min, p1_avg, p1_max,
p2_min, p2_avg, p2_max,
p3_min, p3_avg, p3_max,
ms_min, ms_avg, ms_max,
peeq_min, peeq_avg, peeq_max]
results = importToolsFem.fill_femresult_mechanical(results, result_set, 0)
analysis_object.Member = analysis_object.Member + [results]
if(FreeCAD.GuiUp):