diff --git a/src/Mod/Fem/MechanicalAnalysis.py b/src/Mod/Fem/MechanicalAnalysis.py
index 1a8034f1f..a5535a28e 100644
--- a/src/Mod/Fem/MechanicalAnalysis.py
+++ b/src/Mod/Fem/MechanicalAnalysis.py
@@ -503,20 +503,22 @@ class _JobControlTaskPanel:
class _ResultControlTaskPanel:
'''The control for the displacement post-processing'''
def __init__(self, object):
- # the panel has a tree widget that contains categories
- # for the subcomponents, such as additions, subtractions.
- # the categories are shown only if they are not empty.
self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/ShowDisplacement.ui")
self.obj = object
#Connect Signals and Slots
- QtCore.QObject.connect(self.form.comboBox_Type, QtCore.SIGNAL("activated(int)"), self.typeChanged)
+ QtCore.QObject.connect(self.form.rb_none, QtCore.SIGNAL("toggled(bool)"), self.none_selected)
+ QtCore.QObject.connect(self.form.rb_x_displacement, QtCore.SIGNAL("toggled(bool)"), self.x_displacement_selected)
+ QtCore.QObject.connect(self.form.rb_y_displacement, QtCore.SIGNAL("toggled(bool)"), self.y_displacement_selected)
+ QtCore.QObject.connect(self.form.rb_z_displacement, QtCore.SIGNAL("toggled(bool)"), self.z_displacement_selected)
+ QtCore.QObject.connect(self.form.rb_abs_displacement, QtCore.SIGNAL("toggled(bool)"), self.abs_displacement_selected)
+ QtCore.QObject.connect(self.form.rb_vm_stress, QtCore.SIGNAL("toggled(bool)"), self.vm_stress_selected)
- QtCore.QObject.connect(self.form.checkBox_ShowDisplacement, QtCore.SIGNAL("clicked(bool)"), self.showDisplacementClicked)
- QtCore.QObject.connect(self.form.horizontalScrollBar_Factor, QtCore.SIGNAL("valueChanged(int)"), self.sliderValue)
- QtCore.QObject.connect(self.form.spinBox_SliderFactor, QtCore.SIGNAL("valueChanged(int)"), self.sliderMaxValue)
- QtCore.QObject.connect(self.form.spinBox_DisplacementFactor, QtCore.SIGNAL("valueChanged(int)"), self.displacementFactorValue)
+ QtCore.QObject.connect(self.form.cb_show_displacement, QtCore.SIGNAL("clicked(bool)"), self.showDisplacementClicked)
+ QtCore.QObject.connect(self.form.hsb_factor, QtCore.SIGNAL("valueChanged(int)"), self.sliderValue)
+ QtCore.QObject.connect(self.form.sb_slider_factor, QtCore.SIGNAL("valueChanged(int)"), self.sliderMaxValue)
+ QtCore.QObject.connect(self.form.sb_displacement_factor, QtCore.SIGNAL("valueChanged(int)"), self.displacementFactorValue)
self.DisplacementObject = None
self.StressObject = None
@@ -526,8 +528,10 @@ class _ResultControlTaskPanel:
def getStandardButtons(self):
return int(QtGui.QDialogButtonBox.Close)
- def get_stats(self, type_name):
- for i in FemGui.getActiveAnalysis().Member:
+ def get_result_stats(self, type_name, analysis=None):
+ if analysis is None:
+ analysis = FemGui.getActiveAnalysis()
+ for i in analysis.Member:
if i.isDerivedFrom("Fem::FemResultValue"):
if i.DataType == 'AnalysisStats':
match_table = {"U1": (i.Values[0], i.Values[1], i.Values[2]),
@@ -539,81 +543,85 @@ class _ResultControlTaskPanel:
return match_table[type_name]
return (0.0, 0.0, 0.0)
- def typeChanged(self, index):
- selected = self.form.comboBox_Type.itemData(index)
- if selected[0] == "None":
- reset_mesh_color()
- unit = "mm"
+ def none_selected(self, state):
+ self.set_result_stats("mm", 0.0, 0.0, 0.0)
+ reset_mesh_color()
+ def abs_displacement_selected(self, state):
+ self.select_displacement_type("Uabs")
+
+ def x_displacement_selected(self, state):
+ self.select_displacement_type("U1")
+
+ def y_displacement_selected(self, state):
+ self.select_displacement_type("U2")
+
+ def z_displacement_selected(self, state):
+ self.select_displacement_type("U3")
+
+ def vm_stress_selected(self, state):
QApplication.setOverrideCursor(Qt.WaitCursor)
- if self.DisplacementObject:
- if selected[0] in ("U1", "U2", "U3", "Uabs"):
- self.MeshObject.ViewObject.setNodeColorByResult(self.DisplacementObject, selected[1])
- unit = "mm"
+ (minm, avg, maxm) = (0.0, 0.0, 0.0)
if self.StressObject:
- if selected[0] in ("Sabs"):
- self.MeshObject.ViewObject.setNodeColorByResult(self.StressObject)
- unit = "MPa"
-
- (minm, avg, maxm) = self.get_stats(selected[0])
- self.form.lineEdit_Max.setProperty("unit", unit)
- self.form.lineEdit_Max.setText("{:.6} {}".format(maxm, unit))
- self.form.lineEdit_Min.setProperty("unit", unit)
- self.form.lineEdit_Min.setText("{:.6} {}".format(minm, unit))
- self.form.lineEdit_Avg.setProperty("unit", unit)
- self.form.lineEdit_Avg.setText("{:.6} {}".format(avg, unit))
-
+ self.MeshObject.ViewObject.setNodeColorByResult(self.StressObject)
+ (minm, avg, maxm) = self.get_result_stats("Sabs")
+ self.set_result_stats("MPa", minm, avg, maxm)
QtGui.qApp.restoreOverrideCursor()
+ def select_displacement_type(self, disp_type):
+ QApplication.setOverrideCursor(Qt.WaitCursor)
+ (minm, avg, maxm) = (0.0, 0.0, 0.0)
+ if self.DisplacementObject:
+ match = {"Uabs": 0, "U1": 1, "U2": 2, "U3": 3}
+ self.MeshObject.ViewObject.setNodeColorByResult(self.DisplacementObject, match[disp_type])
+ (minm, avg, maxm) = self.get_result_stats(disp_type)
+ self.set_result_stats("mm", minm, avg, maxm)
+ QtGui.qApp.restoreOverrideCursor()
+
+ def set_result_stats(self, unit, minm, avg, maxm):
+ self.form.le_min.setProperty("unit", unit)
+ self.form.le_min.setText("{:.6} {}".format(minm, unit))
+ self.form.le_avg.setProperty("unit", unit)
+ self.form.le_avg.setText("{:.6} {}".format(avg, unit))
+ self.form.le_max.setProperty("unit", unit)
+ self.form.le_max.setText("{:.6} {}".format(maxm, unit))
+
def showDisplacementClicked(self, checked):
QApplication.setOverrideCursor(Qt.WaitCursor)
factor = 0.0
if checked:
- factor = self.form.horizontalScrollBar_Factor.value()
+ factor = self.form.hsb_factor.value()
self.setDisplacement()
self.MeshObject.ViewObject.applyDisplacement(factor)
QtGui.qApp.restoreOverrideCursor()
def sliderValue(self, value):
self.MeshObject.ViewObject.applyDisplacement(value)
- self.form.spinBox_DisplacementFactor.setValue(value)
+ self.form.sb_displacement_factor.setValue(value)
def sliderMaxValue(self, value):
#print 'sliderMaxValue()'
- self.form.horizontalScrollBar_Factor.setMaximum(value)
+ self.form.hsb_factor.setMaximum(value)
def displacementFactorValue(self, value):
#print 'displacementFactorValue()'
- self.form.horizontalScrollBar_Factor.setValue(value)
+ self.form.hsb_factor.setValue(value)
def setDisplacement(self):
if self.DisplacementObject:
self.MeshObject.ViewObject.setNodeDisplacementByResult(self.DisplacementObject)
def update(self):
- 'fills the widgets'
- #print "Update-------------------------------"
self.MeshObject = None
- self.form.comboBox_Type.clear()
- self.form.comboBox_Type.addItem("None", ("None", 0))
- if FemGui.getActiveAnalysis():
- for i in FemGui.getActiveAnalysis().Member:
- if i.isDerivedFrom("Fem::FemMeshObject"):
- self.MeshObject = i
-
for i in FemGui.getActiveAnalysis().Member:
- if i.isDerivedFrom("Fem::FemResultVector"):
+ if i.isDerivedFrom("Fem::FemMeshObject"):
+ self.MeshObject = i
+ elif i.isDerivedFrom("Fem::FemResultVector"):
if i.DataType == 'Displacement':
self.DisplacementObject = i
- self.form.comboBox_Type.addItem("U1 (Disp. X)", ("U1", 1))
- self.form.comboBox_Type.addItem("U2 (Disp. Y)", ("U2", 2))
- self.form.comboBox_Type.addItem("U3 (Disp. Z)", ("U3", 3))
- self.form.comboBox_Type.addItem("Uabs (Disp. abs)", ("Uabs", 0))
- for i in FemGui.getActiveAnalysis().Member:
- if i.isDerivedFrom("Fem::FemResultValue"):
+ elif i.isDerivedFrom("Fem::FemResultValue"):
if i.DataType == 'VonMisesStress':
self.StressObject = i
- self.form.comboBox_Type.addItem("Sabs (Von Mises Stress)", ("Sabs", 0))
def accept(self):
FreeCADGui.Control.closeDialog()
diff --git a/src/Mod/Fem/ShowDisplacement.ui b/src/Mod/Fem/ShowDisplacement.ui
index 02aa5adf4..7c590e118 100644
--- a/src/Mod/Fem/ShowDisplacement.ui
+++ b/src/Mod/Fem/ShowDisplacement.ui
@@ -6,8 +6,8 @@
0
0
- 203
- 379
+ 331
+ 431
@@ -17,48 +17,71 @@
-
-
-
+
- Colors
+ Result type
-
-
-
-
-
- None
-
+
+
-
+
+
+ Y displacement
+
+
-
+ -
+
+
+ X displacement
+
+
+
+ -
+
+
+ Z displacement
+
+
+
+ -
+
+
+ None
+
+
+ true
+
+
+
+ -
+
+
+ Von Mises stress
+
+
+
+ -
+
+
+ Abs displacement
+
+
+
+
-
-
-
+
-
Avg:
- -
-
-
- true
-
-
- mm
-
-
-
- -
-
-
- Max:
-
-
-
-
-
+
true
@@ -68,14 +91,14 @@
-
-
+
- Min:
+ Max:
-
-
+
true
@@ -84,26 +107,63 @@
+ -
+
+
+ true
+
+
+ mm
+
+
+
+ -
+
+
+ Min:
+
+
+
-
-
+
Displacement
-
-
-
- Show
-
-
- false
-
-
+
+
-
+
+
+ Show
+
+
+ false
+
+
+
+ -
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+ Qt::Horizontal
+
+
+
+
-
@@ -118,7 +178,7 @@
-
-
+
false
@@ -151,7 +211,7 @@
-
-
+
false
@@ -171,16 +231,6 @@
- -
-
-
- false
-
-
- Qt::Horizontal
-
-
-
@@ -211,7 +261,7 @@
- checkBox_ShowDisplacement
+ cb_show_displacement
toggled(bool)
label_3
setEnabled(bool)
@@ -227,9 +277,9 @@
- checkBox_ShowDisplacement
+ cb_show_displacement
toggled(bool)
- spinBox_DisplacementFactor
+ sb_displacement_factor
setEnabled(bool)
@@ -243,7 +293,7 @@
- checkBox_ShowDisplacement
+ cb_show_displacement
toggled(bool)
label_7
setEnabled(bool)
@@ -259,9 +309,9 @@
- checkBox_ShowDisplacement
+ cb_show_displacement
toggled(bool)
- spinBox_SliderFactor
+ sb_slider_factor
setEnabled(bool)
@@ -275,9 +325,9 @@
- checkBox_ShowDisplacement
+ cb_show_displacement
toggled(bool)
- horizontalScrollBar_Factor
+ hsb_factor
setEnabled(bool)