FEM: Change FEM results selection to radio buttons

Signed-off-by: Przemo Firszt <przemo@firszt.eu>
This commit is contained in:
Przemo Firszt 2015-05-30 23:07:25 +01:00 committed by Yorik van Havre
parent f29b003810
commit 9766893be1
2 changed files with 171 additions and 113 deletions

View File

@ -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()

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>203</width>
<height>379</height>
<width>331</width>
<height>431</height>
</rect>
</property>
<property name="windowTitle">
@ -17,48 +17,71 @@
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QGroupBox" name="groupBox_Color">
<widget class="QGroupBox" name="gb_result_type">
<property name="title">
<string>Colors</string>
<string>Result type</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QComboBox" name="comboBox_Type">
<item>
<property name="text">
<string>None</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QRadioButton" name="rb_y_displacement">
<property name="text">
<string>Y displacement</string>
</property>
</widget>
</item>
</widget>
<item row="0" column="0">
<widget class="QRadioButton" name="rb_x_displacement">
<property name="text">
<string>X displacement</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QRadioButton" name="rb_z_displacement">
<property name="text">
<string>Z displacement</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QRadioButton" name="rb_none">
<property name="text">
<string>None</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QRadioButton" name="rb_vm_stress">
<property name="text">
<string>Von Mises stress</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QRadioButton" name="rb_abs_displacement">
<property name="text">
<string>Abs displacement</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Avg:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="Gui::InputField" name="lineEdit_Avg">
<property name="readOnly">
<bool>true</bool>
</property>
<property name="unit" stdset="0">
<string notr="true">mm</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Max:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="Gui::InputField" name="lineEdit_Max">
<widget class="Gui::InputField" name="le_avg">
<property name="readOnly">
<bool>true</bool>
</property>
@ -68,14 +91,14 @@
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<widget class="QLabel" name="label">
<property name="text">
<string>Min:</string>
<string>Max:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="Gui::InputField" name="lineEdit_Min">
<widget class="Gui::InputField" name="le_max">
<property name="readOnly">
<bool>true</bool>
</property>
@ -84,26 +107,63 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="Gui::InputField" name="le_min">
<property name="readOnly">
<bool>true</bool>
</property>
<property name="unit" stdset="0">
<string notr="true">mm</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Min:</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<widget class="QGroupBox" name="gb_displacement">
<property name="title">
<string>Displacement</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QCheckBox" name="checkBox_ShowDisplacement">
<property name="text">
<string>Show</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QCheckBox" name="cb_show_displacement">
<property name="text">
<string>Show</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QScrollBar" name="hsb_factor">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
@ -118,7 +178,7 @@
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_DisplacementFactor">
<widget class="QSpinBox" name="sb_displacement_factor">
<property name="enabled">
<bool>false</bool>
</property>
@ -151,7 +211,7 @@
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_SliderFactor">
<widget class="QSpinBox" name="sb_slider_factor">
<property name="enabled">
<bool>false</bool>
</property>
@ -171,16 +231,6 @@
</item>
</layout>
</item>
<item>
<widget class="QScrollBar" name="horizontalScrollBar_Factor">
<property name="enabled">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
@ -211,7 +261,7 @@
<resources/>
<connections>
<connection>
<sender>checkBox_ShowDisplacement</sender>
<sender>cb_show_displacement</sender>
<signal>toggled(bool)</signal>
<receiver>label_3</receiver>
<slot>setEnabled(bool)</slot>
@ -227,9 +277,9 @@
</hints>
</connection>
<connection>
<sender>checkBox_ShowDisplacement</sender>
<sender>cb_show_displacement</sender>
<signal>toggled(bool)</signal>
<receiver>spinBox_DisplacementFactor</receiver>
<receiver>sb_displacement_factor</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
@ -243,7 +293,7 @@
</hints>
</connection>
<connection>
<sender>checkBox_ShowDisplacement</sender>
<sender>cb_show_displacement</sender>
<signal>toggled(bool)</signal>
<receiver>label_7</receiver>
<slot>setEnabled(bool)</slot>
@ -259,9 +309,9 @@
</hints>
</connection>
<connection>
<sender>checkBox_ShowDisplacement</sender>
<sender>cb_show_displacement</sender>
<signal>toggled(bool)</signal>
<receiver>spinBox_SliderFactor</receiver>
<receiver>sb_slider_factor</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
@ -275,9 +325,9 @@
</hints>
</connection>
<connection>
<sender>checkBox_ShowDisplacement</sender>
<sender>cb_show_displacement</sender>
<signal>toggled(bool)</signal>
<receiver>horizontalScrollBar_Factor</receiver>
<receiver>hsb_factor</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">