diff --git a/src/Mod/Fem/PyGui/TaskPanelShowResult.ui b/src/Mod/Fem/PyGui/TaskPanelShowResult.ui
index 8940a5e5f..6c3bb6956 100644
--- a/src/Mod/Fem/PyGui/TaskPanelShowResult.ui
+++ b/src/Mod/Fem/PyGui/TaskPanelShowResult.ui
@@ -7,405 +7,408 @@
0
0
446
- 898
+ 696
Show result
-
+
-
-
-
- Result type
-
-
-
-
-
-
-
-
-
- None
-
-
- true
-
-
+
+
-
+
+
+ Result type
+
+
+
-
+
+
-
+
+
+ Abs displacement
+
+
+
+ -
+
+
+ None
+
+
+ true
+
+
+
+ -
+
+
+ Y displacement
+
+
+
+ -
+
+
+ X displacement
+
+
+
+ -
+
+
+ Peeq
+
+
+
+ -
+
+
+ Z displacement
+
+
+
+ -
+
+
+ Temperature
+
+
+
+ -
+
+
+ Von Mises stress
+
+
+
+ -
+
+
+ Max Principal stress
+
+
+
+ -
+
+
+ Min Principal stress
+
+
+
+ -
+
+
+ Max shear stress(Tresca)
+
+
+
+ -
+
+
+ Mass Flow Rate
+
+
+
+ -
+
+
+ Network Pressure
+
+
+
+
- -
-
-
- Temperature
-
-
-
- -
-
-
- Abs displacement
-
-
-
- -
-
-
- Von Mises stress
-
-
-
- -
-
-
- X displacement
-
-
-
- -
-
-
- Max Principal stress
-
-
-
- -
-
-
- Y displacement
-
-
-
- -
-
-
- Min Principal stress
-
-
-
- -
-
-
- Z displacement
-
-
-
- -
-
-
- Max shear stress(Tresca)
-
-
-
- -
-
-
- Mass Flow Rate
-
-
-
- -
-
-
- Network Pressure
-
-
+
-
+
+
-
+
+
+ Avg:
+
+
+
+ -
+
+
+ true
+
+
+ mm
+
+
+
+ -
+
+
+ Max:
+
+
+
+ -
+
+
+ true
+
+
+ mm
+
+
+
+ -
+
+
+ true
+
+
+ mm
+
+
+
+ -
+
+
+ Min:
+
+
+
+
-
- -
-
+
+
+ -
+
+
+ Displacement
+
+
-
-
-
- Min:
-
-
+
+
-
+
+
+ Show
+
+
+ false
+
+
+
+ -
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+ Qt::Horizontal
+
+
+
+
-
-
-
- true
-
-
- mm
-
-
+
+
-
+
+
+ false
+
+
+ Factor:
+
+
+
+ -
+
+
+ false
+
+
+ false
+
+
+ 99999
+
+
+ 10
+
+
+ 1
+
+
+
+
+
+ -
+
+
-
+
+
+ false
+
+
+ Slider max:
+
+
+
+ -
+
+
+ false
+
+
+ false
+
+
+ 99999
+
+
+ 10
+
+
+ 100
+
+
+
+
-
- -
-
+
+
+ -
+
+
+ User defined equation
+
+
-
-
-
- Avg:
-
-
-
- -
-
-
- true
-
-
- mm
-
-
-
-
-
- -
-
-
-
-
-
- Max:
-
-
-
- -
-
-
- true
-
-
- mm
-
-
-
-
-
-
-
-
- -
-
-
- Displacement
-
-
-
-
-
-
-
-
-
- Show
-
-
- false
-
-
-
- -
-
-
- false
-
-
-
- 0
- 0
-
-
-
- Qt::Horizontal
-
-
-
-
-
- -
-
-
-
-
-
- false
-
-
- Factor:
-
-
-
- -
-
-
- false
-
-
- false
-
-
- 99999
-
-
- 10
-
-
- 1
-
-
-
-
-
- -
-
-
-
-
-
- false
-
-
- Slider max:
-
-
-
- -
-
-
- false
-
-
- false
-
-
- 99999
-
-
- 10
-
-
- 100
-
-
-
-
-
-
-
-
- -
-
-
- User defined equation
-
-
-
-
-
-
-
-
-
- Calculate and plot
-
-
-
- -
-
-
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+
-
+
+
+ Calculate and plot
+
+
+
+ -
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">P1-P3 # Stress intensity stress equation. Available values are numpy array format. Calculation np.funtion can be used on available values. </p></body></html>
-
-
-
- -
-
-
- <html><head/><body><p><span style=" text-decoration: underline;">Available result types:</span></p></body></html>
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 16777215
- 16777215
-
-
-
- 1
-
-
- <html><head/><body><p>displacement (x,y,z) and strain (ex,ey,ez)</p></body></html>
-
-
- false
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
-
- false
-
-
- -1
-
-
- Qt::NoTextInteraction
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 16777215
- 16777215
-
-
-
- 1
-
-
- <html><head/><body><p>stresses (sx,sy,sz) and principal stresses (P1,P2,P3)</p></body></html>
-
-
- false
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
-
- false
-
-
- -1
-
-
- Qt::NoTextInteraction
-
-
+</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">P1-P3 # Stress intensity stress equation. Available values are numpy array format. Calculation np.funtion can be used on available values. </span></p></body></html>
+
+
+
+ -
+
+
+ <html><head/><body><p><span style=" text-decoration: underline;">Available result types:</span></p></body></html>
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 16777215
+ 16777215
+
+
+
+ 1
+
+
+ <html><head/><body><p>displacement (x,y,z) and strain (ex,ey,ez)</p></body></html>
+
+
+ false
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+ false
+
+
+ -1
+
+
+ Qt::NoTextInteraction
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 16777215
+ 16777215
+
+
+
+ 1
+
+
+ <html><head/><body><p>stresses (sx,sy,sz) and principal stresses (P1,P2,P3)</p></body></html>
+
+
+ false
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+ false
+
+
+ -1
+
+
+ Qt::NoTextInteraction
+
+
+
+
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 92
-
-
-
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 240
+
+
+
+
+
diff --git a/src/Mod/Fem/PyGui/_TaskPanelShowResult.py b/src/Mod/Fem/PyGui/_TaskPanelShowResult.py
index 617bb666b..6c5d835d1 100644
--- a/src/Mod/Fem/PyGui/_TaskPanelShowResult.py
+++ b/src/Mod/Fem/PyGui/_TaskPanelShowResult.py
@@ -63,8 +63,7 @@ class _TaskPanelShowResult:
QtCore.QObject.connect(self.form.rb_max_shear_stress, QtCore.SIGNAL("toggled(bool)"), self.max_shear_selected)
QtCore.QObject.connect(self.form.rb_massflowrate, QtCore.SIGNAL("toggled(bool)"), self.massflowrate_selected)
QtCore.QObject.connect(self.form.rb_networkpressure, QtCore.SIGNAL("toggled(bool)"), self.networkpressure_selected)
- QtCore.QObject.connect(self.form.user_def_eq, QtCore.SIGNAL("textchanged()"), self.user_defined_text)
- QtCore.QObject.connect(self.form.calculate, QtCore.SIGNAL("clicked()"), self.calculate)
+ QtCore.QObject.connect(self.form.rb_peeq, QtCore.SIGNAL("toggled(bool)"), self.peeq_selected)
# displacement
QtCore.QObject.connect(self.form.cb_show_displacement, QtCore.SIGNAL("clicked(bool)"), self.show_displacement)
@@ -121,6 +120,9 @@ class _TaskPanelShowResult:
elif rt == "NPress":
self.form.rb_networkpressure.setChecked(True)
self.networkpressure_selected(True)
+ elif rt == "Peeq":
+ self.form.rb_peeq.setChecked(True)
+ self.peeq_selected(True)
sd = FreeCAD.FEM_dialog["show_disp"]
self.form.cb_show_displacement.setChecked(sd)
@@ -156,6 +158,7 @@ class _TaskPanelShowResult:
"MidPrin": (Stats[18], Stats[19], Stats[20]),
"MinPrin": (Stats[21], Stats[22], Stats[23]),
"MaxShear": (Stats[24], Stats[25], Stats[26]),
+ "Peeq": (Stats[27], Stats[28], Stats[29]),
"None": (0.0, 0.0, 0.0)}
return match_table[type_name]
return (0.0, 0.0, 0.0)
@@ -250,6 +253,15 @@ class _TaskPanelShowResult:
self.set_result_stats("MPa", minm, avg, maxm)
QtGui.qApp.restoreOverrideCursor()
+ def peeq_selected(self, state):
+ FreeCAD.FEM_dialog["results_type"] = "Peeq"
+ QApplication.setOverrideCursor(Qt.WaitCursor)
+ if self.suitable_results:
+ self.mesh_obj.ViewObject.setNodeColorByScalars(self.result_obj.NodeNumbers, self.result_obj.Peeq)
+ (minm, avg, maxm) = self.get_result_stats("Peeq")
+ self.set_result_stats("", minm, avg, maxm)
+ QtGui.qApp.restoreOverrideCursor()
+
def user_defined_text(self, equation):
FreeCAD.FEM_dialog["results_type"] = "user"
self.form.user_def_eq.toPlainText()
@@ -263,6 +275,7 @@ class _TaskPanelShowResult:
P2 = np.array(self.result_obj.PrincipalMed)
P3 = np.array(self.result_obj.PrincipalMin)
Von = np.array(self.result_obj.StressValues)
+ Peeq = np.array(self.result_obj.Peeq)
T = np.array(self.result_obj.Temperature)
MF = np.array(self.result_obj.MassFlowRate)
NP = np.array(self.result_obj.NetworkPressure)
@@ -290,7 +303,7 @@ class _TaskPanelShowResult:
self.mesh_obj.ViewObject.setNodeColorByScalars(self.result_obj.NodeNumbers, UserDefinedFormula)
self.set_result_stats("", minm, avg, maxm)
QtGui.qApp.restoreOverrideCursor()
- del x, y, z, T, Von, P1, P2, P3, sx, sy, sz, ex, ey, ez, MF, NP # Dummy use to get around flake8, varibles not being used
+ del x, y, z, T, Von, Peeq, P1, P2, P3, sx, sy, sz, ex, ey, ez, MF, NP # Dummy use to get around flake8, varibles not being used
def select_displacement_type(self, disp_type):
QApplication.setOverrideCursor(Qt.WaitCursor)
@@ -358,7 +371,8 @@ class _TaskPanelShowResult:
PrincipalMin --> rb_minprin
MaxShear --> rb_max_shear_stress
MassFlowRate --> rb_massflowrate
- NetworkPressure --> rb_networkpressure'''
+ NetworkPressure --> rb_networkpressure
+ Peeq --> rb_peeq'''
if len(self.result_obj.DisplacementLengths) == 0:
self.form.rb_abs_displacement.setEnabled(0)
if len(self.result_obj.DisplacementVectors) == 0:
@@ -379,6 +393,8 @@ class _TaskPanelShowResult:
self.form.rb_massflowrate.setEnabled(0)
if len(self.result_obj.NetworkPressure) == 0:
self.form.rb_networkpressure.setEnabled(0)
+ if len(self.result_obj.Peeq) == 0:
+ self.form.rb_peeq.setEnabled(0)
def update(self):
self.suitable_results = False
diff --git a/src/Mod/Fem/importCcxFrdResults.py b/src/Mod/Fem/importCcxFrdResults.py
index 7c09ba151..216c8f246 100644
--- a/src/Mod/Fem/importCcxFrdResults.py
+++ b/src/Mod/Fem/importCcxFrdResults.py
@@ -174,6 +174,21 @@ def importFrd(filename, analysis=None, result_name_prefix=None):
.format(results.NodeNumbers, len(results.StressValues)))
results.NodeNumbers = stress.keys()
+ # Read Equivalent Plastic strain if they exist
+ if 'peeq' in result_set:
+ Peeq = result_set['peeq']
+ if len(Peeq) > 0:
+ if len(Peeq.values()) != len(disp.values()):
+ Pe = []
+ Pe_extra_nodes = Peeq.values()
+ nodes = len(disp.values())
+ for i in range(nodes):
+ Pe_value = Pe_extra_nodes[i]
+ Pe.append(Pe_value)
+ results.Peeq = Pe
+ else:
+ results.Peeq = Peeq.values()
+
x_min, y_min, z_min = map(min, zip(*displacement))
sum_list = map(sum, zip(*displacement))
x_avg, y_avg, z_avg = [i / no_of_values for i in sum_list]
@@ -193,6 +208,14 @@ def importFrd(filename, analysis=None, result_name_prefix=None):
ms_min = min(results.MaxShear)
ms_avg = sum(results.MaxShear) / no_of_values
ms_max = max(results.MaxShear)
+ if results.Peeq:
+ peeq_max = max(results.Peeq)
+ peeq_min = min(results.Peeq)
+ peeq_avg = sum(results.Peeq) / no_of_values
+ else:
+ peeq_max = 0
+ peeq_min = 0
+ peeq_avg = 0
disp_abs = []
for d in displacement:
@@ -211,24 +234,8 @@ def importFrd(filename, analysis=None, result_name_prefix=None):
p1_min, p1_avg, p1_max,
p2_min, p2_avg, p2_max,
p3_min, p3_avg, p3_max,
- ms_min, ms_avg, ms_max]
- except:
- pass
-
- # Read Equivalent Plastic strain if they exist
- try:
- Peeq = result_set['peeq']
- if len(Peeq) > 0:
- if len(Peeq.values()) != len(disp.values()):
- Pe = []
- Pe_extra_nodes = Peeq.values()
- nodes = len(disp.values())
- for i in range(nodes):
- Pe_value = Pe_extra_nodes[i]
- Pe.append(Pe_value)
- results.Peeq = Pe
- else:
- results.Peeq = Peeq.values()
+ ms_min, ms_avg, ms_max,
+ peeq_min, peeq_avg, peeq_max]
except:
pass
diff --git a/src/Mod/Fem/importZ88O2Results.py b/src/Mod/Fem/importZ88O2Results.py
index 70f4acf93..5b660aa95 100644
--- a/src/Mod/Fem/importZ88O2Results.py
+++ b/src/Mod/Fem/importZ88O2Results.py
@@ -105,22 +105,7 @@ def import_z88_disp(filename, analysis=None, result_name_prefix=None):
# set stats of not imported values to 0
s_max = s_min = s_avg = 0
p1_min = p1_avg = p1_max = p2_min = p2_avg = p2_max = p3_min = p3_avg = p3_max = 0
- ms_min = ms_avg = ms_max = 0
- # s_max = max(results.StressValues)
- # s_min = min(results.StressValues)
- # s_avg = sum(results.StressValues) / no_of_values
- # p1_min = min(results.PrincipalMax)
- # p1_avg = sum(results.PrincipalMax) / no_of_values
- # p1_max = max(results.PrincipalMax)
- # p2_min = min(results.PrincipalMed)
- # p2_avg = sum(results.PrincipalMed) / no_of_values
- # p2_max = max(results.PrincipalMed)
- # p3_min = min(results.PrincipalMin)
- # p3_avg = sum(results.PrincipalMin) / no_of_values
- # p3_max = max(results.PrincipalMin)
- # ms_min = min(results.MaxShear)
- # ms_avg = sum(results.MaxShear) / no_of_values
- # ms_max = max(results.MaxShear)
+ ms_min = ms_avg = ms_max = peeq_min = peeq_avg = peeq_max = 0
disp_abs = []
for d in displacement:
@@ -139,7 +124,8 @@ def import_z88_disp(filename, analysis=None, result_name_prefix=None):
p1_min, p1_avg, p1_max,
p2_min, p2_avg, p2_max,
p3_min, p3_avg, p3_max,
- ms_min, ms_avg, ms_max]
+ ms_min, ms_avg, ms_max,
+ peeq_min, peeq_avg, peeq_max]
analysis_object.Member = analysis_object.Member + [results]
if(FreeCAD.GuiUp):