def onData(self, value): """Updates the 3D preview on data changes. Keyword arguments: value -- Edited value. This parameter is required in order to use this method as a callback function, but it is unuseful. """ mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.length = self.widget(QtGui.QLineEdit, "Length") form.breadth = self.widget(QtGui.QLineEdit, "Breadth") form.draft = self.widget(QtGui.QLineEdit, "Draft") qty = Units.Quantity(Locale.fromString(form.length.text())) val_min = 0.001 val_max = self.bounds[0] / Units.Metre.Value val = qty.getValueAs('m').Value self.L = self.clampVal(form.length, val_min, val_max, val) qty = Units.Quantity(Locale.fromString(form.breadth.text())) val_min = 0.001 val_max = self.bounds[1] / Units.Metre.Value val = qty.getValueAs('m').Value self.B = self.clampVal(form.breadth, val_min, val_max, val) qty = Units.Quantity(Locale.fromString(form.draft.text())) val_min = 0.001 val_max = self.bounds[2] / Units.Metre.Value val = qty.getValueAs('m').Value self.T = self.clampVal(form.draft, val_min, val_max, val) self.preview.update(self.L, self.B, self.T)
def accept(self): if not self.ship: return False self.save() # Plot data mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") draft = Units.Quantity(Locale.fromString( form.draft.text())).getValueAs('m').Value trim = Units.Quantity(Locale.fromString( form.trim.text())).getValueAs('deg').Value data = Hydrostatics.displacement(self.ship, draft, 0.0, trim) disp = data[0] xcb = data[1].x data = Hydrostatics.areas(self.ship, draft, 0.0, trim) x = [] y = [] for i in range(0, len(data)): x.append(data[i][0]) y.append(data[i][1]) PlotAux.Plot(x, y, disp, xcb, self.ship) self.preview.clean() return True
def onData(self, value): """ Method called when the tool input data is touched. @param value Changed value. """ if not self.ship: return mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") # Get the values (or fix them in bad setting case) try: draft = Units.parseQuantity(Locale.fromString(form.draft.text())) except: draft = self.ship.Draft form.draft.setText(draft.UserString) try: trim = Units.parseQuantity(Locale.fromString(form.trim.text())) except: trim = Units.parseQuantity("0 deg") form.trim.setText(trim.UserString) bbox = self.ship.Shape.BoundBox draft_min = Units.Quantity(bbox.ZMin, Units.Length) draft_max = Units.Quantity(bbox.ZMax, Units.Length) draft = self.clampValue(form.draft, draft_min, draft_max, draft) trim_min = Units.parseQuantity("-180 deg") trim_max = Units.parseQuantity("180 deg") trim = self.clampValue(form.trim, trim_min, trim_max, trim) self.onUpdate() self.preview.update(draft, trim, self.ship)
def accept(self): if not self.ship: return False self.save() # Plot data mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") form.num = self.widget(QtGui.QSpinBox, "Num") draft = Units.parseQuantity(Locale.fromString(form.draft.text())) trim = Units.parseQuantity(Locale.fromString(form.trim.text())) num = form.num.value() disp, B, _ = Hydrostatics.displacement(self.ship, draft, Units.parseQuantity("0 deg"), trim) xcb = Units.Quantity(B.x, Units.Length) data = Hydrostatics.areas(self.ship, num, draft=draft, trim=trim) x = [] y = [] for i in range(0, len(data)): x.append(data[i][0].getValueAs("m").Value) y.append(data[i][1].getValueAs("m^2").Value) PlotAux.Plot(x, y, disp, xcb, self.ship) self.preview.clean() return True
def save(self): """ Saves the data into ship instance. """ mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") form.num = self.widget(QtGui.QSpinBox, "Num") draft = Units.parseQuantity(Locale.fromString(form.draft.text())) trim = Units.parseQuantity(Locale.fromString(form.trim.text())) num = form.num.value() props = self.ship.PropertiesList try: props.index("AreaCurveDraft") except ValueError: try: tooltip = str(QtGui.QApplication.translate( "ship_areas", "Areas curve tool draft selected [m]", None)) except: tooltip = "Areas curve tool draft selected [m]" self.ship.addProperty("App::PropertyLength", "AreaCurveDraft", "Ship", tooltip) self.ship.AreaCurveDraft = draft try: props.index("AreaCurveTrim") except ValueError: try: tooltip = str(QtGui.QApplication.translate( "ship_areas", "Areas curve tool trim selected [deg]", None)) except: tooltip = "Areas curve tool trim selected [deg]" self.ship.addProperty("App::PropertyAngle", "AreaCurveTrim", "Ship", tooltip) self.ship.AreaCurveTrim = trim try: props.index("AreaCurveNum") except ValueError: try: tooltip = str(QtGui.QApplication.translate( "ship_areas", "Areas curve tool number of points", None)) except: tooltip = "Areas curve tool number of points" self.ship.addProperty("App::PropertyInteger", "AreaCurveNum", "Ship", tooltip) self.ship.AreaCurveNum = num
def save(self): """ Saves the data into ship instance. """ mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") form.num = self.widget(QtGui.QSpinBox, "Num") draft = Units.parseQuantity(Locale.fromString(form.draft.text())) trim = Units.parseQuantity(Locale.fromString(form.trim.text())) num = form.num.value() props = self.ship.PropertiesList try: props.index("AreaCurveDraft") except ValueError: try: tooltip = str( QtGui.QApplication.translate( "ship_areas", "Areas curve tool draft selected [m]", None)) except: tooltip = "Areas curve tool draft selected [m]" self.ship.addProperty("App::PropertyLength", "AreaCurveDraft", "Ship", tooltip) self.ship.AreaCurveDraft = draft try: props.index("AreaCurveTrim") except ValueError: try: tooltip = str( QtGui.QApplication.translate( "ship_areas", "Areas curve tool trim selected [deg]", None)) except: tooltip = "Areas curve tool trim selected [deg]" self.ship.addProperty("App::PropertyAngle", "AreaCurveTrim", "Ship", tooltip) self.ship.AreaCurveTrim = trim try: props.index("AreaCurveNum") except ValueError: try: tooltip = str( QtGui.QApplication.translate( "ship_areas", "Areas curve tool number of points", None)) except: tooltip = "Areas curve tool number of points" self.ship.addProperty("App::PropertyInteger", "AreaCurveNum", "Ship", tooltip) self.ship.AreaCurveNum = num
def accept(self): """Create the ship instance""" self.preview.clean() mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.length = self.widget(QtGui.QLineEdit, "Length") form.breadth = self.widget(QtGui.QLineEdit, "Breadth") form.draft = self.widget(QtGui.QLineEdit, "Draft") Tools.createShip(self.solids, Locale.fromString(form.length.text()), Locale.fromString(form.breadth.text()), Locale.fromString(form.draft.text())) return True
def accept(self): if self.lc is None: return False self.save() mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.angle = self.widget(QtGui.QLineEdit, "Angle") form.n_points = self.widget(QtGui.QSpinBox, "NumPoints") form.var_trim = self.widget(QtGui.QCheckBox, "VariableTrim") roll = Units.Quantity(Locale.fromString(form.angle.text())) n_points = form.n_points.value() var_trim = form.var_trim.isChecked() rolls = [] for i in range(n_points): rolls.append(roll * i / float(n_points - 1)) points = Tools.gz(self.lc, rolls, var_trim) gzs = [] drafts = [] trims = [] for p in points: gzs.append(p[0].getValueAs("m").Value) drafts.append(p[1].getValueAs("m").Value) trims.append(p[2].getValueAs("deg").Value) PlotAux.Plot(rolls, gzs, drafts, trims) return True
def accept(self): if self.lc is None: return False self.save() mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.angle = self.widget(QtGui.QLineEdit, "Angle") form.n_points = self.widget(QtGui.QSpinBox, "NumPoints") form.var_trim = self.widget(QtGui.QCheckBox, "VariableTrim") roll = Units.Quantity(Locale.fromString(form.angle.text())) n_points = form.n_points.value() var_trim = form.var_trim.isChecked() rolls = [] for i in range(n_points): rolls.append(roll * i / float(n_points - 1)) points = Tools.gz(self.lc, rolls, var_trim) gzs = [] drafts = [] trims = [] for p in points: gzs.append(p[0].getValueAs('m').Value) drafts.append(p[1].getValueAs('m').Value) trims.append(p[2].getValueAs('deg').Value) PlotAux.Plot(rolls, gzs, drafts, trims) return True
def onData(self, value): """ Method called when the tool input data is touched. @param value Changed value. """ if not self.ship: return mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") # Get the values (or fix them in bad setting case) try: draft = Units.Quantity(Locale.fromString( form.draft.text())).getValueAs('m').Value except: draft = self.ship.Draft.getValueAs(USys.getLengthUnits()).Value input_format = USys.getLengthFormat() qty = Units.Quantity('{} m'.format(draft)) widget.setText( Locale.toString( input_format.format( qty.getValueAs(USys.getLengthUnits()).Value))) try: trim = Units.Quantity(Locale.fromString( form.trim.text())).getValueAs('deg').Value except: trim = 0.0 input_format = USys.getAngleFormat() qty = Units.Quantity('{} deg'.format(trim)) widget.setText( Locale.toString( input_format.format( qty.getValueAs(USys.getLengthUnits()).Value))) bbox = self.ship.Shape.BoundBox draft_min = bbox.ZMin / Units.Metre.Value draft_max = bbox.ZMax / Units.Metre.Value draft = self.clampLength(form.draft, draft_min, draft_max, draft) trim_min = -180.0 trim_max = 180.0 trim = self.clampAngle(form.trim, trim_min, trim_max, trim) self.onUpdate() self.preview.update(draft, trim, self.ship)
def save(self): """ Saves the data into ship instance. """ mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.angle = self.widget(QtGui.QLineEdit, "Angle") form.n_points = self.widget(QtGui.QSpinBox, "NumPoints") form.var_trim = self.widget(QtGui.QCheckBox, "VariableTrim") angle = Units.Quantity(Locale.fromString( form.angle.text())).getValueAs('deg').Value n_points = form.n_points.value() var_trim = form.var_trim.isChecked() props = self.ship.PropertiesList try: props.index("GZAngle") except ValueError: try: tooltip = str(QtGui.QApplication.translate( "ship_gz", "GZ curve tool angle selected [deg]", None)) except: tooltip = "GZ curve tool angle selected [deg]" self.ship.addProperty("App::PropertyAngle", "GZAngle", "Ship", tooltip) self.ship.GZAngle = '{} deg'.format(angle) try: props.index("GZNumPoints") except ValueError: try: tooltip = str(QtGui.QApplication.translate( "ship_gz", "GZ curve tool number of points selected", None)) except: tooltip = "GZ curve tool number of points selected" self.ship.addProperty("App::PropertyInteger", "GZNumPoints", "Ship", tooltip) self.ship.GZNumPoints = n_points try: props.index("GZVariableTrim") except ValueError: try: tooltip = str(QtGui.QApplication.translate( "ship_gz", "GZ curve tool variable trim angle selection", None)) except: tooltip = "GZ curve tool variable trim angle selection" self.ship.addProperty("App::PropertyBool", "GZVariableTrim", "Ship", tooltip) self.ship.GZVariableTrim = var_trim
def accept(self): """Create the ship instance""" self.preview.clean() obj = App.ActiveDocument.addObject("Part::FeaturePython", "Ship") ship = Instance.Ship(obj, self.solids) Instance.ViewProviderShip(obj.ViewObject) mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.length = self.widget(QtGui.QLineEdit, "Length") form.breadth = self.widget(QtGui.QLineEdit, "Breadth") form.draft = self.widget(QtGui.QLineEdit, "Draft") obj.Length = Locale.fromString(form.length.text()) obj.Breadth = Locale.fromString(form.breadth.text()) obj.Draft = Locale.fromString(form.draft.text()) App.ActiveDocument.recompute() return True
def onUpdate(self): """ Method called when the data update is requested. """ if not self.ship: return mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") form.output = self.widget(QtGui.QTextEdit, "OutputData") draft = Units.Quantity(Locale.fromString( form.draft.text())).getValueAs('m').Value trim = Units.Quantity(Locale.fromString( form.trim.text())).getValueAs('deg').Value # Calculate the drafts at each perpendicular angle = math.radians(trim) L = self.ship.Length.getValueAs('m').Value B = self.ship.Breadth.getValueAs('m').Value draftAP = draft + 0.5 * L * math.tan(angle) if draftAP < 0.0: draftAP = 0.0 draftFP = draft - 0.5 * L * math.tan(angle) if draftFP < 0.0: draftFP = 0.0 # Calculate the involved hydrostatics data = Hydrostatics.displacement(self.ship, draft, 0.0, trim) # Setup the html string string = 'L = {0} [m]<BR>'.format(L) string = string + 'B = {0} [m]<BR>'.format(B) string = string + 'T = {0} [m]<HR>'.format(draft) string = string + 'Trim = {0} [degrees]<BR>'.format(trim) string = string + 'T<sub>AP</sub> = {0} [m]<BR>'.format(draftAP) string = string + 'T<sub>FP</sub> = {0} [m]<HR>'.format(draftFP) dispText = QtGui.QApplication.translate( "ship_areas", 'Displacement', None, QtGui.QApplication.UnicodeUTF8) string = string + dispText + ' = {0} [ton]<BR>'.format(data[0]) string = string + 'XCB = {0} [m]'.format(data[1].x) form.output.setHtml(string)
def save(self): """ Saves the data into ship instance. """ mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") draft = Units.Quantity(Locale.fromString( form.draft.text())).getValueAs('m').Value trim = Units.Quantity(Locale.fromString( form.trim.text())).getValueAs('deg').Value props = self.ship.PropertiesList try: props.index("AreaCurveDraft") except ValueError: try: tooltip = str(QtGui.QApplication.translate( "ship_areas", "Areas curve tool draft selected [m]", None, QtGui.QApplication.UnicodeUTF8)) except: tooltip = "Areas curve tool draft selected [m]" self.ship.addProperty("App::PropertyLength", "AreaCurveDraft", "Ship", tooltip) self.ship.AreaCurveDraft = '{} m'.format(draft) try: props.index("AreaCurveTrim") except ValueError: try: tooltip = str(QtGui.QApplication.translate( "ship_areas", "Areas curve tool trim selected [deg]", None, QtGui.QApplication.UnicodeUTF8)) except: tooltip = "Areas curve tool trim selected [deg]" self.ship.addProperty("App::PropertyAngle", "AreaCurveTrim", "Ship", tooltip) self.ship.AreaCurveTrim = '{} deg'.format(trim)
def clampVal(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(Locale.toString(input_format.format( qty.getValueAs(USys.getLengthUnits()).Value))) return val
def onUpdate(self): """ Method called when the data update is requested. """ if not self.ship: return mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") form.output = self.widget(QtGui.QTextEdit, "OutputData") draft = Units.parseQuantity(Locale.fromString(form.draft.text())) trim = Units.parseQuantity(Locale.fromString(form.trim.text())) # Calculate the drafts at each perpendicular angle = trim.getValueAs("rad").Value L = self.ship.Length.getValueAs('m').Value B = self.ship.Breadth.getValueAs('m').Value draftAP = draft + 0.5 * self.ship.Length * math.tan(angle) if draftAP < 0.0: draftAP = 0.0 draftFP = draft - 0.5 * self.ship.Length * math.tan(angle) if draftFP < 0.0: draftFP = 0.0 # Calculate the involved hydrostatics disp, B, _ = Hydrostatics.displacement(self.ship, draft, Units.parseQuantity("0 deg"), trim) xcb = Units.Quantity(B.x, Units.Length) # Setup the html string string = u'L = {0}<BR>'.format(self.ship.Length.UserString) string += u'B = {0}<BR>'.format(self.ship.Breadth.UserString) string += u'T = {0}<HR>'.format(draft.UserString) string += u'Trim = {0}<BR>'.format(trim.UserString) string += u'T<sub>AP</sub> = {0}<BR>'.format(draftAP.UserString) string += u'T<sub>FP</sub> = {0}<HR>'.format(draftFP.UserString) dispText = QtGui.QApplication.translate( "ship_areas", 'Displacement', None, QtGui.QApplication.UnicodeUTF8) string += dispText + u' = {0}<BR>'.format(disp.UserString) string += u'XCB = {0}'.format(xcb.UserString) form.output.setHtml(string)
def onData(self, value): """ Method called when the tool input data is touched. @param value Changed value. """ if not self.ship: return mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") # Get the values (or fix them in bad setting case) try: draft = Units.Quantity(Locale.fromString( form.draft.text())).getValueAs('m').Value except: draft = self.ship.Draft.getValueAs(USys.getLengthUnits()).Value input_format = USys.getLengthFormat() qty = Units.Quantity('{} m'.format(draft)) widget.setText(Locale.toString(input_format.format( qty.getValueAs(USys.getLengthUnits()).Value))) try: trim = Units.Quantity(Locale.fromString( form.trim.text())).getValueAs('deg').Value except: trim = 0.0 input_format = USys.getAngleFormat() qty = Units.Quantity('{} deg'.format(trim)) widget.setText(Locale.toString(input_format.format( qty.getValueAs(USys.getLengthUnits()).Value))) bbox = self.ship.Shape.BoundBox draft_min = bbox.ZMin / Units.Metre.Value draft_max = bbox.ZMax / Units.Metre.Value draft = self.clampLength(form.draft, draft_min, draft_max, draft) trim_min = -180.0 trim_max = 180.0 trim = self.clampAngle(form.trim, trim_min, trim_max, trim) self.onUpdate() self.preview.update(draft, trim, self.ship)
def onUpdate(self): """ Method called when the data update is requested. """ if not self.ship: return mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") form.output = self.widget(QtGui.QTextEdit, "OutputData") draft = Units.parseQuantity(Locale.fromString(form.draft.text())) trim = Units.parseQuantity(Locale.fromString(form.trim.text())) # Calculate the drafts at each perpendicular angle = trim.getValueAs("rad").Value L = self.ship.Length.getValueAs('m').Value B = self.ship.Breadth.getValueAs('m').Value draftAP = draft + 0.5 * self.ship.Length * math.tan(angle) if draftAP < 0.0: draftAP = 0.0 draftFP = draft - 0.5 * self.ship.Length * math.tan(angle) if draftFP < 0.0: draftFP = 0.0 # Calculate the involved hydrostatics disp, B, _ = Hydrostatics.displacement(self.ship, draft, Units.parseQuantity("0 deg"), trim) xcb = Units.Quantity(B.x, Units.Length) # Setup the html string string = u'L = {0}<BR>'.format(self.ship.Length.UserString) string += u'B = {0}<BR>'.format(self.ship.Breadth.UserString) string += u'T = {0}<HR>'.format(draft.UserString) string += u'Trim = {0}<BR>'.format(trim.UserString) string += u'T<sub>AP</sub> = {0}<BR>'.format(draftAP.UserString) string += u'T<sub>FP</sub> = {0}<HR>'.format(draftFP.UserString) dispText = QtGui.QApplication.translate("ship_areas", 'Displacement', None, QtGui.QApplication.UnicodeUTF8) string += dispText + u' = {0}<BR>'.format(disp.UserString) string += u'XCB = {0}'.format(xcb.UserString) form.output.setHtml(string)
def accept(self): """Create the ship instance""" mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.ship = self.widget(QtGui.QComboBox, "Ship") form.weight = self.widget(QtGui.QLineEdit, "Weight") ship = self.ships[form.ship.currentIndex()] density = Units.parseQuantity(Locale.fromString(form.weight.text())) Tools.createWeight(self.shapes, ship, density) return True
def onUpdate(self): """ Method called when the data update is requested. """ if not self.ship: return mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") form.output = self.widget(QtGui.QTextEdit, "OutputData") draft = Units.Quantity(Locale.fromString( form.draft.text())).getValueAs('m').Value trim = Units.Quantity(Locale.fromString( form.trim.text())).getValueAs('deg').Value # Calculate the drafts at each perpendicular angle = math.radians(trim) L = self.ship.Length.getValueAs('m').Value B = self.ship.Breadth.getValueAs('m').Value draftAP = draft + 0.5 * L * math.tan(angle) if draftAP < 0.0: draftAP = 0.0 draftFP = draft - 0.5 * L * math.tan(angle) if draftFP < 0.0: draftFP = 0.0 # Calculate the involved hydrostatics data = Hydrostatics.displacement(self.ship, draft, 0.0, trim) # Setup the html string string = 'L = {0} [m]<BR>'.format(L) string = string + 'B = {0} [m]<BR>'.format(B) string = string + 'T = {0} [m]<HR>'.format(draft) string = string + 'Trim = {0} [degrees]<BR>'.format(trim) string = string + 'T<sub>AP</sub> = {0} [m]<BR>'.format(draftAP) string = string + 'T<sub>FP</sub> = {0} [m]<HR>'.format(draftFP) dispText = QtGui.QApplication.translate("ship_areas", 'Displacement', None, QtGui.QApplication.UnicodeUTF8) string = string + dispText + ' = {0} [ton]<BR>'.format(data[0]) string = string + 'XCB = {0} [m]'.format(data[1].x) form.output.setHtml(string)
def save(self): """ Saves the data into ship instance. """ mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") draft = Units.Quantity(Locale.fromString( form.draft.text())).getValueAs('m').Value trim = Units.Quantity(Locale.fromString( form.trim.text())).getValueAs('deg').Value props = self.ship.PropertiesList try: props.index("AreaCurveDraft") except ValueError: try: tooltip = str( QtGui.QApplication.translate( "ship_areas", "Areas curve tool draft selected [m]", None, QtGui.QApplication.UnicodeUTF8)) except: tooltip = "Areas curve tool draft selected [m]" self.ship.addProperty("App::PropertyLength", "AreaCurveDraft", "Ship", tooltip) self.ship.AreaCurveDraft = '{} m'.format(draft) try: props.index("AreaCurveTrim") except ValueError: try: tooltip = str( QtGui.QApplication.translate( "ship_areas", "Areas curve tool trim selected [deg]", None, QtGui.QApplication.UnicodeUTF8)) except: tooltip = "Areas curve tool trim selected [deg]" self.ship.addProperty("App::PropertyAngle", "AreaCurveTrim", "Ship", tooltip) self.ship.AreaCurveTrim = '{} deg'.format(trim)
def accept(self): """Create the ship instance""" mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.ship = self.widget(QtGui.QComboBox, "Ship") form.weight = self.widget(QtGui.QLineEdit, "Weight") # Create the object ship = self.ships[form.ship.currentIndex()] obj = App.ActiveDocument.addObject("Part::FeaturePython", "Weight") weight = Instance.Weight(obj, self.shapes, ship) Instance.ViewProviderWeight(obj.ViewObject) # Set the mass/density m_unit = USys.getMassUnits() l_unit = USys.getLengthUnits() qty = Units.parseQuantity(Locale.fromString(form.weight.text())) if self.elem_type == 1: w_unit = m_unit obj.Mass = qty.getValueAs(w_unit).Value elif self.elem_type == 2: w_unit = m_unit + '/' + l_unit obj.LineDens = qty.getValueAs(w_unit).Value elif self.elem_type == 3: w_unit = m_unit + '/' + l_unit + '^2' obj.AreaDens = qty.getValueAs(w_unit).Value elif self.elem_type == 4: w_unit = m_unit + '/' + l_unit + '^3' obj.Dens = qty.getValueAs(w_unit).Value # Set it as a child of the ship weights = ship.Weights[:] weights.append(obj.Name) ship.Weights = weights App.ActiveDocument.recompute() return True
def initValues(self): """ Set initial values for fields """ selObjs = Gui.Selection.getSelection() if not selObjs: msg = QtGui.QApplication.translate( "ship_console", "A ship instance must be selected before using this tool (no" " objects selected)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') return True for i in range(0, len(selObjs)): obj = selObjs[i] props = obj.PropertiesList try: props.index("IsShip") except ValueError: continue if obj.IsShip: if self.ship: msg = QtGui.QApplication.translate( "ship_console", "More than one ship have been selected (the extra" " ships will be ignored)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintWarning(msg + '\n') break self.ship = obj if not self.ship: msg = QtGui.QApplication.translate( "ship_console", "A ship instance must be selected before using this tool (no" " valid ship found at the selected objects)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') return True length_format = USys.getLengthFormat() angle_format = USys.getAngleFormat() mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") form.draft.setText( Locale.toString( length_format.format( self.ship.Draft.getValueAs(USys.getLengthUnits()).Value))) form.trim.setText(Locale.toString(angle_format.format(0.0))) # Try to use saved values props = self.ship.PropertiesList try: props.index("AreaCurveDraft") form.draft.setText( Locale.toString( length_format.format( self.ship.AreaCurveDraft.getValueAs( USys.getLengthUnits()).Value))) except: pass try: props.index("AreaCurveTrim") form.trim.setText( Locale.toString( angle_format.format( self.ship.AreaCurveTrim.getValueAs( USys.getAngleUnits()).Value))) except ValueError: pass # Update GUI draft = Units.Quantity(form.draft.text()).getValueAs('m').Value trim = Units.Quantity(form.trim.text()).getValueAs('deg').Value self.preview.update(draft, trim, self.ship) self.onUpdate() return False
def accept(self): if not self.ship: return False if self.running: return self.save() mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") 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") trim = Units.Quantity(Locale.fromString( form.trim.text())).getValueAs('deg').Value min_draft = Units.Quantity(Locale.fromString( form.minDraft.text())).getValueAs('m').Value max_draft = Units.Quantity(Locale.fromString( form.maxDraft.text())).getValueAs('m').Value n_draft = form.nDraft.value() draft = min_draft drafts = [draft] dDraft = (max_draft - min_draft) / (n_draft - 1) for i in range(1, n_draft): draft = draft + dDraft drafts.append(draft) # Compute data # Get external faces self.loop = QtCore.QEventLoop() self.timer = QtCore.QTimer() self.timer.setSingleShot(True) QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.loop, QtCore.SLOT("quit()")) self.running = True faces = self.externalFaces(self.ship.Shape) if not self.running: return False if len(faces) == 0: msg = QtGui.QApplication.translate( "ship_console", "Failure detecting external faces from the ship object", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') return False faces = Part.makeShell(faces) # Get the hydrostatics msg = QtGui.QApplication.translate( "ship_console", "Computing hydrostatics", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintMessage(msg + '...\n') points = [] for i in range(len(drafts)): App.Console.PrintMessage("\t{} / {}\n".format(i + 1, len(drafts))) draft = drafts[i] point = Tools.Point(self.ship, faces, draft, trim) points.append(point) self.timer.start(0.0) self.loop.exec_() if(not self.running): break PlotAux.Plot(self.ship, trim, points) return True
def accept(self): if not self.ship: return False if self.running: return self.save() mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") 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") trim = Units.Quantity(Locale.fromString( form.trim.text())).getValueAs('deg').Value min_draft = Units.Quantity(Locale.fromString( form.minDraft.text())).getValueAs('m').Value max_draft = Units.Quantity(Locale.fromString( form.maxDraft.text())).getValueAs('m').Value n_draft = form.nDraft.value() draft = min_draft drafts = [draft] dDraft = (max_draft - min_draft) / (n_draft - 1) for i in range(1, n_draft): draft = draft + dDraft drafts.append(draft) # Compute data # Get external faces self.loop = QtCore.QEventLoop() self.timer = QtCore.QTimer() self.timer.setSingleShot(True) QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.loop, QtCore.SLOT("quit()")) self.running = True faces = self.externalFaces(self.ship.Shape) if not self.running: return False if len(faces) == 0: msg = QtGui.QApplication.translate( "ship_console", "Failure detecting external faces from the ship object", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') return False faces = Part.makeShell(faces) # Get the hydrostatics msg = QtGui.QApplication.translate("ship_console", "Computing hydrostatics", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintMessage(msg + '...\n') points = [] for i in range(len(drafts)): App.Console.PrintMessage("\t{} / {}\n".format(i + 1, len(drafts))) draft = drafts[i] point = Tools.Point(self.ship, faces, draft, trim) points.append(point) self.timer.start(0.0) self.loop.exec_() if (not self.running): break PlotAux.Plot(self.ship, trim, points) return True
def initValues(self): """ Set initial values for fields """ selObjs = Gui.Selection.getSelection() if not selObjs: msg = QtGui.QApplication.translate( "ship_console", "A ship instance must be selected before using this tool (no" " objects selected)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') return True for i in range(0, len(selObjs)): obj = selObjs[i] props = obj.PropertiesList try: props.index("IsShip") except ValueError: continue if obj.IsShip: if self.ship: msg = QtGui.QApplication.translate( "ship_console", "More than one ship have been selected (the extra" " ships will be ignored)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintWarning(msg + '\n') break self.ship = obj if not self.ship: msg = QtGui.QApplication.translate( "ship_console", "A ship instance must be selected before using this tool (no" " valid ship found at the selected objects)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') return True length_format = USys.getLengthFormat() angle_format = USys.getAngleFormat() mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.draft = self.widget(QtGui.QLineEdit, "Draft") form.trim = self.widget(QtGui.QLineEdit, "Trim") form.num = self.widget(QtGui.QSpinBox, "Num") form.draft.setText(Locale.toString(length_format.format( self.ship.Draft.getValueAs(USys.getLengthUnits()).Value))) form.trim.setText(Locale.toString(angle_format.format(0.0))) # Try to use saved values props = self.ship.PropertiesList try: props.index("AreaCurveDraft") form.draft.setText(Locale.toString(length_format.format( self.ship.AreaCurveDraft.getValueAs( USys.getLengthUnits()).Value))) except: pass try: props.index("AreaCurveTrim") form.trim.setText(Locale.toString(angle_format.format( self.ship.AreaCurveTrim.getValueAs( USys.getAngleUnits()).Value))) except ValueError: pass try: props.index("AreaCurveNum") form.num.setValue(self.ship.AreaCurveNum) except ValueError: pass # Update GUI draft = Units.Quantity(form.draft.text()).getValueAs('m').Value trim = Units.Quantity(form.trim.text()).getValueAs('deg').Value self.preview.update(draft, trim, self.ship) self.onUpdate() return False
def initValues(self): """ Set initial values for fields """ # Look for selected loading conditions (Spreadsheets) self.lc = None selObjs = Gui.Selection.getSelection() if not selObjs: msg = QtGui.QApplication.translate( "ship_console", "A loading condition instance must be selected before using" " this tool (no objects selected)", None) App.Console.PrintError(msg + '\n') return True for i in range(len(selObjs)): obj = selObjs[i] try: if obj.TypeId != 'Spreadsheet::Sheet': continue except ValueError: continue # Check if it is a Loading condition: # B1 cell must be a ship # B2 cell must be the loading condition itself doc = App.ActiveDocument try: if obj not in doc.getObjectsByLabel(obj.get('B2')): continue ships = doc.getObjectsByLabel(obj.get('B1')) if len(ships) != 1: if len(ships) == 0: msg = QtGui.QApplication.translate( "ship_console", "Wrong Ship label! (no instances labeled as" "'{}' found)", None) App.Console.PrintError(msg + '\n'.format(obj.get('B1'))) else: msg = QtGui.QApplication.translate( "ship_console", "Ambiguous Ship label! ({} instances labeled as" "'{}' found)", None) App.Console.PrintError( msg + '\n'.format(len(ships), obj.get('B1'))) continue ship = ships[0] if ship is None or not ship.PropertiesList.index("IsShip"): continue except ValueError: continue # Let's see if several loading conditions have been selected (and # prompt a warning) if self.lc: msg = QtGui.QApplication.translate( "ship_console", "More than one loading condition have been selected (the" " extra loading conditions will be ignored)", None) App.Console.PrintWarning(msg + '\n') break self.lc = obj self.ship = ship if not self.lc: msg = QtGui.QApplication.translate( "ship_console", "A loading condition instance must be selected before using" " this tool (no valid loading condition found at the selected" " objects)", None) App.Console.PrintError(msg + '\n') return True # We have a valid loading condition, let's set the initial field values angle_format = USys.getAngleFormat() mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.angle = self.widget(QtGui.QLineEdit, "Angle") form.n_points = self.widget(QtGui.QSpinBox, "NumPoints") form.var_trim = self.widget(QtGui.QCheckBox, "VariableTrim") form.angle.setText(Locale.toString(angle_format.format(90.0))) # Try to use saved values props = self.ship.PropertiesList try: props.index("GZAngle") form.angle.setText( Locale.toString( angle_format.format( self.ship.GZAngle.getValueAs( USys.getAngleUnits()).Value))) except: pass try: props.index("GZNumPoints") form.n_points.setValue(self.ship.GZNumPoints) except ValueError: pass try: props.index("GZVariableTrim") if self.ship.GZVariableTrim: form.var_trim.setCheckState(QtCore.Qt.Checked) else: form.var_trim.setCheckState(QtCore.Qt.Unchecked) except ValueError: pass return False
def onData(self, value): """ Method called when input data is changed. @param value Changed value. """ if not self.ship: return mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") 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(Locale.fromString( form.trim.text())).getValueAs('deg').Value except: trim = 0.0 input_format = USys.getAngleFormat() qty = Units.Quantity('{} deg'.format(trim)) form.trim.setText(Locale.toString(input_format.format( qty.getValueAs(USys.getLengthUnits()).Value))) try: min_draft = Units.Quantity(Locale.fromString( 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(min_draft)) form.minDraft.setText(Locale.toString(input_format.format( qty.getValueAs(USys.getLengthUnits()).Value))) try: max_draft = Units.Quantity(Locale.fromString( 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(max_draft)) form.maxDraft.setText(Locale.toString(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.QLineEdit, "Trim") form.minDraft = self.widget(QtGui.QLineEdit, "MinDraft") form.maxDraft = self.widget(QtGui.QLineEdit, "MaxDraft") form.nDraft = self.widget(QtGui.QSpinBox, "NDraft") trim = Units.Quantity(Locale.fromString( form.trim.text())).getValueAs('deg').Value min_draft = Units.Quantity(Locale.fromString( form.minDraft.text())).getValueAs('m').Value max_draft = Units.Quantity(Locale.fromString( form.maxDraft.text())).getValueAs('m').Value n_draft = form.nDraft.value() props = self.ship.PropertiesList try: props.index("HydrostaticsTrim") except ValueError: tooltip = str(QtGui.QApplication.translate( "ship_hydrostatic", "Hydrostatics tool trim selected", None, QtGui.QApplication.UnicodeUTF8)) self.ship.addProperty("App::PropertyAngle", "HydrostaticsTrim", "Ship", tooltip) self.ship.HydrostaticsTrim = '{} deg'.format(trim) try: props.index("HydrostaticsMinDraft") except ValueError: tooltip = str(QtGui.QApplication.translate( "ship_hydrostatic", "Hydrostatics tool minimum draft selected [m]", None, QtGui.QApplication.UnicodeUTF8)) self.ship.addProperty("App::PropertyLength", "HydrostaticsMinDraft", "Ship", tooltip) self.ship.HydrostaticsMinDraft = '{} m'.format(min_draft) try: props.index("HydrostaticsMaxDraft") except ValueError: tooltip = str(QtGui.QApplication.translate( "ship_hydrostatic", "Hydrostatics tool maximum draft selected [m]", None, QtGui.QApplication.UnicodeUTF8)) self.ship.addProperty("App::PropertyLength", "HydrostaticsMaxDraft", "Ship", tooltip) self.ship.HydrostaticsMaxDraft = '{} m'.format(max_draft) try: props.index("HydrostaticsNDraft") except ValueError: tooltip = str(QtGui.QApplication.translate( "ship_hydrostatic", "Hydrostatics tool number of points selected", None, QtGui.QApplication.UnicodeUTF8)) self.ship.addProperty("App::PropertyInteger", "HydrostaticsNDraft", "Ship", tooltip) self.ship.HydrostaticsNDraft = form.nDraft.value()
def initValues(self): """Setup the initial values""" self.solids = None selObjs = Gui.Selection.getSelection() if not selObjs: msg = QtGui.QApplication.translate( "ship_console", "Ship objects can only be created on top of hull geometry" " (no objects selected)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') msg = QtGui.QApplication.translate( "ship_console", "Please create or load a ship hull geometry before using" " this tool", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') return True self.solids = [] for i in range(0, len(selObjs)): solids = self.getSolids(selObjs[i]) for j in range(0, len(solids)): self.solids.append(solids[j]) if not self.solids: msg = QtGui.QApplication.translate( "ship_console", "Ship objects can only be created on top of hull geometry" " (no solid found at selected objects)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') msg = QtGui.QApplication.translate( "ship_console", "Please create or load a ship hull geometry before using" " this tool", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') return True # Get the ship bounds. The ship instance can not have dimensions # out of these values. self.bounds = [0.0, 0.0, 0.0] bbox = self.solids[0].BoundBox minX = bbox.XMin maxX = bbox.XMax minY = bbox.YMin maxY = bbox.YMax minZ = bbox.ZMin maxZ = bbox.ZMax for i in range(1, len(self.solids)): bbox = self.solids[i].BoundBox if minX > bbox.XMin: minX = bbox.XMin if maxX < bbox.XMax: maxX = bbox.XMax if minY > bbox.YMin: minY = bbox.YMin if maxY < bbox.YMax: maxY = bbox.YMax if minZ > bbox.ZMin: minZ = bbox.ZMin if maxZ < bbox.ZMax: maxZ = bbox.ZMax self.bounds[0] = maxX - minX self.bounds[1] = max(maxY - minY, abs(maxY), abs(minY)) self.bounds[2] = maxZ - minZ input_format = USys.getLengthFormat() mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.length = self.widget(QtGui.QLineEdit, "Length") form.breadth = self.widget(QtGui.QLineEdit, "Breadth") form.draft = self.widget(QtGui.QLineEdit, "Draft") qty = Units.Quantity(self.bounds[0], Units.Length) form.length.setText(Locale.toString(input_format.format( qty.getValueAs(USys.getLengthUnits()).Value))) self.L = self.bounds[0] / Units.Metre.Value qty = Units.Quantity(self.bounds[1], Units.Length) form.breadth.setText(Locale.toString(input_format.format( qty.getValueAs(USys.getLengthUnits()).Value))) self.B = self.bounds[1] / Units.Metre.Value qty = Units.Quantity(self.bounds[2], Units.Length) form.draft.setText(Locale.toString(input_format.format( 0.5 * qty.getValueAs(USys.getLengthUnits()).Value))) self.T = 0.5 * self.bounds[2] / Units.Metre.Value return False
def onData(self, value): """ Method called when input data is changed. @param value Changed value. """ if not self.ship: return mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") 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(Locale.fromString( form.trim.text())).getValueAs('deg').Value except: trim = 0.0 input_format = USys.getAngleFormat() qty = Units.Quantity('{} deg'.format(trim)) form.trim.setText( Locale.toString( input_format.format( qty.getValueAs(USys.getLengthUnits()).Value))) try: min_draft = Units.Quantity(Locale.fromString( 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(min_draft)) form.minDraft.setText( Locale.toString( input_format.format( qty.getValueAs(USys.getLengthUnits()).Value))) try: max_draft = Units.Quantity(Locale.fromString( 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(max_draft)) form.maxDraft.setText( Locale.toString( 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 onTableItem(self, row, column): """ Function called when an item of the table is touched. @param row Changed item row @param column Changed item column """ if self.skip: return mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.sections = self.widget(QtGui.QTableWidget, "Sections") form.sectionType = self.widget(QtGui.QComboBox, "SectionType") # Add an empty item at the end of the list nRow = form.sections.rowCount() item = form.sections.item(nRow - 1, 0) if item: if (item.text() != ''): form.sections.setRowCount(nRow + 1) ID = form.sectionType.currentIndex() if ID == 0: SectionList = self.LSections elif ID == 1: SectionList = self.BSections elif ID == 2: SectionList = self.TSections item = form.sections.item(row, column) # Look for deleted row (empty string) if not item.text(): del SectionList[row] form.sections.removeRow(row) self.obj = self.preview.update( self.ship.Length.getValueAs('m').Value, self.ship.Breadth.getValueAs('m').Value, self.ship.Draft.getValueAs('m').Value, self.LSections, self.BSections, self.TSections, self.ship.Shape) return # Get the new section value try: qty = Units.Quantity(item.text()) number = qty.getValueAs('m').Value except: number = 0.0 string = '{} m'.format(number) item.setText(Locale.toString(string)) # Regenerate the list del SectionList[:] for i in range(0, nRow): item = form.sections.item(i, 0) try: qty = Units.Quantity(item.text()) number = qty.getValueAs('m').Value except: number = 0.0 SectionList.append(number) self.obj = self.preview.update( self.ship.Length.getValueAs('m').Value, self.ship.Breadth.getValueAs('m').Value, self.ship.Draft.getValueAs('m').Value, self.LSections, self.BSections, self.TSections, self.ship.Shape)
def initValues(self): """ Set initial values for fields """ mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") 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() if not selObjs: msg = QtGui.QApplication.translate( "ship_console", "A ship instance must be selected before using this tool (no" " objects selected)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') return True for i in range(len(selObjs)): obj = selObjs[i] props = obj.PropertiesList try: props.index("IsShip") except ValueError: continue if obj.IsShip: if self.ship: msg = QtGui.QApplication.translate( "ship_console", "More than one ship have been selected (the extra" " ships will be ignored)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintWarning(msg + '\n') break self.ship = obj if not self.ship: msg = QtGui.QApplication.translate( "ship_console", "A ship instance must be selected before using this tool (no" " valid ship found at the selected objects)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') return True props = self.ship.PropertiesList length_format = USys.getLengthFormat() angle_format = USys.getAngleFormat() try: props.index("HydrostaticsTrim") form.trim.setText(Locale.toString(angle_format.format( self.ship.HydrostaticsTrim.getValueAs( USys.getLengthUnits()).Value))) except ValueError: form.trim.setText(Locale.toString(angle_format.format(0.0))) try: props.index("HydrostaticsMinDraft") form.minDraft.setText(Locale.toString(length_format.format( self.ship.HydrostaticsMinDraft.getValueAs( USys.getLengthUnits()).Value))) except ValueError: form.minDraft.setText(Locale.toString(length_format.format( 0.9 * self.ship.Draft.getValueAs(USys.getLengthUnits()).Value))) try: props.index("HydrostaticsMaxDraft") form.maxDraft.setText(Locale.toString(length_format.format( self.ship.HydrostaticsMaxDraft.getValueAs( USys.getLengthUnits()).Value))) except ValueError: form.maxDraft.setText(Locale.toString(length_format.format( 1.1 * self.ship.Draft.getValueAs(USys.getLengthUnits()).Value))) try: props.index("HydrostaticsNDraft") form.nDraft.setValue(self.ship.HydrostaticsNDraft) except ValueError: pass return False
def initValues(self): """ Set initial values for fields """ mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") 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() if not selObjs: msg = QtGui.QApplication.translate( "ship_console", "A ship instance must be selected before using this tool (no" " objects selected)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') return True for i in range(len(selObjs)): obj = selObjs[i] props = obj.PropertiesList try: props.index("IsShip") except ValueError: continue if obj.IsShip: if self.ship: msg = QtGui.QApplication.translate( "ship_console", "More than one ship have been selected (the extra" " ships will be ignored)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintWarning(msg + '\n') break self.ship = obj if not self.ship: msg = QtGui.QApplication.translate( "ship_console", "A ship instance must be selected before using this tool (no" " valid ship found at the selected objects)", None, QtGui.QApplication.UnicodeUTF8) App.Console.PrintError(msg + '\n') return True props = self.ship.PropertiesList length_format = USys.getLengthFormat() angle_format = USys.getAngleFormat() try: props.index("HydrostaticsTrim") form.trim.setText( Locale.toString( angle_format.format( self.ship.HydrostaticsTrim.getValueAs( USys.getLengthUnits()).Value))) except ValueError: form.trim.setText(Locale.toString(angle_format.format(0.0))) try: props.index("HydrostaticsMinDraft") form.minDraft.setText( Locale.toString( length_format.format( self.ship.HydrostaticsMinDraft.getValueAs( USys.getLengthUnits()).Value))) except ValueError: form.minDraft.setText( Locale.toString( length_format.format(0.9 * self.ship.Draft.getValueAs( USys.getLengthUnits()).Value))) try: props.index("HydrostaticsMaxDraft") form.maxDraft.setText( Locale.toString( length_format.format( self.ship.HydrostaticsMaxDraft.getValueAs( USys.getLengthUnits()).Value))) except ValueError: form.maxDraft.setText( Locale.toString( length_format.format(1.1 * self.ship.Draft.getValueAs( USys.getLengthUnits()).Value))) try: props.index("HydrostaticsNDraft") form.nDraft.setValue(self.ship.HydrostaticsNDraft) except ValueError: pass return False
def initValues(self): """ Set initial values for fields """ # Look for selected loading conditions (Spreadsheets) self.lc = None selObjs = Gui.Selection.getSelection() if not selObjs: msg = QtGui.QApplication.translate( "ship_console", "A loading condition instance must be selected before using" " this tool (no objects selected)", None, QtGui.QApplication.UnicodeUTF8, ) App.Console.PrintError(msg + "\n") return True for i in range(len(selObjs)): obj = selObjs[i] try: if obj.TypeId != "Spreadsheet::Sheet": continue except ValueError: continue # Check if it is a Loading condition: # B1 cell must be a ship # B2 cell must be the loading condition itself doc = App.ActiveDocument try: if obj not in doc.getObjectsByLabel(obj.get("B2")): continue ships = doc.getObjectsByLabel(obj.get("B1")) if len(ships) != 1: if len(ships) == 0: msg = QtGui.QApplication.translate( "ship_console", "Wrong Ship label! (no instances labeled as" "'{}' found)", None, QtGui.QApplication.UnicodeUTF8, ) App.Console.PrintError(msg + "\n".format(obj.get("B1"))) else: msg = QtGui.QApplication.translate( "ship_console", "Ambiguous Ship label! ({} instances labeled as" "'{}' found)", None, QtGui.QApplication.UnicodeUTF8, ) App.Console.PrintError(msg + "\n".format(len(ships), obj.get("B1"))) continue ship = ships[0] if ship is None or not ship.PropertiesList.index("IsShip"): continue except ValueError: continue # Let's see if several loading conditions have been selected (and # prompt a warning) if self.lc: msg = QtGui.QApplication.translate( "ship_console", "More than one loading condition have been selected (the" " extra loading conditions will be ignored)", None, QtGui.QApplication.UnicodeUTF8, ) App.Console.PrintWarning(msg + "\n") break self.lc = obj self.ship = ship if not self.lc: msg = QtGui.QApplication.translate( "ship_console", "A loading condition instance must be selected before using" " this tool (no valid loading condition found at the selected" " objects)", None, QtGui.QApplication.UnicodeUTF8, ) App.Console.PrintError(msg + "\n") return True # We have a valid loading condition, let's set the initial field values angle_format = USys.getAngleFormat() mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.angle = self.widget(QtGui.QLineEdit, "Angle") form.n_points = self.widget(QtGui.QSpinBox, "NumPoints") form.var_trim = self.widget(QtGui.QCheckBox, "VariableTrim") form.angle.setText(Locale.toString(angle_format.format(90.0))) # Try to use saved values props = self.ship.PropertiesList try: props.index("GZAngle") form.angle.setText( Locale.toString(angle_format.format(self.ship.GZAngle.getValueAs(USys.getAngleUnits()).Value)) ) except: pass try: props.index("GZNumPoints") form.n_points.setValue(self.ship.GZNumPoints) except ValueError: pass try: props.index("GZVariableTrim") if self.ship.GZVariableTrim: form.var_trim.setCheckState(QtCore.Qt.Checked) else: form.var_trim.setCheckState(QtCore.Qt.Unchecked) except ValueError: pass return False
def save(self): """ Saves data into ship instance. """ mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") 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") trim = Units.Quantity(Locale.fromString( form.trim.text())).getValueAs('deg').Value min_draft = Units.Quantity(Locale.fromString( form.minDraft.text())).getValueAs('m').Value max_draft = Units.Quantity(Locale.fromString( form.maxDraft.text())).getValueAs('m').Value n_draft = form.nDraft.value() props = self.ship.PropertiesList try: props.index("HydrostaticsTrim") except ValueError: tooltip = str( QtGui.QApplication.translate( "ship_hydrostatic", "Hydrostatics tool trim selected", None, QtGui.QApplication.UnicodeUTF8)) self.ship.addProperty("App::PropertyAngle", "HydrostaticsTrim", "Ship", tooltip) self.ship.HydrostaticsTrim = '{} deg'.format(trim) try: props.index("HydrostaticsMinDraft") except ValueError: tooltip = str( QtGui.QApplication.translate( "ship_hydrostatic", "Hydrostatics tool minimum draft selected [m]", None, QtGui.QApplication.UnicodeUTF8)) self.ship.addProperty("App::PropertyLength", "HydrostaticsMinDraft", "Ship", tooltip) self.ship.HydrostaticsMinDraft = '{} m'.format(min_draft) try: props.index("HydrostaticsMaxDraft") except ValueError: tooltip = str( QtGui.QApplication.translate( "ship_hydrostatic", "Hydrostatics tool maximum draft selected [m]", None, QtGui.QApplication.UnicodeUTF8)) self.ship.addProperty("App::PropertyLength", "HydrostaticsMaxDraft", "Ship", tooltip) self.ship.HydrostaticsMaxDraft = '{} m'.format(max_draft) try: props.index("HydrostaticsNDraft") except ValueError: tooltip = str( QtGui.QApplication.translate( "ship_hydrostatic", "Hydrostatics tool number of points selected", None, QtGui.QApplication.UnicodeUTF8)) self.ship.addProperty("App::PropertyInteger", "HydrostaticsNDraft", "Ship", tooltip) self.ship.HydrostaticsNDraft = form.nDraft.value()
def onTableItem(self, row, column): """ Function called when an item of the table is touched. @param row Changed item row @param column Changed item column """ if self.skip: return mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.sections = self.widget(QtGui.QTableWidget, "Sections") form.sectionType = self.widget(QtGui.QComboBox, "SectionType") # Add an empty item at the end of the list nRow = form.sections.rowCount() item = form.sections.item(nRow - 1, 0) if item: if(item.text() != ''): form.sections.setRowCount(nRow + 1) ID = form.sectionType.currentIndex() if ID == 0: SectionList = self.LSections elif ID == 1: SectionList = self.BSections elif ID == 2: SectionList = self.TSections item = form.sections.item(row, column) # Look for deleted row (empty string) if not item.text(): del SectionList[row] form.sections.removeRow(row) self.obj = self.preview.update(self.ship.Length.getValueAs('m').Value, self.ship.Breadth.getValueAs('m').Value, self.ship.Draft.getValueAs('m').Value, self.LSections, self.BSections, self.TSections, self.ship.Shape) return # Get the new section value try: qty = Units.Quantity(item.text()) number = qty.getValueAs('m').Value except: number = 0.0 string = '{} m'.format(number) item.setText(Locale.toString(string)) # Regenerate the list del SectionList[:] for i in range(0, nRow): item = form.sections.item(i, 0) try: qty = Units.Quantity(item.text()) number = qty.getValueAs('m').Value except: number = 0.0 SectionList.append(number) self.obj = self.preview.update(self.ship.Length.getValueAs('m').Value, self.ship.Breadth.getValueAs('m').Value, self.ship.Draft.getValueAs('m').Value, self.LSections, self.BSections, self.TSections, self.ship.Shape)