diff --git a/src/Mod/Fem/femguiobjects/_ViewProviderFemResultMechanical.py b/src/Mod/Fem/femguiobjects/_ViewProviderFemResultMechanical.py index 7d6d6d9dc1..c9a69b29b2 100644 --- a/src/Mod/Fem/femguiobjects/_ViewProviderFemResultMechanical.py +++ b/src/Mod/Fem/femguiobjects/_ViewProviderFemResultMechanical.py @@ -308,8 +308,12 @@ class _TaskPanelFemResultShow: self.restore_initial_result_dialog() def restore_initial_result_dialog(self): - FreeCAD.FEM_dialog = {"results_type": "None", "show_disp": False, - "disp_factor": 0, "disp_factor_max": 100} + FreeCAD.FEM_dialog = { + "results_type": "None", + "show_disp": False, + "disp_factor": 0, + "disp_factor_max": 100 + } self.reset_mesh_deformation() self.reset_mesh_color() @@ -324,50 +328,69 @@ class _TaskPanelFemResultShow: self.set_result_stats("mm", 0.0, 0.0, 0.0) self.reset_mesh_color() + # if an analysis has different result types and one has + # stress and the other not the restore result dialog + # could trigger stress selected for a result object + # which has not stress + # see https://forum.freecadweb.org/viewtopic.php?f=18&t=39162 + # check if the results len is not 0 on any selected method + def abs_displacement_selected(self, state): - self.result_selected("Uabs", self.result_obj.DisplacementLengths, "mm") + if len(self.result_obj.DisplacementLengths) > 0: + self.result_selected("Uabs", self.result_obj.DisplacementLengths, "mm") def x_displacement_selected(self, state): - res_disp_u1 = self.get_scalar_disp_list( - self.result_obj.DisplacementVectors, 0 - ) - self.result_selected("U1", res_disp_u1, "mm") + if len(self.result_obj.DisplacementVectors) > 0: + res_disp_u1 = self.get_scalar_disp_list( + self.result_obj.DisplacementVectors, 0 + ) + self.result_selected("U1", res_disp_u1, "mm") def y_displacement_selected(self, state): - res_disp_u2 = self.get_scalar_disp_list( - self.result_obj.DisplacementVectors, 1 - ) - self.result_selected("U2", res_disp_u2, "mm") + if len(self.result_obj.DisplacementVectors) > 0: + res_disp_u2 = self.get_scalar_disp_list( + self.result_obj.DisplacementVectors, 1 + ) + self.result_selected("U2", res_disp_u2, "mm") def z_displacement_selected(self, state): - res_disp_u3 = self.get_scalar_disp_list( - self.result_obj.DisplacementVectors, 2 - ) - self.result_selected("U3", res_disp_u3, "mm") + if len(self.result_obj.DisplacementVectors) > 0: + res_disp_u3 = self.get_scalar_disp_list( + self.result_obj.DisplacementVectors, 2 + ) + self.result_selected("U3", res_disp_u3, "mm") def vm_stress_selected(self, state): - self.result_selected("Sabs", self.result_obj.StressValues, "MPa") + if len(self.result_obj.StressValues) > 0: + self.result_selected("Sabs", self.result_obj.StressValues, "MPa") def max_shear_selected(self, state): - self.result_selected("MaxShear", self.result_obj.MaxShear, "MPa") + if len(self.result_obj.MaxShear) > 0: + self.result_selected("MaxShear", self.result_obj.MaxShear, "MPa") def max_prin_selected(self, state): - self.result_selected("MaxPrin", self.result_obj.PrincipalMax, "MPa") + if len(self.result_obj.PrincipalMax) > 0: + self.result_selected("MaxPrin", self.result_obj.PrincipalMax, "MPa") def temperature_selected(self, state): - self.result_selected("Temp", self.result_obj.Temperature, "K") + if len(self.result_obj.Temperature) > 0: + self.result_selected("Temp", self.result_obj.Temperature, "K") def massflowrate_selected(self, state): - self.result_selected("MFlow", self.result_obj.MassFlowRate, "kg/s") + if len(self.result_obj.MassFlowRate) > 0: + self.result_selected("MFlow", self.result_obj.MassFlowRate, "kg/s") def networkpressure_selected(self, state): - self.result_selected("NPress", self.result_obj.NetworkPressure, "MPa") + if len(self.result_obj.NetworkPressure) > 0: + self.result_selected("NPress", self.result_obj.NetworkPressure, "MPa") def min_prin_selected(self, state): - self.result_selected("MinPrin", self.result_obj.PrincipalMin, "MPa") + if len(self.result_obj.PrincipalMin) > 0: + self.result_selected("MinPrin", self.result_obj.PrincipalMin, "MPa") def peeq_selected(self, state): - self.result_selected("Peeq", self.result_obj.Peeq, "") + if len(self.result_obj.Peeq) > 0: + self.result_selected("Peeq", self.result_obj.Peeq, "") def user_defined_text(self, equation): FreeCAD.FEM_dialog["results_type"] = "user"