FEM: fix, transient material was used in some cases even if material was not changed

This commit is contained in:
Bernd Hahnebach 2016-01-26 07:10:43 +01:00
parent efc9b712ae
commit e9606a241a
2 changed files with 26 additions and 16 deletions

View File

@ -176,7 +176,7 @@
<double>0.100000000000000</double>
</property>
<property name="value">
<double>0.300000000000000</double>
<double>0.000000000000000</double>
</property>
</widget>
</item>
@ -202,7 +202,7 @@
</size>
</property>
<property name="text">
<string>0 kg/m^3</string>
<string/>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@ -214,7 +214,7 @@
<double>2000000000.000000000000000</double>
</property>
<property name="unit" stdset="0">
<string notr="true">kg/m^3</string>
<string notr="true">kg/mm^3</string>
</property>
<property name="decimals" stdset="0">
<number>3</number>

View File

@ -113,28 +113,38 @@ class _TaskPanelMechanicalMaterial:
def ym_changed(self, value):
import Units
# FreeCADs standard unit for stress is kPa
old_ym = Units.Quantity(self.material['YoungsModulus'])
if old_ym != value:
material = self.material
# FreeCAD uses kPa internall for Stress
material['YoungsModulus'] = unicode(value) + " kPa"
self.material = material
variation = 0.001
if value:
if not (1 - variation < float(old_ym) / value < 1 + variation):
# YoungsModulus has changed
material = self.material
material['YoungsModulus'] = unicode(value) + " kPa"
self.material = material
def density_changed(self, value):
import Units
# FreeCADs standard unit for density is kg/mm^3
old_density = Units.Quantity(self.material['Density'])
if old_density != value:
material = self.material
material['Density'] = unicode(value) + " kg/mm^3"
self.material = material
variation = 0.001
if value:
if not (1 - variation < float(old_density) / value < 1 + variation):
# density has changed
material = self.material
material['Density'] = unicode(value) + " kg/mm^3"
self.material = material
def pr_changed(self, value):
import Units
old_pr = Units.Quantity(self.material['PoissonRatio'])
if old_pr != value:
material = self.material
material['PoissonRatio'] = unicode(value)
self.material = material
variation = 0.001
if value:
if not (1 - variation < float(old_pr) / value < 1 + variation):
# PoissonRatio has changed
material = self.material
material['PoissonRatio'] = unicode(value)
self.material = material
def choose_material(self, index):
if index < 0: