diff --git a/src/Mod/Fem/TaskPanelMechanicalMaterial.ui b/src/Mod/Fem/TaskPanelMechanicalMaterial.ui
index c51aba0f2..c56ac2c79 100644
--- a/src/Mod/Fem/TaskPanelMechanicalMaterial.ui
+++ b/src/Mod/Fem/TaskPanelMechanicalMaterial.ui
@@ -176,7 +176,7 @@
0.100000000000000
- 0.300000000000000
+ 0.000000000000000
@@ -202,7 +202,7 @@
- 0 kg/m^3
+
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
@@ -214,7 +214,7 @@
2000000000.000000000000000
- kg/m^3
+ kg/mm^3
3
diff --git a/src/Mod/Fem/_TaskPanelMechanicalMaterial.py b/src/Mod/Fem/_TaskPanelMechanicalMaterial.py
index f4b3aaffa..2db0bc6c0 100644
--- a/src/Mod/Fem/_TaskPanelMechanicalMaterial.py
+++ b/src/Mod/Fem/_TaskPanelMechanicalMaterial.py
@@ -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: