FEM: Change default behaviour of ConfigParser used for materials

ConfigParser changes option capital letters in keys to small letters.
That commit changes it to generate verbatim keys as read from FCMat
files. Also Section names are no longer used to generate material
dictionary.

Signed-off-by: Przemo Firszt <przemo@firszt.eu>
This commit is contained in:
Przemo Firszt 2015-04-21 19:49:49 +01:00 committed by wmayer
parent 9b2f2b15bc
commit f96f319986
3 changed files with 21 additions and 20 deletions

View File

@ -431,7 +431,7 @@ class _JobControlTaskPanel:
inpfile.write('\n\n***********************************************************\n')
inpfile.write('** element sets for materials\n')
for MaterialObject in self.MaterialObjects:
print MaterialObject['Object'].Name, ': ', MaterialObject['Object'].Material['General_name']
print MaterialObject['Object'].Name, ': ', MaterialObject['Object'].Material['Name']
inpfile.write('*ELSET,ELSET=' + MaterialObject['Object'].Name + '\n')
if len(self.MaterialObjects) == 1:
inpfile.write('Eall\n')
@ -501,26 +501,26 @@ class _JobControlTaskPanel:
inpfile.write('** youngs modulus unit is MPa = N/mm2\n')
for MaterialObject in self.MaterialObjects:
# get material properties
YM = FreeCAD.Units.Quantity(MaterialObject['Object'].Material['Mechanical_youngsmodulus'])
YM = FreeCAD.Units.Quantity(MaterialObject['Object'].Material['YoungsModulus'])
if YM.Unit.Type == '':
print 'Material "Mechanical_youngsmodulus" has no Unit, asuming kPa!'
print 'Material "YoungsModulus" has no Unit, asuming kPa!'
YM = FreeCAD.Units.Quantity(YM.Value, FreeCAD.Units.Unit('Pa'))
else:
print 'YM unit: ', YM.Unit.Type
print 'YM = ', YM
PR = float(MaterialObject['Object'].Material['FEM_poissonratio'])
PR = float(MaterialObject['Object'].Material['PoissonRatio'])
print 'PR = ', PR
# write material properties
inpfile.write('*MATERIAL, NAME=' + MaterialObject['Object'].Material['General_name'] + '\n')
inpfile.write('*MATERIAL, NAME=' + MaterialObject['Object'].Material['Name'] + '\n')
inpfile.write('*ELASTIC \n')
inpfile.write('{0:.3f}, '.format(YM.Value * 1E-3))
inpfile.write('{0:.3f}\n'.format(PR))
# write element properties
if len(self.MaterialObjects) == 1:
inpfile.write('*SOLID SECTION, ELSET=' + MaterialObject['Object'].Name + ', MATERIAL=' + MaterialObject['Object'].Material['General_name'] + '\n\n')
inpfile.write('*SOLID SECTION, ELSET=' + MaterialObject['Object'].Name + ', MATERIAL=' + MaterialObject['Object'].Material['Name'] + '\n\n')
else:
if MaterialObject['Object'].Name == 'MechanicalMaterial':
inpfile.write('*SOLID SECTION, ELSET=' + MaterialObject['Object'].Name + ', MATERIAL=' + MaterialObject['Object'].Material['General_name'] + '\n\n')
inpfile.write('*SOLID SECTION, ELSET=' + MaterialObject['Object'].Name + ', MATERIAL=' + MaterialObject['Object'].Material['Name'] + '\n\n')
# write step beginn
inpfile.write('\n\n\n\n***********************************************************\n')

View File

@ -172,18 +172,18 @@ class _MechanicalMaterialTaskPanel:
def ym_changed(self, value):
import Units
old_ym = Units.Quantity(self.obj.Material['Mechanical_youngsmodulus'])
old_ym = Units.Quantity(self.obj.Material['YoungsModulus'])
if old_ym != value:
material = self.obj.Material
material['Mechanical_youngsmodulus'] = unicode(value)
material['YoungsModulus'] = unicode(value)
self.obj.Material = material
def pr_changed(self, value):
import Units
old_pr = Units.Quantity(self.obj.Material['FEM_poissonratio'])
old_pr = Units.Quantity(self.obj.Material['PoissonRatio'])
if old_pr != value:
material = self.obj.Material
material['FEM_poissonratio'] = unicode(value)
material['PoissonRatio'] = unicode(value)
self.obj.Material = material
def choose_material(self, index):
@ -215,16 +215,16 @@ class _MechanicalMaterialTaskPanel:
def print_mat_data(self, matmap):
print 'Material data:'
print ' Name = {}'.format(self.get_material_name(matmap))
if 'Mechanical_youngsmodulus' in matmap:
print ' YM = ', matmap['Mechanical_youngsmodulus']
if 'FEM_poissonratio' in matmap:
print ' PR = ', matmap['FEM_poissonratio']
if 'YoungsModulus' in matmap:
print ' YM = ', matmap['YoungsModulus']
if 'PoissonRatio' in matmap:
print ' PR = ', matmap['PoissonRatio']
def set_mat_params_in_combo_box(self, matmap):
if 'Mechanical_youngsmodulus' in matmap:
self.form.input_fd_young_modulus.setText(matmap['Mechanical_youngsmodulus'])
if 'FEM_poissonratio' in matmap:
self.form.spinBox_poisson_ratio.setValue(float(matmap['FEM_poissonratio']))
if 'YoungsModulus' in matmap:
self.form.input_fd_young_modulus.setText(matmap['YoungsModulus'])
if 'PoissonRatio' in matmap:
self.form.spinBox_poisson_ratio.setValue(float(matmap['PoissonRatio']))
def add_transient_material(self, material):
material_name = self.get_material_name(material)

View File

@ -57,12 +57,13 @@ def importFCMat(fileName):
"Read a FCMat file into a dictionary"
import ConfigParser
Config = ConfigParser.ConfigParser()
Config.optionxform = str
Config.read(fileName)
dict1 = {}
for section in Config.sections():
options = Config.options(section)
for option in options:
dict1[section+'_'+option] = Config.get(section, option)
dict1[option] = Config.get(section, option)
return dict1