diff --git a/src/Mod/Ship/shipHydrostatics/TaskPanel.py b/src/Mod/Ship/shipHydrostatics/TaskPanel.py index 5e48f0f75..c00d491e8 100644 --- a/src/Mod/Ship/shipHydrostatics/TaskPanel.py +++ b/src/Mod/Ship/shipHydrostatics/TaskPanel.py @@ -32,6 +32,7 @@ from PySide import QtGui, QtCore import PlotAux import Instance from shipUtils import Paths +import shipUtils.Units as USys import Tools @@ -50,13 +51,14 @@ class TaskPanel: mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") - form.trim = self.widget(QtGui.QDoubleSpinBox, "Trim") - form.minDraft = self.widget(QtGui.QDoubleSpinBox, "MinDraft") - form.maxDraft = self.widget(QtGui.QDoubleSpinBox, "MaxDraft") + form.trim = self.widget(QtGui.QLineEdit, "Trim") + form.minDraft = self.widget(QtGui.QLineEdit, "MinDraft") + form.maxDraft = self.widget(QtGui.QLineEdit, "MaxDraft") form.nDraft = self.widget(QtGui.QSpinBox, "NDraft") - min_draft = form.minDraft.value() - max_draft = form.maxDraft.value() + trim = Units.Quantity(form.trim.text()).getValueAs('deg').Value + min_draft = Units.Quantity(form.minDraft.text()).getValueAs('m').Value + max_draft = Units.Quantity(form.maxDraft.text()).getValueAs('m').Value n_draft = form.nDraft.value() draft = min_draft @@ -102,13 +104,13 @@ class TaskPanel: point = Tools.Point(self.ship, faces, draft, - form.trim.value()) + trim) points.append(point) self.timer.start(0.0) self.loop.exec_() if(not self.running): break - PlotAux.Plot(self.ship, form.trim.value(), points) + PlotAux.Plot(self.ship, trim, points) return True def reject(self): @@ -143,9 +145,9 @@ class TaskPanel: def setupUi(self): mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") - form.trim = self.widget(QtGui.QDoubleSpinBox, "Trim") - form.minDraft = self.widget(QtGui.QDoubleSpinBox, "MinDraft") - form.maxDraft = self.widget(QtGui.QDoubleSpinBox, "MaxDraft") + form.trim = self.widget(QtGui.QLineEdit, "Trim") + form.minDraft = self.widget(QtGui.QLineEdit, "MinDraft") + form.maxDraft = self.widget(QtGui.QLineEdit, "MaxDraft") form.nDraft = self.widget(QtGui.QSpinBox, "NDraft") self.form = form # Initial values @@ -186,9 +188,9 @@ class TaskPanel: """ mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") - form.trim = self.widget(QtGui.QDoubleSpinBox, "Trim") - form.minDraft = self.widget(QtGui.QDoubleSpinBox, "MinDraft") - form.maxDraft = self.widget(QtGui.QDoubleSpinBox, "MaxDraft") + form.trim = self.widget(QtGui.QLineEdit, "Trim") + form.minDraft = self.widget(QtGui.QLineEdit, "MinDraft") + form.maxDraft = self.widget(QtGui.QLineEdit, "MaxDraft") form.nDraft = self.widget(QtGui.QSpinBox, "NDraft") selObjs = Gui.Selection.getSelection() @@ -230,35 +232,35 @@ class TaskPanel: App.Console.PrintError(msg + '\n') return True - bbox = self.ship.Shape.BoundBox props = self.ship.PropertiesList + length_format = USys.getLengthFormat() + angle_format = USys.getAngleFormat() + try: props.index("HydrostaticsTrim") - form.trim.setValue( - self.ship.HydrostaticsTrim.getValueAs('deg').Value) + form.trim.setText(angle_format.format( + self.ship.HydrostaticsTrim.getValueAs( + USys.getLengthUnits()).Value)) except ValueError: - pass + form.trim.setText(angle_format.format(0.0)) try: props.index("HydrostaticsMinDraft") - form.minDraft.setValue( - self.ship.HydrostaticsMinDraft.getValueAs('m').Value) + form.minDraft.setText(length_format.format( + self.ship.HydrostaticsMinDraft.getValueAs( + USys.getLengthUnits()).Value)) except ValueError: - form.minDraft.setValue( - 0.9 * self.ship.Draft.getValueAs('m').Value) + form.minDraft.setText(length_format.format( + 0.9 * self.ship.Draft.getValueAs('m').Value)) try: props.index("HydrostaticsMaxDraft") - form.maxDraft.setValue( - self.ship.HydrostaticsMaxDraft.getValueAs('m').Value) + form.maxDraft.setText(length_format.format( + self.ship.HydrostaticsMaxDraft.getValueAs( + USys.getLengthUnits()).Value)) except ValueError: - form.maxDraft.setValue( - 1.1 * self.ship.Draft.getValueAs('m').Value) - - form.maxDraft.setMaximum(bbox.ZMax / Units.Metre.Value) - form.minDraft.setMinimum(bbox.ZMin / Units.Metre.Value) - form.maxDraft.setMinimum(form.minDraft.value()) - form.minDraft.setMaximum(form.maxDraft.value()) + form.maxDraft.setText(length_format.format( + 1.1 * self.ship.Draft.getValueAs('m').Value)) try: props.index("HydrostaticsNDraft") @@ -303,6 +305,26 @@ class TaskPanel: None, QtGui.QApplication.UnicodeUTF8)) + def clampLength(self, widget, val_min, val_max, val): + if val >= val_min and val <= val_max: + return val + input_format = USys.getLengthFormat() + val = min(val_max, max(val_min, val)) + qty = Units.Quantity('{} m'.format(val)) + widget.setText(input_format.format( + qty.getValueAs(USys.getLengthUnits()).Value)) + return val + + def clampAngle(self, widget, val_min, val_max, val): + if val >= val_min and val <= val_max: + return val + input_format = USys.getAngleFormat() + val = min(val_max, max(val_min, val)) + qty = Units.Quantity('{} deg'.format(val)) + widget.setText(input_format.format( + qty.getValueAs(USys.getLengthUnits()).Value)) + return val + def onData(self, value): """ Method called when input data is changed. @param value Changed value. @@ -311,22 +333,82 @@ class TaskPanel: return mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") - form.minDraft = self.widget(QtGui.QDoubleSpinBox, "MinDraft") - form.maxDraft = self.widget(QtGui.QDoubleSpinBox, "MaxDraft") - form.maxDraft.setMinimum(form.minDraft.value()) - form.minDraft.setMaximum(form.maxDraft.value()) + form.trim = self.widget(QtGui.QLineEdit, "Trim") + form.minDraft = self.widget(QtGui.QLineEdit, "MinDraft") + form.maxDraft = self.widget(QtGui.QLineEdit, "MaxDraft") + + # Get the values (or fix them in bad setting case) + try: + trim = Units.Quantity(form.trim.text()).getValueAs('deg').Value + except: + trim = 0.0 + input_format = USys.getAngleFormat() + qty = Units.Quantity('{} deg'.format(trim)) + form.trim.setText(input_format.format( + qty.getValueAs(USys.getLengthUnits()).Value)) + try: + min_draft = Units.Quantity( + form.minDraft.text()).getValueAs('m').Value + except: + min_draft = 0.9 * self.ship.Draft.getValueAs('m').Value + input_format = USys.getLengthFormat() + qty = Units.Quantity('{} m'.format(draft)) + form.minDraft.setText(input_format.format( + qty.getValueAs(USys.getLengthUnits()).Value)) + try: + max_draft = Units.Quantity( + form.minDraft.text()).getValueAs('m').Value + except: + max_draft = 0.9 * self.ship.Draft.getValueAs('m').Value + input_format = USys.getLengthFormat() + qty = Units.Quantity('{} m'.format(draft)) + form.maxDraft.setText(input_format.format( + qty.getValueAs(USys.getLengthUnits()).Value)) + + # Clamp the values to the bounds + bbox = self.ship.Shape.BoundBox + draft_min = bbox.ZMin / Units.Metre.Value + draft_max = bbox.ZMax / Units.Metre.Value + min_draft = self.clampLength(form.minDraft, + draft_min, + draft_max, + min_draft) + max_draft = self.clampLength(form.maxDraft, + draft_min, + draft_max, + max_draft) + trim_min = -180.0 + trim_max = 180.0 + trim = self.clampAngle(form.trim, trim_min, trim_max, trim) + + # Clamp draft values to assert that the minimum value is lower than + # the maximum one + min_draft = self.clampLength(form.minDraft, + draft_min, + max_draft, + min_draft) + max_draft = self.clampLength(form.maxDraft, + min_draft, + draft_max, + max_draft) + def save(self): """ Saves data into ship instance. """ mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") - form.trim = self.widget(QtGui.QDoubleSpinBox, "Trim") - form.minDraft = self.widget(QtGui.QDoubleSpinBox, "MinDraft") - form.maxDraft = self.widget(QtGui.QDoubleSpinBox, "MaxDraft") + form.trim = self.widget(QtGui.QLineEdit, "Trim") + form.minDraft = self.widget(QtGui.QLineEdit, "MinDraft") + form.maxDraft = self.widget(QtGui.QLineEdit, "MaxDraft") form.nDraft = self.widget(QtGui.QSpinBox, "NDraft") - props = self.ship.PropertiesList + trim = Units.Quantity(form.trim.text()).getValueAs('deg').Value + min_draft = Units.Quantity(form.minDraft.text()).getValueAs('m').Value + max_draft = Units.Quantity(form.maxDraft.text()).getValueAs('m').Value + n_draft = form.nDraft.value() + + props = self.ship.PropertiesList try: props.index("HydrostaticsTrim") except ValueError: @@ -339,7 +421,7 @@ class TaskPanel: "HydrostaticsTrim", "Ship", tooltip) - self.ship.HydrostaticsTrim = '{} deg'.format(form.trim.value()) + self.ship.HydrostaticsTrim = '{} deg'.format(trim) try: props.index("HydrostaticsMinDraft") @@ -353,7 +435,7 @@ class TaskPanel: "HydrostaticsMinDraft", "Ship", tooltip) - self.ship.HydrostaticsMinDraft = '{} m'.format(form.minDraft.value()) + self.ship.HydrostaticsMinDraft = '{} m'.format(min_draft) try: props.index("HydrostaticsMaxDraft") @@ -367,7 +449,7 @@ class TaskPanel: "HydrostaticsMaxDraft", "Ship", tooltip) - self.ship.HydrostaticsMaxDraft = '{} m'.format(form.maxDraft.value()) + self.ship.HydrostaticsMaxDraft = '{} m'.format(max_draft) try: props.index("HydrostaticsNDraft") diff --git a/src/Mod/Ship/shipHydrostatics/TaskPanel.ui b/src/Mod/Ship/shipHydrostatics/TaskPanel.ui index 8542a7ab1..bf36e6c1e 100644 --- a/src/Mod/Ship/shipHydrostatics/TaskPanel.ui +++ b/src/Mod/Ship/shipHydrostatics/TaskPanel.ui @@ -36,39 +36,7 @@ - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 1 - - - -45.000000000000000 - - - 45.000000000000000 - - - - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - Deg - - + @@ -89,19 +57,6 @@ QLayout::SetDefaultConstraint - - - - - 0 - 0 - - - - m - - - @@ -128,19 +83,6 @@ - - - - - 0 - 0 - - - - m - - - @@ -160,32 +102,6 @@ - - - - - 0 - 0 - - - - 3 - - - 0.010000000000000 - - - - - - - 3 - - - 0.010000000000000 - - - @@ -199,6 +115,12 @@ + + + + + + @@ -206,6 +128,13 @@ + + + Gui::InputField + QLineEdit +
Gui/Inputfield.h
+
+