ViewProviderFemResultMechanical Slider Displacement with finer scale to support large scale deformations with needed magnification less than 1.0

supprt magnification from 0.1 to 1000000.0
This commit is contained in:
UR-0
2020-02-04 15:57:36 +01:00
committed by Bernd Hahnebach
parent 7d313e8c00
commit d52e040fce
2 changed files with 52 additions and 71 deletions

View File

@@ -207,6 +207,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
@@ -227,22 +230,22 @@
</widget>
</item>
<item>
<widget class="QSpinBox" name="sb_displacement_factor">
<widget class="QDoubleSpinBox" name="sb_displacement_factor">
<property name="enabled">
<bool>false</bool>
<bool>true</bool>
</property>
<property name="inputMethodHints">
<set>Qt::ImhFormattedNumbersOnly</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
<property name="maximum">
<number>1000000</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<property name="decimals">
<number>1</number>
</property>
<property name="maximum">
<double>1000000.000000000000000</double>
</property>
</widget>
</item>
</layout>
@@ -260,21 +263,21 @@
</widget>
</item>
<item>
<widget class="QSpinBox" name="sb_displacement_factor_max">
<widget class="QDoubleSpinBox" name="sb_displacement_factor_max">
<property name="enabled">
<bool>false</bool>
<bool>true</bool>
</property>
<property name="inputMethodHints">
<set>Qt::ImhFormattedNumbersOnly</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
<property name="decimals">
<number>1</number>
</property>
<property name="maximum">
<number>1000000</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>100</number>
<double>1000000.000000000000000</double>
</property>
</widget>
</item>
@@ -304,7 +307,7 @@
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Ubuntu'; font-size:11pt;&quot;&gt;P1-P3 # Stress intensity stress equation. Available values are numpy array format. Calculation np.function can be used on available values. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
@@ -437,22 +440,6 @@ p, li { white-space: pre-wrap; }
</hint>
</hints>
</connection>
<connection>
<sender>cb_show_displacement</sender>
<signal>toggled(bool)</signal>
<receiver>sb_displacement_factor</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>112</x>
<y>240</y>
</hint>
<hint type="destinationlabel">
<x>124</x>
<y>269</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_show_displacement</sender>
<signal>toggled(bool)</signal>
@@ -469,22 +456,6 @@ p, li { white-space: pre-wrap; }
</hint>
</hints>
</connection>
<connection>
<sender>cb_show_displacement</sender>
<signal>toggled(bool)</signal>
<receiver>sb_displacement_factor_max</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>161</x>
<y>237</y>
</hint>
<hint type="destinationlabel">
<x>159</x>
<y>302</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_show_displacement</sender>
<signal>toggled(bool)</signal>

View File

@@ -217,16 +217,18 @@ class _TaskPanelFemResultShow:
QtCore.SIGNAL("valueChanged(int)"),
self.hsb_disp_factor_changed
)
QtCore.QObject.connect(
self.form.sb_displacement_factor,
QtCore.SIGNAL("valueChanged(int)"),
self.sb_disp_factor_changed
)
QtCore.QObject.connect(
self.form.sb_displacement_factor_max,
QtCore.SIGNAL("valueChanged(int)"),
self.sb_disp_factor_max_changed
)
# QtCore.QObject.connect(
# self.form.sb_displacement_factor,
# QtCore.SIGNAL("valueChanged(int)"),
# self.sb_disp_factor_changed
# )
self.form.sb_displacement_factor.valueChanged.connect(self.sb_disp_factor_changed)
# QtCore.QObject.connect(
# self.form.sb_displacement_factor_max,
# QtCore.SIGNAL("valueChanged(int)"),
# self.sb_disp_factor_max_changed
# )
self.form.sb_displacement_factor_max.valueChanged.connect(self.sb_disp_factor_max_changed)
# user defined equation
QtCore.QObject.connect(
@@ -247,11 +249,9 @@ 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.hsb_displacement_factor.setValue(scale_factor)
diggits_scale_factor = len(str(abs(int(scale_factor))))
new_max_factor = 10 ** diggits_scale_factor
self.form.sb_displacement_factor_max.setValue(new_max_factor)
def restore_result_dialog(self):
try:
@@ -302,8 +302,8 @@ class _TaskPanelFemResultShow:
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.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)
except:
@@ -545,7 +545,7 @@ class _TaskPanelFemResultShow:
def update_displacement(self, factor=None):
if factor is None:
if FreeCAD.FEM_dialog["show_disp"]:
factor = self.form.hsb_displacement_factor.value()
factor = self.form.sb_displacement_factor.value()
else:
factor = 0.0
self.mesh_obj.ViewObject.applyDisplacement(factor)
@@ -566,16 +566,26 @@ class _TaskPanelFemResultShow:
QtGui.QApplication.restoreOverrideCursor()
def hsb_disp_factor_changed(self, value):
self.form.sb_displacement_factor.setValue(value)
self.form.sb_displacement_factor.setValue(value / 100. * self.form.sb_displacement_factor_max.value())
self.update_displacement()
def sb_disp_factor_max_changed(self, value):
FreeCAD.FEM_dialog["disp_factor_max"] = value
self.form.hsb_displacement_factor.setMaximum(value)
if value < self.form.sb_displacement_factor.value():
self.form.sb_displacement_factor.setValue(value)
if value == 0.:
self.form.hsb_displacement_factor.setValue(0)
else:
self.form.hsb_displacement_factor.setValue(self.form.sb_displacement_factor.value() / value * 100.)
def sb_disp_factor_changed(self, value):
FreeCAD.FEM_dialog["disp_factor"] = value
self.form.hsb_displacement_factor.setValue(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.)
else:
self.form.hsb_displacement_factor.setValue(value / self.form.sb_displacement_factor_max.value() * 100.)
def disable_empty_result_buttons(self):
""" disable radio buttons if result does not exists in result object"""