FEM: Change FEM results selection to radio buttons
Signed-off-by: Przemo Firszt <przemo@firszt.eu>
This commit is contained in:
parent
f29b003810
commit
9766893be1
|
@ -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()
|
||||
|
|
|
@ -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">
|
||||
|
|
Loading…
Reference in New Issue
Block a user