From e9606a241a3095cafcc900790b34f0d0c01d67a3 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Tue, 26 Jan 2016 07:10:43 +0100 Subject: [PATCH] FEM: fix, transient material was used in some cases even if material was not changed --- src/Mod/Fem/TaskPanelMechanicalMaterial.ui | 6 ++-- src/Mod/Fem/_TaskPanelMechanicalMaterial.py | 36 +++++++++++++-------- 2 files changed, 26 insertions(+), 16 deletions(-) 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: