diff --git a/src/Mod/Fem/Gui/CMakeLists.txt b/src/Mod/Fem/Gui/CMakeLists.txt index a6686c9af0..2c8d1b32bd 100755 --- a/src/Mod/Fem/Gui/CMakeLists.txt +++ b/src/Mod/Fem/Gui/CMakeLists.txt @@ -419,6 +419,7 @@ SET(FemGuiPythonUI_SRCS Resources/ui/MeshGroupXDMFExport.ui Resources/ui/MeshRegion.ui Resources/ui/ResultShow.ui + Resources/ui/ResultShowHints.ui Resources/ui/SolverCalculix.ui ) diff --git a/src/Mod/Fem/Gui/Resources/ui/ResultShow.ui b/src/Mod/Fem/Gui/Resources/ui/ResultShow.ui index 765fe657ef..987ff49db6 100644 --- a/src/Mod/Fem/Gui/Resources/ui/ResultShow.ui +++ b/src/Mod/Fem/Gui/Resources/ui/ResultShow.ui @@ -314,181 +314,6 @@ p, li { white-space: pre-wrap; } - - - - - - min. principal stress vector: s1x, s1y, s1z - - - - - - - med. principal stress vector: s2x, s2y, s2z - - - - - - - principal stresses: P1, P2, P3 - - - - - - - equivalent plastic strain: Peeq - - - - - - - reinforcement ratio: rx, ry, rz - - - - - - - <html><head/><body><p><span style=" text-decoration: underline;">Available result types:</span></p></body></html> - - - - - - - strain: exx, eyy, ezz, exy, exz, eyz - - - - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - 1 - - - stress: sxx, syy, szz, sxy, sxz, syz - - - false - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - false - - - -1 - - - Qt::NoTextInteraction - - - - - - - von Mises stress: Von - - - - - - - mass flow rate: MF - - - - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - 1 - - - displacement: x, y, z - - - false - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - false - - - -1 - - - Qt::NoTextInteraction - - - - - - - - 0 - 0 - - - - network pressure: NP - - - - - - - temperature: T - - - - - - - Mohr Coulomb: mc - - - - - - - max. principal stress vector: s3x, s3y, s3z - - - - - diff --git a/src/Mod/Fem/Gui/Resources/ui/ResultShowHints.ui b/src/Mod/Fem/Gui/Resources/ui/ResultShowHints.ui new file mode 100644 index 0000000000..724369c9ed --- /dev/null +++ b/src/Mod/Fem/Gui/Resources/ui/ResultShowHints.ui @@ -0,0 +1,251 @@ + + + ShowDisplacement + + + + 0 + 0 + 451 + 768 + + + + Hints user defined equations + + + + + + + + Available result types: + + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + 1 + + + displacement: x, y, z + + + false + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + false + + + -1 + + + Qt::TextSelectableByMouse + + + + + + + mass flow rate: MF + + + Qt::TextSelectableByMouse + + + + + + + + 0 + 0 + + + + network pressure: NP + + + Qt::TextSelectableByMouse + + + + + + + von Mises stress: Von + + + Qt::TextSelectableByMouse + + + + + + + temperature: T + + + Qt::TextSelectableByMouse + + + + + + + min. principal stress vector: s1x, s1y, s1z + + + Qt::TextSelectableByMouse + + + + + + + principal stresses: P1, P2, P3 + + + Qt::TextSelectableByMouse + + + + + + + reinforcement ratio: rx, ry, rz + + + Qt::TextSelectableByMouse + + + + + + + equivalent plastic strain: Peeq + + + Qt::TextSelectableByMouse + + + + + + + med. principal stress vector: s2x, s2y, s2z + + + Qt::TextSelectableByMouse + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + 1 + + + stress: sxx, syy, szz, sxy, sxz, syz + + + false + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + false + + + -1 + + + Qt::TextSelectableByMouse + + + + + + + strain: exx, eyy, ezz, exy, exz, eyz + + + Qt::TextSelectableByMouse + + + + + + + Mohr Coulomb: mc + + + Qt::TextSelectableByMouse + + + + + + + max. principal stress vector: s3x, s3y, s3z + + + Qt::TextSelectableByMouse + + + + + + + + + + + + Qt::Vertical + + + + 20 + 240 + + + + + + + + + + + diff --git a/src/Mod/Fem/femguiobjects/_ViewProviderFemResultMechanical.py b/src/Mod/Fem/femguiobjects/_ViewProviderFemResultMechanical.py index 27e81b677b..3323a3c976 100644 --- a/src/Mod/Fem/femguiobjects/_ViewProviderFemResultMechanical.py +++ b/src/Mod/Fem/femguiobjects/_ViewProviderFemResultMechanical.py @@ -128,9 +128,10 @@ class _TaskPanelFemResultShow: # in view provider checks: Mesh, active analysis and # if Mesh and result are in active analysis - self.form = FreeCADGui.PySideUic.loadUi( - FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ResultShow.ui" - ) + self.form = [FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ResultShow.ui"), + FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ResultShowHints.ui") + ] + self.fem_prefs = FreeCAD.ParamGet( "User parameter:BaseApp/Preferences/Mod/Fem/General" ) @@ -142,93 +143,93 @@ class _TaskPanelFemResultShow: # result type radio buttons # TODO: move to combo box, to be independent from result types and result types count QtCore.QObject.connect( - self.form.rb_none, QtCore.SIGNAL("toggled(bool)"), + self.form[0].rb_none, QtCore.SIGNAL("toggled(bool)"), self.none_selected ) QtCore.QObject.connect( - self.form.rb_abs_displacement, + self.form[0].rb_abs_displacement, QtCore.SIGNAL("toggled(bool)"), self.abs_displacement_selected ) QtCore.QObject.connect( - self.form.rb_x_displacement, + self.form[0].rb_x_displacement, QtCore.SIGNAL("toggled(bool)"), self.x_displacement_selected ) QtCore.QObject.connect( - self.form.rb_y_displacement, + self.form[0].rb_y_displacement, QtCore.SIGNAL("toggled(bool)"), self.y_displacement_selected ) QtCore.QObject.connect( - self.form.rb_z_displacement, + self.form[0].rb_z_displacement, QtCore.SIGNAL("toggled(bool)"), self.z_displacement_selected ) QtCore.QObject.connect( - self.form.rb_temperature, + self.form[0].rb_temperature, QtCore.SIGNAL("toggled(bool)"), self.temperature_selected ) QtCore.QObject.connect( - self.form.rb_vm_stress, + self.form[0].rb_vm_stress, QtCore.SIGNAL("toggled(bool)"), self.vm_stress_selected ) QtCore.QObject.connect( - self.form.rb_maxprin, + self.form[0].rb_maxprin, QtCore.SIGNAL("toggled(bool)"), self.max_prin_selected ) QtCore.QObject.connect( - self.form.rb_minprin, + self.form[0].rb_minprin, QtCore.SIGNAL("toggled(bool)"), self.min_prin_selected ) QtCore.QObject.connect( - self.form.rb_max_shear_stress, + self.form[0].rb_max_shear_stress, QtCore.SIGNAL("toggled(bool)"), self.max_shear_selected ) QtCore.QObject.connect( - self.form.rb_massflowrate, + self.form[0].rb_massflowrate, QtCore.SIGNAL("toggled(bool)"), self.massflowrate_selected ) QtCore.QObject.connect( - self.form.rb_networkpressure, + self.form[0].rb_networkpressure, QtCore.SIGNAL("toggled(bool)"), self.networkpressure_selected ) QtCore.QObject.connect( - self.form.rb_peeq, + self.form[0].rb_peeq, QtCore.SIGNAL("toggled(bool)"), self.peeq_selected ) # displacement QtCore.QObject.connect( - self.form.cb_show_displacement, + self.form[0].cb_show_displacement, QtCore.SIGNAL("clicked(bool)"), self.show_displacement ) QtCore.QObject.connect( - self.form.hsb_displacement_factor, + self.form[0].hsb_displacement_factor, QtCore.SIGNAL("valueChanged(int)"), self.hsb_disp_factor_changed ) - self.form.sb_displacement_factor.valueChanged.connect(self.sb_disp_factor_changed) - self.form.sb_displacement_factor_max.valueChanged.connect(self.sb_disp_factor_max_changed) + self.form[0].sb_displacement_factor.valueChanged.connect(self.sb_disp_factor_changed) + self.form[0].sb_displacement_factor_max.valueChanged.connect(self.sb_disp_factor_max_changed) # user defined equation QtCore.QObject.connect( - self.form.user_def_eq, + self.form[0].user_def_eq, QtCore.SIGNAL("textchanged()"), self.user_defined_text ) QtCore.QObject.connect( - self.form.calculate, + self.form[0].calculate, QtCore.SIGNAL("clicked()"), self.calculate ) @@ -240,62 +241,62 @@ class _TaskPanelFemResultShow: self.restore_initial_result_dialog() # initialize scale factor for show displacement scale_factor = get_displacement_scale_factor(self.result_obj) - self.form.sb_displacement_factor_max.setValue(10. * scale_factor) - self.form.sb_displacement_factor.setValue(scale_factor) + self.form[0].sb_displacement_factor_max.setValue(10. * scale_factor) + self.form[0].sb_displacement_factor.setValue(scale_factor) def restore_result_dialog(self): try: rt = FreeCAD.FEM_dialog["results_type"] if rt == "None": - self.form.rb_none.setChecked(True) + self.form[0].rb_none.setChecked(True) self.none_selected(True) elif rt == "Uabs": - self.form.rb_abs_displacement.setChecked(True) + self.form[0].rb_abs_displacement.setChecked(True) self.abs_displacement_selected(True) elif rt == "U1": - self.form.rb_x_displacement.setChecked(True) + self.form[0].rb_x_displacement.setChecked(True) self.x_displacement_selected(True) elif rt == "U2": - self.form.rb_y_displacement.setChecked(True) + self.form[0].rb_y_displacement.setChecked(True) self.y_displacement_selected(True) elif rt == "U3": - self.form.rb_z_displacement.setChecked(True) + self.form[0].rb_z_displacement.setChecked(True) self.z_displacement_selected(True) elif rt == "Temp": - self.form.rb_temperature.setChecked(True) + self.form[0].rb_temperature.setChecked(True) self.temperature_selected(True) elif rt == "Sabs": - self.form.rb_vm_stress.setChecked(True) + self.form[0].rb_vm_stress.setChecked(True) self.vm_stress_selected(True) elif rt == "MaxPrin": - self.form.rb_maxprin.setChecked(True) + self.form[0].rb_maxprin.setChecked(True) self.max_prin_selected(True) elif rt == "MinPrin": - self.form.rb_minprin.setChecked(True) + self.form[0].rb_minprin.setChecked(True) self.min_prin_selected(True) elif rt == "MaxShear": - self.form.rb_max_shear_stress.setChecked(True) + self.form[0].rb_max_shear_stress.setChecked(True) self.max_shear_selected(True) elif rt == "MFlow": - self.form.rb_massflowrate.setChecked(True) + self.form[0].rb_massflowrate.setChecked(True) self.massflowrate_selected(True) elif rt == "NPress": - self.form.rb_networkpressure.setChecked(True) + self.form[0].rb_networkpressure.setChecked(True) self.networkpressure_selected(True) elif rt == "Peeq": - self.form.rb_peeq.setChecked(True) + self.form[0].rb_peeq.setChecked(True) self.peeq_selected(True) sd = FreeCAD.FEM_dialog["show_disp"] - self.form.cb_show_displacement.setChecked(sd) + self.form[0].cb_show_displacement.setChecked(sd) self.show_displacement(sd) df = FreeCAD.FEM_dialog["disp_factor"] dfm = FreeCAD.FEM_dialog["disp_factor_max"] - # self.form.hsb_displacement_factor.setMaximum(dfm) - # self.form.hsb_displacement_factor.setValue(df) - self.form.sb_displacement_factor_max.setValue(dfm) - self.form.sb_displacement_factor.setValue(df) + # self.form[0].hsb_displacement_factor.setMaximum(dfm) + # self.form[0].hsb_displacement_factor.setValue(df) + self.form[0].sb_displacement_factor_max.setValue(dfm) + self.form[0].sb_displacement_factor.setValue(df) except: self.restore_initial_result_dialog() @@ -315,7 +316,7 @@ class _TaskPanelFemResultShow: "disp_factor": 0., "disp_factor_max": 100. } - self.form.sb_displacement_factor_max.setValue(100.) # init non standard values + self.form[0].sb_displacement_factor_max.setValue(100.) # init non standard values def getStandardButtons(self): return int(QtGui.QDialogButtonBox.Close) @@ -339,7 +340,7 @@ class _TaskPanelFemResultShow: if len(self.result_obj.DisplacementLengths) > 0: self.result_selected("Uabs", self.result_obj.DisplacementLengths, "mm") else: - self.form.rb_none.setChecked(True) + self.form[0].rb_none.setChecked(True) self.none_selected(True) def x_displacement_selected(self, state): @@ -349,7 +350,7 @@ class _TaskPanelFemResultShow: ) self.result_selected("U1", res_disp_u1, "mm") else: - self.form.rb_none.setChecked(True) + self.form[0].rb_none.setChecked(True) self.none_selected(True) def y_displacement_selected(self, state): @@ -359,7 +360,7 @@ class _TaskPanelFemResultShow: ) self.result_selected("U2", res_disp_u2, "mm") else: - self.form.rb_none.setChecked(True) + self.form[0].rb_none.setChecked(True) self.none_selected(True) def z_displacement_selected(self, state): @@ -369,68 +370,68 @@ class _TaskPanelFemResultShow: ) self.result_selected("U3", res_disp_u3, "mm") else: - self.form.rb_none.setChecked(True) + self.form[0].rb_none.setChecked(True) self.none_selected(True) def vm_stress_selected(self, state): if len(self.result_obj.StressValues) > 0: self.result_selected("Sabs", self.result_obj.StressValues, "MPa") else: - self.form.rb_none.setChecked(True) + self.form[0].rb_none.setChecked(True) self.none_selected(True) def max_shear_selected(self, state): if len(self.result_obj.MaxShear) > 0: self.result_selected("MaxShear", self.result_obj.MaxShear, "MPa") else: - self.form.rb_none.setChecked(True) + self.form[0].rb_none.setChecked(True) self.none_selected(True) def max_prin_selected(self, state): if len(self.result_obj.PrincipalMax) > 0: self.result_selected("MaxPrin", self.result_obj.PrincipalMax, "MPa") else: - self.form.rb_none.setChecked(True) + self.form[0].rb_none.setChecked(True) self.none_selected(True) def temperature_selected(self, state): if len(self.result_obj.Temperature) > 0: self.result_selected("Temp", self.result_obj.Temperature, "K") else: - self.form.rb_none.setChecked(True) + self.form[0].rb_none.setChecked(True) self.none_selected(True) def massflowrate_selected(self, state): if len(self.result_obj.MassFlowRate) > 0: self.result_selected("MFlow", self.result_obj.MassFlowRate, "kg/s") else: - self.form.rb_none.setChecked(True) + self.form[0].rb_none.setChecked(True) self.none_selected(True) def networkpressure_selected(self, state): if len(self.result_obj.NetworkPressure) > 0: self.result_selected("NPress", self.result_obj.NetworkPressure, "MPa") else: - self.form.rb_none.setChecked(True) + self.form[0].rb_none.setChecked(True) self.none_selected(True) def min_prin_selected(self, state): if len(self.result_obj.PrincipalMin) > 0: self.result_selected("MinPrin", self.result_obj.PrincipalMin, "MPa") else: - self.form.rb_none.setChecked(True) + self.form[0].rb_none.setChecked(True) self.none_selected(True) def peeq_selected(self, state): if len(self.result_obj.Peeq) > 0: self.result_selected("Peeq", self.result_obj.Peeq, "") else: - self.form.rb_none.setChecked(True) + self.form[0].rb_none.setChecked(True) self.none_selected(True) def user_defined_text(self, equation): FreeCAD.FEM_dialog["results_type"] = "user" - self.form.user_def_eq.toPlainText() + self.form[0].user_def_eq.toPlainText() def calculate(self): @@ -488,7 +489,7 @@ class _TaskPanelFemResultShow: FreeCAD.FEM_dialog["results_type"] = "None" self.update() self.restore_result_dialog() - userdefined_eq = self.form.user_def_eq.toPlainText() # Get equation to be used + userdefined_eq = self.form[0].user_def_eq.toPlainText() # Get equation to be used UserDefinedFormula = eval(userdefined_eq).tolist() if UserDefinedFormula: self.result_obj.UserDefined = UserDefinedFormula @@ -526,17 +527,17 @@ class _TaskPanelFemResultShow: QtGui.QApplication.restoreOverrideCursor() def set_result_stats(self, unit, minm, avg, maxm): - self.form.le_min.setProperty("unit", unit) - self.form.le_min.setProperty("rawText", "{:.6} {}".format(minm, unit)) - self.form.le_avg.setProperty("unit", unit) - self.form.le_avg.setProperty("rawText", "{:.6} {}".format(avg, unit)) - self.form.le_max.setProperty("unit", unit) - self.form.le_max.setProperty("rawText", "{:.6} {}".format(maxm, unit)) + self.form[0].le_min.setProperty("unit", unit) + self.form[0].le_min.setProperty("rawText", "{:.6} {}".format(minm, unit)) + self.form[0].le_avg.setProperty("unit", unit) + self.form[0].le_avg.setProperty("rawText", "{:.6} {}".format(avg, unit)) + self.form[0].le_max.setProperty("unit", unit) + self.form[0].le_max.setProperty("rawText", "{:.6} {}".format(maxm, unit)) def update_displacement(self, factor=None): if factor is None: if FreeCAD.FEM_dialog["show_disp"]: - factor = self.form.sb_displacement_factor.value() + factor = self.form[0].sb_displacement_factor.value() else: factor = 0.0 self.mesh_obj.ViewObject.applyDisplacement(factor) @@ -557,31 +558,31 @@ class _TaskPanelFemResultShow: QtGui.QApplication.restoreOverrideCursor() def hsb_disp_factor_changed(self, value): - self.form.sb_displacement_factor.setValue( - value / 100. * self.form.sb_displacement_factor_max.value() + self.form[0].sb_displacement_factor.setValue( + value / 100. * self.form[0].sb_displacement_factor_max.value() ) self.update_displacement() def sb_disp_factor_max_changed(self, value): FreeCAD.FEM_dialog["disp_factor_max"] = value - if value < self.form.sb_displacement_factor.value(): - self.form.sb_displacement_factor.setValue(value) + if value < self.form[0].sb_displacement_factor.value(): + self.form[0].sb_displacement_factor.setValue(value) if value == 0.: - self.form.hsb_displacement_factor.setValue(0) + self.form[0].hsb_displacement_factor.setValue(0) else: - self.form.hsb_displacement_factor.setValue( - round(self.form.sb_displacement_factor.value() / value * 100.) + self.form[0].hsb_displacement_factor.setValue( + round(self.form[0].sb_displacement_factor.value() / value * 100.) ) def sb_disp_factor_changed(self, value): FreeCAD.FEM_dialog["disp_factor"] = value - if value > self.form.sb_displacement_factor_max.value(): - self.form.sb_displacement_factor.setValue(self.form.sb_displacement_factor_max.value()) - if self.form.sb_displacement_factor_max.value() == 0.: - self.form.hsb_displacement_factor.setValue(0.) + if value > self.form[0].sb_displacement_factor_max.value(): + self.form[0].sb_displacement_factor.setValue(self.form[0].sb_displacement_factor_max.value()) + if self.form[0].sb_displacement_factor_max.value() == 0.: + self.form[0].hsb_displacement_factor.setValue(0.) else: - self.form.hsb_displacement_factor.setValue( - round(value / self.form.sb_displacement_factor_max.value() * 100.) + self.form[0].hsb_displacement_factor.setValue( + round(value / self.form[0].sb_displacement_factor_max.value() * 100.) ) def disable_empty_result_buttons(self): @@ -598,27 +599,27 @@ class _TaskPanelFemResultShow: NetworkPressure --> rb_networkpressure Peeq --> rb_peeq""" if len(self.result_obj.DisplacementLengths) == 0: - self.form.rb_abs_displacement.setEnabled(0) + self.form[0].rb_abs_displacement.setEnabled(0) if len(self.result_obj.DisplacementVectors) == 0: - self.form.rb_x_displacement.setEnabled(0) - self.form.rb_y_displacement.setEnabled(0) - self.form.rb_z_displacement.setEnabled(0) + self.form[0].rb_x_displacement.setEnabled(0) + self.form[0].rb_y_displacement.setEnabled(0) + self.form[0].rb_z_displacement.setEnabled(0) if len(self.result_obj.Temperature) == 0: - self.form.rb_temperature.setEnabled(0) + self.form[0].rb_temperature.setEnabled(0) if len(self.result_obj.StressValues) == 0: - self.form.rb_vm_stress.setEnabled(0) + self.form[0].rb_vm_stress.setEnabled(0) if len(self.result_obj.PrincipalMax) == 0: - self.form.rb_maxprin.setEnabled(0) + self.form[0].rb_maxprin.setEnabled(0) if len(self.result_obj.PrincipalMin) == 0: - self.form.rb_minprin.setEnabled(0) + self.form[0].rb_minprin.setEnabled(0) if len(self.result_obj.MaxShear) == 0: - self.form.rb_max_shear_stress.setEnabled(0) + self.form[0].rb_max_shear_stress.setEnabled(0) if len(self.result_obj.MassFlowRate) == 0: - self.form.rb_massflowrate.setEnabled(0) + self.form[0].rb_massflowrate.setEnabled(0) if len(self.result_obj.NetworkPressure) == 0: - self.form.rb_networkpressure.setEnabled(0) + self.form[0].rb_networkpressure.setEnabled(0) if len(self.result_obj.Peeq) == 0: - self.form.rb_peeq.setEnabled(0) + self.form[0].rb_peeq.setEnabled(0) def update(self): self.reset_result_mesh()