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)