def saveSections(self): """ Save selected sections into ship object. """ # Test if previous section have been created props = self.ship.PropertiesList try: props.index("LSections") except ValueError: # Create new sections list self.ship.addProperty( "App::PropertyFloatList", "LSections", "Ship", str(Translator.translate( "Transversal sections position [m]"))).LSections = [] self.ship.addProperty( "App::PropertyFloatList", "BSections", "Ship", str(Translator.translate( "Longitudinal sections position [m]"))).BSections = [] self.ship.addProperty( "App::PropertyFloatList", "TSections", "Ship", str(Translator.translate( "Water lines position [m]"))).TSections = [] # Save sections self.ship.LSections = self.LSections[:] self.ship.BSections = self.BSections[:] self.ship.TSections = self.TSections[:] # Save also scale try: props.index("PlotScale") except ValueError: self.ship.addProperty( "App::PropertyInteger", "PlotScale", "Ship", str(Translator.translate( "Plot scale (1:scale format)"))).PlotScale = 250 self.ship.PlotScale = self.form.scale.value()
def retranslateUi(self): """ Set user interface locale strings. """ self.form.setWindowTitle(Translator.translate("Create a new ship")) self.form.findChild(QtGui.QLabel, "LengthLabel").setText(Translator.translate("Length")) self.form.findChild(QtGui.QLabel, "BeamLabel").setText(Translator.translate("Beam")) self.form.findChild(QtGui.QLabel, "DraftLabel").setText(Translator.translate("Draft"))
class ShipWorkbench(Workbench): """ @brief Workbench of Ship design module. Here toolbars & icons are append. """ from shipUtils import Paths, Translator import ShipGui Icon = Paths.iconsPath() + "/Ico.png" MenuText = str(Translator.translate("Ship design")) ToolTip = str(Translator.translate("Ship design")) def Initialize(self): # ToolBar list = [ "Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics" ] self.appendToolbar("Ship design", list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Loading", list) # Menu list = [ "Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics" ] self.appendMenu("Ship design", list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Loading", list)
def initValues(self): """ Set initial values for fields """ # Get selected objects selObjs = Geometry.getSelectedObjs() if not selObjs: msg = Translator.translate("Ship instance must be selected (no object selected)\n") App.Console.PrintError(msg) return True for i in range(0,len(selObjs)): obj = selObjs[i] # Test if is a ship instance props = obj.PropertiesList try: props.index("IsShip") except ValueError: continue if obj.IsShip: # Test if another ship already selected if self.ship: msg = Translator.translate("More than one ship selected (extra ship will be neglected)\n") App.Console.PrintWarning(msg) break self.ship = obj # Test if any valid ship was selected if not self.ship: msg = Translator.translate("Ship instance must be selected (no valid ship found at selected objects)\n") App.Console.PrintError(msg) return True # Load sections (if exist) self.loadSections() msg = Translator.translate("Ready to work\n") App.Console.PrintMessage(msg) return False
def initValues(self): """ Set initial values for fields """ # Get selected objects selObjs = Gui.Selection.getSelection() if not selObjs: msg = Translator.translate("Ship instance must be selected (no object selected)\n") App.Console.PrintError(msg) return True for i in range(0,len(selObjs)): obj = selObjs[i] # Test if is a ship instance props = obj.PropertiesList try: props.index("IsShip") except ValueError: continue if obj.IsShip: # Test if another ship already selected if self.ship: msg = Translator.translate("More than one ship selected (extra ship will be neglected)\n") App.Console.PrintWarning(msg) break self.ship = obj # Test if any valid ship was selected if not self.ship: msg = Translator.translate("Ship instance must be selected (no valid ship found at selected objects)\n") App.Console.PrintError(msg) return True # Load sections (if exist) self.loadSections() msg = Translator.translate("Ready to work\n") App.Console.PrintMessage(msg) return False
def GetResources(self): from shipUtils import Paths, Translator IconPath = Paths.iconsPath() + "/HydrostaticsIco.png" MenuText = str(Translator.translate('GZ curve')) ToolTip = str( Translator.translate('Transversal stability GZ curve computation')) return {'Pixmap': IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip}
def accept(self): msg = Translator.translate("Building data...\n") App.Console.PrintMessage(msg) # Get GUI data endTime = self.form.time.value() output = [] output.append(self.form.output.value()) output.append(self.form.outputType.currentIndex()) devId = self.form.device.currentIndex() - 1 # First is not OpenCL # Get OpenCL device device = None count = 0 platforms = cl.get_platforms() for p in platforms: devs = p.get_devices() for d in devs: if count == devId: device = d count = count + 1 # Get free surfaces data FSMesh = SimInstance.FSMesh(self.sim) wData = self.sim.Waves wDir = self.sim.Waves_Dir waves = [] for i in range(0, len(wData)): waves.append([wData[i].x, wData[i].y, wData[i].z, wDir[i]]) msg = Translator.translate("Launching simulation...\n") App.Console.PrintMessage(msg) # Build simulation thread simulator = Sim(device, endTime, output, self.sim, FSMesh, waves) simulator.start() msg = Translator.translate("Done!\n") App.Console.PrintMessage(msg) return True
def __init__(self, obj, solids): """ Creates a new ship on active document. @param obj Part::FeaturePython created object. @param faces Ship solids components. """ # Add uniqueness property to identify Ship instances obj.addProperty( "App::PropertyBool", "IsShip", "Ship", str(Translator.translate( "True if is a valid ship instance"))).IsShip = True # Add main dimensions obj.addProperty( "App::PropertyLength", "Length", "Ship", str(Translator.translate("Ship length (Lpp) [m]"))).Length = 0.0 obj.addProperty( "App::PropertyLength", "Beam", "Ship", str(Translator.translate("Ship beam (B) [m]"))).Beam = 0.0 obj.addProperty( "App::PropertyLength", "Draft", "Ship", str(Translator.translate("Ship draft (T) [m]"))).Draft = 0.0 # Add shapes obj.Shape = Part.makeCompound(solids) obj.addProperty("Part::PropertyPartShape", "ExternalFaces", "Ship", str(Translator.translate("Ship only external faces"))) obj.Proxy = self
def accept(self): msg = Translator.translate("Building data...\n") App.Console.PrintMessage(msg) # Get GUI data endTime = self.form.time.value() output = [] output.append(self.form.output.value()) output.append(self.form.outputType.currentIndex()) devId = self.form.device.currentIndex() - 1 # First is not OpenCL # Get OpenCL device device = None count = 0 platforms = cl.get_platforms() for p in platforms: devs = p.get_devices() for d in devs: if count == devId: device = d count = count + 1 # Get free surfaces data FSMesh = SimInstance.FSMesh(self.sim) wData = self.sim.Waves wDir = self.sim.Waves_Dir waves = [] for i in range(0,len(wData)): waves.append([wData[i].x, wData[i].y, wData[i].z, wDir[i]]) msg = Translator.translate("Launching simulation...\n") App.Console.PrintMessage(msg) # Build simulation thread simulator = Sim(device, endTime, output, FSMesh, waves) simulator.start() msg = Translator.translate("Done!\n") App.Console.PrintMessage(msg) return True
def Initialize(self): from shipUtils import Translator # ToolBar list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendToolbar("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Weights",list) # Simulation stuff only if pyOpenCL & numpy are present hasOpenCL = True hasNumpy = True try: import pyopencl except ImportError: hasOpenCL = False msg = Translator.translate("pyOpenCL not installed, ship simulations disabled\n") App.Console.PrintWarning(msg) try: import numpy except ImportError: hasNumpy = False msg = Translator.translate("numpy not installed, ship simulations disabled\n") App.Console.PrintWarning(msg) if hasOpenCL and hasNumpy: list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] self.appendToolbar("Simulation",list) # Menu list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendMenu("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendMenu("Weights",list) if hasOpenCL and hasNumpy: list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] self.appendMenu("Simulation",list)
def retranslateUi(self): """ Set user interface locale strings. """ self.form.setWindowTitle(Translator.translate("Run the simulation")) self.form.findChild(QtGui.QLabel, "SimTimeLabel").setText(Translator.translate("Simulation time")) self.form.findChild(QtGui.QLabel, "OutputLabel").setText(Translator.translate("Output")) self.form.findChild(QtGui.QLabel, "DeviceLabel").setText(Translator.translate("OpenCL device"))
def __init__(self, obj, fsMeshData, waves): """ Creates a new simulation instance on active document. @param obj Created Part::FeaturePython object. @param fsMeshData [L,B,N] Free surface mesh data, with lenght (x), Beam (y) and desired number of points. @param waves [[A,T,phi,heading],] Waves involved """ # Add uniqueness property to identify Tank instances obj.addProperty("App::PropertyBool","IsShipSimulation","ShipSimulation", str(Translator.translate("True if is a valid ship simulation instance"))).IsShipSimulation=True # Compute free surface mesh self.createFSMesh(obj,fsMeshData) self.computeWaves(obj,waves) # Store waves obj.addProperty("App::PropertyVectorList","Waves","ShipSimulation", str(Translator.translate("Waves (Amplitude,period,phase)"))).Waves=[] obj.addProperty("App::PropertyFloatList","Waves_Dir","ShipSimulation", str(Translator.translate("Waves direction (0 deg to stern waves)"))).Waves_Dir=[] w = [] d = [] for i in range(0,len(waves)): w.append(Vector(waves[i][0], waves[i][1], waves[i][2])) d.append(waves[i][3]) obj.Waves = w obj.Waves_Dir = d # Add shapes shape = self.computeShape(obj) if not shape: obj.IsShipSimulation=False return obj.Shape = shape obj.Proxy = self
def retranslateUi(self): """ Set user interface locale strings. """ self.form.setWindowTitle(Translator.translate("Plot hydrostatics")) self.form.findChild(QtGui.QLabel, "TrimLabel").setText(Translator.translate("Trim")) self.form.findChild(QtGui.QLabel, "MinDraftLabel").setText(Translator.translate("Minimum draft")) self.form.findChild(QtGui.QLabel, "MaxDraftLabel").setText(Translator.translate("Maximum draft")) self.form.findChild(QtGui.QLabel, "NDraftLabel").setText(Translator.translate("Number of points"))
def GetResources(self): from shipUtils import Paths, Translator IconPath = Paths.iconsPath() + "/Weight.png" MenuText = str(Translator.translate('Set ship weights')) ToolTip = str( Translator.translate( 'Set ship weights, tanks must be added later')) return {'Pixmap': IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip}
def GetResources(self): from shipUtils import Paths, Translator IconPath = Paths.iconsPath() + "/SimCreateIco.png" MenuText = str(Translator.translate('Create a new simulation')) ToolTip = str( Translator.translate( 'Create a new simulation in order to process later')) return {'Pixmap': IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip}
def GetResources(self): from shipUtils import Paths, Translator IconPath = Paths.iconsPath() + "/Ico.png" MenuText = str(Translator.translate('Create a new ship')) ToolTip = str( Translator.translate( 'Create a new ship in order to work with them')) return {'Pixmap': IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip}
def onUpdate(self): """ Called when update displacement and draft is requested. """ # Set displacement label disp = self.computeDisplacement() self.form.disp.setText(Translator.translate("Displacement") + ' = %g [kg]' % (disp[0])) # Set draft label draft = self.computeDraft(disp[0], self.form.trim.value()) self.form.draft.setText(Translator.translate("Draft") + ' = %g [m]' % (draft[0]))
def GetResources(self): from shipUtils import Paths, Translator IconPath = Paths.iconsPath() + "/LoadIco.png" MenuText = str(Translator.translate('Load an example ship geometry')) ToolTip = str( Translator.translate( 'Load an example ship geometry able to be converted into a ship.' )) return {'Pixmap': IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip}
class ShipWorkbench(Workbench): """ @brief Workbench of Ship design module. Here toolbars & icons are append. """ from shipUtils import Paths, Translator import ShipGui Icon = Paths.iconsPath() + "/Ico.png" MenuText = str(Translator.translate("Ship design")) ToolTip = str(Translator.translate("Ship design")) def Initialize(self): from shipUtils import Translator # ToolBar list = [ "Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics" ] self.appendToolbar("Ship design", list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Weights", list) # Simulation stuff only if pyOpenCL & numpy are present hasOpenCL = True hasNumpy = True try: import pyopencl except ImportError: hasOpenCL = False msg = Translator.translate( "pyOpenCL not installed, ship simulations disabled\n") App.Console.PrintWarning(msg) try: import numpy except ImportError: hasNumpy = False msg = Translator.translate( "numpy not installed, ship simulations disabled\n") App.Console.PrintWarning(msg) if hasOpenCL and hasNumpy: list = [ "Ship_CreateSim", "Ship_RunSim", "Ship_StopSim", "Ship_TrackSim" ] self.appendToolbar("Simulation", list) # Menu list = [ "Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics" ] self.appendMenu("Ship design", list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendMenu("Weights", list) if hasOpenCL and hasNumpy: list = [ "Ship_CreateSim", "Ship_RunSim", "Ship_StopSim", "Ship_TrackSim" ] self.appendMenu("Simulation", list)
def onTanksSelection(self): """ Called when tanks are selected or deselected. """ # Set displacement label disp = self.computeDisplacement() self.form.disp.setText(Translator.translate("Displacement") + ' = %g [kg]' % (disp[0])) # Set draft label draft = self.computeDraft(disp[0], self.form.trim.value()) self.form.draft.setText(Translator.translate("Draft") + ' = %g [m]' % (draft[0]))
def update(self, L, B, T): """ Update the 3D view printing annotations. @param L Ship length. @param B Ship beam. @param T Ship draft. """ # Destroy all previous entities self.clean() # Draw base line xStart = -0.6 * L xEnd = 0.6 * L baseLine = Part.makeLine((xStart, 0, 0), (xEnd, 0, 0)) Part.show(baseLine) objs = FreeCAD.ActiveDocument.Objects self.baseLine = objs[len(objs) - 1] self.baseLine.Label = 'BaseLine' self.baseLineLabel = DrawText('BaseLineText', str(Translator.translate('Base line')), Base.Vector(xEnd, 0, 0)) # Draw free surface fsLine = Part.makeLine((xStart, 0, T), (xEnd, 0, T)) Part.show(fsLine) objs = FreeCAD.ActiveDocument.Objects self.fsLine = objs[len(objs) - 1] self.fsLine.Label = 'FreeSurface' self.fsLineLabel = DrawText('FSText', str(Translator.translate('Free surface')), Base.Vector(xEnd, 0, T)) # Draw forward perpendicular zStart = -0.1 * T zEnd = 1.1 * T fpLine = Part.makeLine((0.5 * L, 0, zStart), (0.5 * L, 0, zEnd)) Part.show(fpLine) objs = FreeCAD.ActiveDocument.Objects self.fpLine = objs[len(objs) - 1] self.fpLine.Label = 'ForwardPerpendicular' self.fpLineLabel = DrawText( 'FPText', str(Translator.translate('Forward perpendicular')), Base.Vector(0.5 * L, 0, zEnd)) # Draw after perpendicular apLine = Part.makeLine((-0.5 * L, 0, zStart), (-0.5 * L, 0, zEnd)) Part.show(apLine) objs = FreeCAD.ActiveDocument.Objects self.apLine = objs[len(objs) - 1] self.apLine.Label = 'AfterPerpendicular' self.apLineLabel = DrawText( 'APText', str(Translator.translate('After perpendicular')), Base.Vector(-0.5 * L, 0, zEnd)) # Draw amin frame amLine = Part.makeLine((0, -0.5 * B, zStart), (0, -0.5 * B, zEnd)) Part.show(amLine) objs = FreeCAD.ActiveDocument.Objects self.amLine = objs[len(objs) - 1] self.amLine.Label = 'AminFrame' self.amLineLabel = DrawText('AMText', str(Translator.translate('Amin frame')), Base.Vector(0, -0.5 * B, zEnd))
def initValues(self): """ Get selected geometry. @return False if sucessfully values initialized. """ # Get selected objects selObjs = FreeCADGui.Selection.getSelection() if not selObjs: msg = Translator.translate( "Ship instance must be selected (no object selected)\n") App.Console.PrintError(msg) return True for i in range(0, len(selObjs)): obj = selObjs[i] # Test if is a ship instance props = obj.PropertiesList try: props.index("IsShip") except ValueError: continue if obj.IsShip: # Test if another ship already selected if self.ship: msg = Translator.translate( "More than one ship selected (extra ship will be neglected)\n" ) App.Console.PrintWarning(msg) break self.ship = obj # Test if any valid ship was selected if not self.ship: msg = Translator.translate( "Ship instance must be selected (no valid ship found at selected objects)\n" ) App.Console.PrintError(msg) return True # Get weights w = weights(self.ship) # Set the items self.form.weights.setRowCount(len(w) + 1) for i in range(0, len(w)): item = QtGui.QTableWidgetItem(w[i][0]) self.form.weights.setItem(i, 0, item) string = '%g' % (w[i][1]) item = QtGui.QTableWidgetItem(string) self.form.weights.setItem(i, 1, item) string = '%g' % (w[i][2].x) item = QtGui.QTableWidgetItem(string) self.form.weights.setItem(i, 2, item) string = '%g' % (w[i][2].y) item = QtGui.QTableWidgetItem(string) self.form.weights.setItem(i, 3, item) string = '%g' % (w[i][2].z) item = QtGui.QTableWidgetItem(string) self.form.weights.setItem(i, 4, item) msg = Translator.translate("Ready to work\n") App.Console.PrintMessage(msg) return False
def retranslateUi(self): """ Set user interface locale strings. """ self.form.setWindowTitle( Translator.translate("Plot transversal areas curve")) self.form.findChild(QtGui.QLabel, "DraftLabel").setText( Translator.translate("Draft")) self.form.findChild(QtGui.QLabel, "TrimLabel").setText(Translator.translate("Trim"))
def initValues(self): """ Set initial values for fields """ # Get objects selObjs = Geometry.getSelectedObjs() if not selObjs: msg = Translator.translate("Ship instance must be selected (no object selected)\n") App.Console.PrintError(msg) return True for i in range(0,len(selObjs)): obj = selObjs[i] # Test if is a ship instance props = obj.PropertiesList try: props.index("IsShip") except ValueError: continue if obj.IsShip: # Test if another ship already selected if self.ship: msg = Translator.translate("More than one ship selected (extra ship will be neglected)\n") App.Console.PrintWarning(msg) break self.ship = obj # Test if any valid ship was selected if not self.ship: msg = Translator.translate("Ship instance must be selected (no valid ship found at selected objects)\n") App.Console.PrintError(msg) return True # Get bounds bbox = self.ship.Shape.BoundBox self.form.draft.setMaximum(bbox.ZMax) self.form.draft.setMinimum(bbox.ZMin) self.form.draft.setValue(self.ship.Draft) # Try to use saved values props = self.ship.PropertiesList flag = True try: props.index("AreaCurveDraft") except ValueError: flag = False if flag: self.form.draft.setValue(self.ship.AreaCurveDraft) flag = True try: props.index("AreaCurveTrim") except ValueError: flag = False if flag: self.form.trim.setValue(self.ship.AreaCurveTrim) # Update GUI self.preview.update(self.form.draft.value(), self.form.trim.value(), self.ship) self.onUpdate() msg = Translator.translate("Ready to work\n") App.Console.PrintMessage(msg) return False
def retranslateUi(self): """ Set user interface locale strings. """ self.form.setWindowTitle(Translator.translate("Create a new tank")) name = Translator.translate("Filling level") + " (%)" self.form.findChild(QtGui.QLabel, "LevelLabel").setText(name) name = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">\n<html><body>' name = name + Translator.translate("Density") name = name + '(kg/m<span style=" vertical-align:super;">3</span>)</body></html>' self.form.findChild(QtGui.QLabel, "DensityLabel").setText(name)
def retranslateUi(self): """ Set user interface locale strings. """ self.form.setWindowTitle(Translator.translate("Create a new ship")) self.form.findChild(QtGui.QLabel, "LengthLabel").setText( Translator.translate("Length")) self.form.findChild(QtGui.QLabel, "BeamLabel").setText(Translator.translate("Beam")) self.form.findChild(QtGui.QLabel, "DraftLabel").setText( Translator.translate("Draft"))
def retranslateUi(self): """ Set user interface locale strings. """ self.form.setWindowTitle(Translator.translate("Run the simulation")) self.form.findChild(QtGui.QLabel, "SimTimeLabel").setText( Translator.translate("Simulation time")) self.form.findChild(QtGui.QLabel, "OutputLabel").setText( Translator.translate("Output")) self.form.findChild(QtGui.QLabel, "DeviceLabel").setText( Translator.translate("OpenCL device"))
def saveData(self, ship, trim, drafts): """ Write data file. @param ship Selected ship instance @param trim Trim in degrees. @param drafts List of drafts to be performed. @return True if error happens. """ # Open the file filename = self.path + 'hydrostatics.dat' try: Output = open(filename, "w") except IOError: msg = Translator.translate("Can't write '" + filename + "' file.\n") FreeCAD.Console.PrintError(msg) return True # Print header Output.write(header) Output.write(" #\n") Output.write(" # File automatically exported by FreeCAD-Ship\n") Output.write(" # This file contains transversal areas data, filled with following columns:\n") Output.write(" # 1: Ship displacement [ton]\n") Output.write(" # 2: Draft [m]\n") Output.write(" # 3: Wetted surface [m2]\n") Output.write(" # 4: 1cm triming ship moment [ton m]\n") Output.write(" # 5: Bouyance center x coordinate\n") Output.write(" # 6: Floating area\n") Output.write(" # 7: KBt\n") Output.write(" # 8: BMt\n") Output.write(" # 9: Cb (block coefficient)\n") Output.write(" # 10: Cf (Floating coefficient)\n") Output.write(" # 11: Cm (Main frame coefficient)\n") Output.write(" #\n") Output.write(" #################################################################\n") # Get external faces faces = self.externalFaces(ship.Shape) if len(faces) == 0: msg = Translator.translate("Can't detect external faces from ship object.\n") FreeCAD.Console.PrintError(msg) else: faces = Part.makeShell(faces) # Print data FreeCAD.Console.PrintMessage("Computing hydrostatics...\n") for i in range(0,len(drafts)): FreeCAD.Console.PrintMessage("\t%d / %d\n" % (i+1, len(drafts))) draft = drafts[i] point = Tools.Point(ship,faces,draft,trim) string = "%f %f %f %f %f %f %f %f %f %f %f\n" % (point.disp, point.draft, point.wet, point.mom, point.xcb, point.farea, point.KBt, point.BMt, point.Cb, point.Cf, point.Cm) Output.write(string) # Close file Output.close() self.dataFile = filename msg = Translator.translate("Data saved at '" + self.dataFile + "'.\n") FreeCAD.Console.PrintMessage(msg) return False
def retranslateUi(self): """ Set user interface locale strings. """ self.form.setWindowTitle(Translator.translate("Set weights")) labels = [] labels.append(Translator.translate("Name")) labels.append(Translator.translate("Mass") + " [kg]") labels.append(QtCore.QString("g.x [m]")) labels.append(QtCore.QString("g.y [m]")) labels.append(QtCore.QString("g.z [m]")) self.form.weights.setHorizontalHeaderLabels(labels)
def onUpdate(self): """ Called when update displacement and draft is requested. """ # Set displacement label disp = self.computeDisplacement() self.form.disp.setText( Translator.translate("Displacement") + ' = %g [kg]' % (disp[0])) # Set draft label draft = self.computeDraft(disp[0], self.form.trim.value()) self.form.draft.setText( Translator.translate("Draft") + ' = %g [m]' % (draft[0]))
def saveData(self, x, y, ship): """ Write data file. @param x X coordinates. @param y Transversal areas. @param ship Active ship instance. @return True if error happens. """ # Open the file filename = self.path + 'areas.dat' try: Output = open(filename, "w") except IOError: msg = Translator.translate("Can't write '" + filename + "' file.\n") FreeCAD.Console.PrintError(msg) return True # Print header Output.write(header) Output.write(" #\n") Output.write(" # File automatically exported by FreeCAD-Ship\n") Output.write( " # This file contains transversal areas data, filled with following columns:\n" ) Output.write(" # 1: X coordiante [m]\n") Output.write(" # 2: Transversal area [m2]\n") Output.write(" # 3: X FP coordinate [m]\n") Output.write(" # 4: Y FP coordinate (bounds in order to draw it)\n") Output.write(" # 3: X AP coordinate [m]\n") Output.write(" # 4: Y AP coordinate (bounds in order to draw it)\n") Output.write(" #\n") Output.write( " #################################################################\n" ) # Get perpendiculars data Lpp = ship.Length FPx = 0.5 * Lpp APx = -0.5 * Lpp maxArea = max(y) # Print data if len(x) < 2: msg = Translator.translate("Not enough data to plot.\n") FreeCAD.Console.PrintError(msg) string = "%f %f %f %f %f %f\n" % (x[0], y[0], FPx, 0.0, APx, 0.0) Output.write(string) for i in range(1, len(x)): string = "%f %f %f %f %f %f\n" % (x[i], y[i], FPx, maxArea, APx, maxArea) Output.write(string) # Close file Output.close() self.dataFile = filename msg = Translator.translate("Data saved at '" + self.dataFile + "'.\n") FreeCAD.Console.PrintMessage(msg) return False
def initValues(self): """ Set initial values for fields """ # Get objects selObjs = Gui.Selection.getSelection() if not selObjs: msg = Translator.translate( "Ship simulation instance must be selected (no object selected)\n" ) App.Console.PrintError(msg) return True for i in range(0, len(selObjs)): obj = selObjs[i] # Test if is a ship instance props = obj.PropertiesList try: props.index("IsShipSimulation") except ValueError: continue if obj.IsShipSimulation: # Test if another ship already selected if self.sim: msg = Translator.translate( "More than one ship simulation selected (extra simulations will be neglected)\n" ) App.Console.PrintWarning(msg) break self.sim = obj # Test if any valid ship was selected if not self.sim: msg = Translator.translate( "Ship simulation instance must be selected (no valid simulation found at selected objects)\n" ) App.Console.PrintError(msg) return True # Get the list of devices self.form.device.addItem("CPU based version (No OpenCL)") devices = [] platforms = cl.get_platforms() for p in platforms: devs = p.get_devices() for d in devs: devices.append([p, d]) dname = d.get_info(cl.device_info.NAME) pname = p.get_info(cl.platform_info.NAME) self.form.device.addItem(dname + " (" + pname + ")") if not len(devices): msg = Translator.translate("Can't find OpenCL devices\n") App.Console.PrintWarning(msg) msg = Translator.translate("Ready to work\n") App.Console.PrintMessage(msg) return False
def weights(obj): """ Returns Ship weights list. If weights has not been sets, this tool creates it. @param obj Ship object @return Weights list. None if errors """ # Test if is a ship instance props = obj.PropertiesList try: props.index("IsShip") except ValueError: return None if not obj.IsShip: return None # Test if properties already exist try: props.index("WeightNames") except ValueError: obj.addProperty( "App::PropertyStringList", "WeightNames", "Ship", str(Translator.translate("Ship Weights names"))).WeightNames = [ Translator.translate("Lightweight").__str__() ] try: props.index("WeightMass") except ValueError: # Compute mass aproximation from shipHydrostatics import Tools disp = Tools.displacement(obj, obj.Draft) obj.addProperty( "App::PropertyFloatList", "WeightMass", "Ship", str(Translator.translate("Ship Weights masses"))).WeightMass = [ 1000.0 * disp[0] ] try: props.index("WeightPos") except ValueError: # Compute mass aproximation from shipHydrostatics import Tools disp = Tools.displacement(obj, obj.Draft) obj.addProperty( "App::PropertyVectorList", "WeightPos", "Ship", str(Translator.translate( "Ship Weights centers of gravity"))).WeightPos = [ Vector(disp[1].x, 0.0, obj.Draft) ] # Setup list weights = [] for i in range(0, len(obj.WeightNames)): weights.append( [obj.WeightNames[i], obj.WeightMass[i], obj.WeightPos[i]]) return weights
def initValues(self): """ Get selected geometry. @return False if sucessfully values initialized. """ # Get selected objects selObjs = FreeCADGui.Selection.getSelection() if not selObjs: msg = Translator.translate("Ship instance must be selected (no object selected)\n") App.Console.PrintError(msg) return True for i in range(0, len(selObjs)): obj = selObjs[i] # Test if is a ship instance props = obj.PropertiesList try: props.index("IsShip") except ValueError: continue if obj.IsShip: # Test if another ship already selected if self.ship: msg = Translator.translate("More than one ship selected (extra ship will be neglected)\n") App.Console.PrintWarning(msg) break self.ship = obj # Test if any valid ship was selected if not self.ship: msg = Translator.translate("Ship instance must be selected (no valid ship found at selected objects)\n") App.Console.PrintError(msg) return True # Get weights w = weights(self.ship) # Set the items self.form.weights.setRowCount(len(w) + 1) for i in range(0, len(w)): item = QtGui.QTableWidgetItem(w[i][0]) self.form.weights.setItem(i, 0, item) string = "%g" % (w[i][1]) item = QtGui.QTableWidgetItem(string) self.form.weights.setItem(i, 1, item) string = "%g" % (w[i][2].x) item = QtGui.QTableWidgetItem(string) self.form.weights.setItem(i, 2, item) string = "%g" % (w[i][2].y) item = QtGui.QTableWidgetItem(string) self.form.weights.setItem(i, 3, item) string = "%g" % (w[i][2].z) item = QtGui.QTableWidgetItem(string) self.form.weights.setItem(i, 4, item) msg = Translator.translate("Ready to work\n") App.Console.PrintMessage(msg) return False
def retranslateUi(self): """ Set user interface locale strings. """ self.form.setWindowTitle(Translator.translate("GZ curve computation")) self.form.findChild(QtGui.QGroupBox, "LoadConditionGroup").setTitle(Translator.translate("Loading condition.")) self.form.findChild(QtGui.QGroupBox, "AnglesGroup").setTitle(Translator.translate("Roll angles.")) self.form.findChild(QtGui.QLabel, "TrimLabel").setText(Translator.translate("Trim") + " [deg]") self.form.findChild(QtGui.QLabel, "StartAngleLabel").setText(Translator.translate("Start") + " [deg]") self.form.findChild(QtGui.QLabel, "EndAngleLabel").setText(Translator.translate("End") + " [deg]") self.form.findChild(QtGui.QLabel, "NAngleLabel").setText(Translator.translate("Number of points")) self.form.disp.setText(Translator.translate("Displacement = Press update to compute")) self.form.draft.setText(Translator.translate("Draft = Press update to compute")) self.form.update.setText(Translator.translate("Update displacement and draft"))
def __init__(self, obj, faces): """ Creates a new ship on active document. @param faces Ship faces (Part::Shape entities). """ # Add uniqueness property to identify Ship instances obj.addProperty("App::PropertyBool","IsShip","Ship", str(Translator.translate("True if is a valid ship instance"))).IsShip=True # Add main dimensions obj.addProperty("App::PropertyLength","Length","Ship", str(Translator.translate("Ship length (Lpp) [m]"))).Length=0.0 obj.addProperty("App::PropertyLength","Beam","Ship", str(Translator.translate("Ship beam (B) [m]"))).Beam=0.0 obj.addProperty("App::PropertyLength","Draft","Ship", str(Translator.translate("Ship draft (T) [m]"))).Draft=0.0 # Add shapes obj.Shape = Part.makeShell(faces) obj.Proxy = self self.obj = obj
def stopSimulation(): try: simulator = Sim() if not simulator.isRunning(): msg = Translator.translate("Simulation already stopped\n") App.Console.PrintWarning(msg) return except: msg = Translator.translate("Any active simulation to stop!\n") App.Console.PrintError(msg) return simulator.stop() msg = Translator.translate("Simulation will stop at the end of actual iteration\n") App.Console.PrintMessage(msg)
def save(self): """ Saves data into ship instance. """ props = self.ship.PropertiesList try: props.index("AreaCurveDraft") except ValueError: self.ship.addProperty("App::PropertyFloat","AreaCurveDraft","Ship", str(Translator.translate("Areas curve draft selected [m]"))) self.ship.AreaCurveDraft = self.form.draft.value() try: props.index("AreaCurveTrim") except ValueError: self.ship.addProperty("App::PropertyFloat","AreaCurveTrim","Ship", str(Translator.translate("Areas curve trim selected [m]"))) self.ship.AreaCurveTrim = self.form.trim.value()
def retranslateUi(self): """ Set user interface locale strings. """ self.form.setWindowTitle(Translator.translate("Create a new ship simulation")) self.form.findChild(QtGui.QGroupBox, "FSDataBox").setTitle(Translator.translate("Free surface")) self.form.findChild(QtGui.QLabel, "LengthLabel").setText(Translator.translate("Length")) self.form.findChild(QtGui.QLabel, "BeamLabel").setText(Translator.translate("Beam")) self.form.findChild(QtGui.QLabel, "NLabel").setText(Translator.translate("Number of points")) self.form.findChild(QtGui.QGroupBox, "WavesDataBox").setTitle(Translator.translate("Waves")) labels = [] labels.append(Translator.translate("Amplitude") + " [m]") labels.append(Translator.translate("Period") + " [s]") labels.append(Translator.translate("Phase") + " [rad]") labels.append(Translator.translate("Heading") + " [deg]") self.form.waves.setHorizontalHeaderLabels(labels)
def stopSimulation(): try: simulator = Sim() if not simulator.isRunning(): msg = Translator.translate("Simulation already stopped\n") App.Console.PrintWarning(msg) return except: msg = Translator.translate("Any active simulation to stop!\n") App.Console.PrintError(msg) return simulator.stop() msg = Translator.translate( "Simulation will stop at the end of actual iteration\n") App.Console.PrintMessage(msg)
def __init__(self, obj, solids): """ Creates a new ship on active document. @param obj Part::FeaturePython created object. @param faces Ship solids components. """ # Add uniqueness property to identify Ship instances obj.addProperty("App::PropertyBool","IsShip","Ship", str(Translator.translate("True if is a valid ship instance"))).IsShip=True # Add main dimensions obj.addProperty("App::PropertyLength","Length","Ship", str(Translator.translate("Ship length (Lpp) [m]"))).Length=0.0 obj.addProperty("App::PropertyLength","Beam","Ship", str(Translator.translate("Ship beam (B) [m]"))).Beam=0.0 obj.addProperty("App::PropertyLength","Draft","Ship", str(Translator.translate("Ship draft (T) [m]"))).Draft=0.0 # Add shapes obj.Shape = Part.makeCompound(solids) obj.addProperty("Part::PropertyPartShape","ExternalFaces","Ship", str(Translator.translate("Ship only external faces"))) obj.Proxy = self
def saveData(self,x,y,ship): """ Write data file. @param x X coordinates. @param y Transversal areas. @param ship Active ship instance. @return True if error happens. """ # Open the file filename = self.path + 'areas.dat' try: Output = open(filename, "w") except IOError: msg = Translator.translate("Can't write '" + filename + "' file.\n") FreeCAD.Console.PrintError(msg) return True # Print header Output.write(header) Output.write(" #\n") Output.write(" # File automatically exported by FreeCAD-Ship\n") Output.write(" # This file contains transversal areas data, filled with following columns:\n") Output.write(" # 1: X coordiante [m]\n") Output.write(" # 2: Transversal area [m2]\n") Output.write(" # 3: X FP coordinate [m]\n") Output.write(" # 4: Y FP coordinate (bounds in order to draw it)\n") Output.write(" # 3: X AP coordinate [m]\n") Output.write(" # 4: Y AP coordinate (bounds in order to draw it)\n") Output.write(" #\n") Output.write(" #################################################################\n") # Get perpendiculars data Lpp = ship.Length FPx = 0.5*Lpp APx = -0.5*Lpp maxArea = max(y) # Print data if len(x) < 2: msg = Translator.translate("Not enough data to plot.\n") FreeCAD.Console.PrintError(msg) string = "%f %f %f %f %f %f\n" % (x[0], y[0], FPx, 0.0, APx, 0.0) Output.write(string) for i in range(1, len(x)): string = "%f %f %f %f %f %f\n" % (x[i], y[i], FPx, maxArea, APx, maxArea) Output.write(string) # Close file Output.close() self.dataFile = filename msg = Translator.translate("Data saved at '" + self.dataFile + "'.\n") FreeCAD.Console.PrintMessage(msg) return False
def Initialize(self): from shipUtils import Translator # ToolBar list = [ "Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics" ] self.appendToolbar("Ship design", list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Weights", list) # Simulation stuff only if pyOpenCL & numpy are present hasOpenCL = True hasNumpy = True try: import pyopencl except ImportError: hasOpenCL = False msg = Translator.translate( "pyOpenCL not installed, ship simulations disabled\n") App.Console.PrintWarning(msg) try: import numpy except ImportError: hasNumpy = False msg = Translator.translate( "numpy not installed, ship simulations disabled\n") App.Console.PrintWarning(msg) if hasOpenCL and hasNumpy: list = [ "Ship_CreateSim", "Ship_RunSim", "Ship_StopSim", "Ship_TrackSim" ] self.appendToolbar("Simulation", list) # Menu list = [ "Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics" ] self.appendMenu("Ship design", list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendMenu("Weights", list) if hasOpenCL and hasNumpy: list = [ "Ship_CreateSim", "Ship_RunSim", "Ship_StopSim", "Ship_TrackSim" ] self.appendMenu("Simulation", list)
def setupUi(self): mw = self.getMainWindow() form = mw.findChild(QtGui.QWidget, "TaskPanel") form.sections = form.findChild(QtGui.QTableWidget, "Sections") try: form.sections.setInputMethodHints(QtCore.Qt.ImhFormattedNumbersOnly) except: msg = Translator.translate("QtCore.Qt.ImhFormattedNumbersOnly not supported, will not used.\n") App.Console.PrintWarning(msg) form.sectionType = form.findChild(QtGui.QComboBox, "SectionType") form.deleteButton = form.findChild(QtGui.QPushButton, "DeleteButton") form.nSections = form.findChild(QtGui.QSpinBox, "NSections") form.createButton = form.findChild(QtGui.QPushButton, "CreateButton") form.scale = form.findChild(QtGui.QSpinBox, "Scale") self.form = form # Initial values if self.initValues(): return True self.retranslateUi() self.obj = self.preview.update(self.ship.Length, self.ship.Beam, self.ship.Draft, self.LSections,self.BSections,self.TSections, self.ship.Shape) # Connect Signals and Slots QtCore.QObject.connect(form.sectionType,QtCore.SIGNAL("activated(QString)"),self.onSectionType) QtCore.QObject.connect(form.sections,QtCore.SIGNAL("cellChanged(int,int)"),self.onTableItem); QtCore.QObject.connect(form.deleteButton,QtCore.SIGNAL("pressed()"),self.onDeleteButton) QtCore.QObject.connect(form.createButton,QtCore.SIGNAL("pressed()"),self.onCreateButton)
def onUpdate(self): """ Method called when update data request. """ if not self.ship: return # Calculate drafts angle = math.radians(self.form.trim.value()) L = self.ship.Length draftAP = self.form.draft.value() + 0.5 * L * math.tan(angle) if draftAP < 0.0: draftAP = 0.0 draftFP = self.form.draft.value() - 0.5 * L * math.tan(angle) if draftFP < 0.0: draftFP = 0.0 # Calculate hydrostatics involved data = Hydrostatics.displacement(self.ship, self.form.draft.value(), 0.0, self.form.trim.value()) # Prepare the string in html format string = 'L = %g [m]<BR>' % (self.ship.Length) string = string + 'B = %g [m]<BR>' % (self.ship.Beam) string = string + 'T = %g [m]<HR>' % (self.form.draft.value()) string = string + 'Trim = %g [degrees]<BR>' % (self.form.trim.value()) string = string + 'T<sub>AP</sub> = %g [m]<BR>' % (draftAP) string = string + 'T<sub>FP</sub> = %g [m]<HR>' % (draftFP) string = string + Translator.translate( 'Displacement') + ' = %g [ton]<BR>' % (data[0]) string = string + 'XCB = %g [m]' % (data[1].x) # Set the document self.form.output.setHtml(string)
def onUpdate(self): """ Method called when update data request. """ if not self.ship: return # Calculate drafts angle = math.radians(self.form.trim.value()) L = self.ship.Length draftAP = self.form.draft.value() + 0.5*L*math.tan(angle) if draftAP < 0.0: draftAP = 0.0 draftFP = self.form.draft.value() - 0.5*L*math.tan(angle) if draftFP < 0.0: draftFP = 0.0 # Calculate hydrostatics involved data = Hydrostatics.displacement(self.ship,self.form.draft.value(),0.0,self.form.trim.value()) # Prepare the string in html format string = 'L = %g [m]<BR>' % (self.ship.Length) string = string + 'B = %g [m]<BR>' % (self.ship.Beam) string = string + 'T = %g [m]<HR>' % (self.form.draft.value()) string = string + 'Trim = %g [degrees]<BR>' % (self.form.trim.value()) string = string + 'T<sub>AP</sub> = %g [m]<BR>' % (draftAP) string = string + 'T<sub>FP</sub> = %g [m]<HR>' % (draftFP) string = string + Translator.translate('Displacement') + ' = %g [ton]<BR>' % (data[0]) string = string + 'XCB = %g [m]' % (data[1].x) # Set the document self.form.output.setHtml(string)
def initValues(self): """ Get selected geometry. @return False if sucessfully find valid geometry. """ self.solid = None solids = [] selObjs = Gui.Selection.getSelection() if not selObjs: msg = Translator.translate( "Tank objects can only be created on top of structure geometry (no object selected).\n" ) App.Console.PrintError(msg) msg = Translator.translate( "Please create a tank geometry before using this tool.\n") App.Console.PrintError(msg) return True for i in range(0, len(selObjs)): solid = selObjs[i] if solid.isDerivedFrom('Part::Feature'): # Get shape shape = solid.Shape if not shape: continue solid = shape if not solid.isDerivedFrom('Part::TopoShape'): return None # Get shells shells = solid.Shells if not shells: continue # Build solids for s in shells: solids.append(Part.Solid(s)) if not solids: msg = Translator.translate( "Ship objects can only be created on top of structure geometry (no solids can't be computed).\n" ) App.Console.PrintError(msg) msg = Translator.translate( "Please create or download a tank geometry before using this tool\n" ) App.Console.PrintError(msg) return True self.solid = Part.CompSolid(solids) msg = Translator.translate("Ready to work\n") App.Console.PrintMessage(msg) return False
def update(self, L, B, T): """ Update the 3D view printing annotations. @param L Ship length. @param B Ship beam. @param T Ship draft. """ # Destroy all previous entities self.clean() # Draw base line xStart = -0.6*L; xEnd = 0.6*L; baseLine = Part.makeLine((xStart,0,0),(xEnd,0,0)) Part.show(baseLine) objs = FreeCAD.ActiveDocument.Objects self.baseLine = objs[len(objs)-1] self.baseLine.Label = 'BaseLine' self.baseLineLabel = DrawText('BaseLineText', str(Translator.translate('Base line')), Base.Vector(xEnd,0,0)) # Draw free surface fsLine = Part.makeLine((xStart,0,T),(xEnd,0,T)) Part.show(fsLine) objs = FreeCAD.ActiveDocument.Objects self.fsLine = objs[len(objs)-1] self.fsLine.Label = 'FreeSurface' self.fsLineLabel = DrawText('FSText', str(Translator.translate('Free surface')), Base.Vector(xEnd,0,T)) # Draw forward perpendicular zStart = -0.1*T zEnd = 1.1*T fpLine = Part.makeLine((0.5*L,0,zStart),(0.5*L,0,zEnd)) Part.show(fpLine) objs = FreeCAD.ActiveDocument.Objects self.fpLine = objs[len(objs)-1] self.fpLine.Label = 'ForwardPerpendicular' self.fpLineLabel = DrawText('FPText', str(Translator.translate('Forward perpendicular')), Base.Vector(0.5*L,0,zEnd)) # Draw after perpendicular apLine = Part.makeLine((-0.5*L,0,zStart),(-0.5*L,0,zEnd)) Part.show(apLine) objs = FreeCAD.ActiveDocument.Objects self.apLine = objs[len(objs)-1] self.apLine.Label = 'AfterPerpendicular' self.apLineLabel = DrawText('APText', str(Translator.translate('After perpendicular')), Base.Vector(-0.5*L,0,zEnd)) # Draw amin frame amLine = Part.makeLine((0,-0.5*B,zStart),(0,-0.5*B,zEnd)) Part.show(amLine) objs = FreeCAD.ActiveDocument.Objects self.amLine = objs[len(objs)-1] self.amLine.Label = 'AminFrame' self.amLineLabel = DrawText('AMText', str(Translator.translate('Amin frame')), Base.Vector(0,-0.5*B,zEnd))
def initValues(self): """ Set initial values for fields """ # Get objects selObjs = Gui.Selection.getSelection() if not selObjs: msg = Translator.translate("Ship simulation instance must be selected (no object selected)\n") App.Console.PrintError(msg) return True for i in range(0,len(selObjs)): obj = selObjs[i] # Test if is a ship instance props = obj.PropertiesList try: props.index("IsShipSimulation") except ValueError: continue if obj.IsShipSimulation: # Test if another ship already selected if self.sim: msg = Translator.translate("More than one ship simulation selected (extra simulations will be neglected)\n") App.Console.PrintWarning(msg) break self.sim = obj # Test if any valid ship was selected if not self.sim: msg = Translator.translate("Ship simulation instance must be selected (no valid simulation found at selected objects)\n") App.Console.PrintError(msg) return True # Get the list of devices self.form.device.addItem("CPU based version (No OpenCL)") devices = [] platforms = cl.get_platforms() for p in platforms: devs = p.get_devices() for d in devs: devices.append([p,d]) dname = d.get_info(cl.device_info.NAME) pname = p.get_info(cl.platform_info.NAME) self.form.device.addItem(dname + " (" + pname + ")") if not len(devices): msg = Translator.translate("Can't find OpenCL devices\n") App.Console.PrintWarning(msg) msg = Translator.translate("Ready to work\n") App.Console.PrintMessage(msg) return False
def initValues(self): """ Get selected geometry. @return False if sucessfully find valid geometry. """ self.solid = None solids = [] selObjs = Gui.Selection.getSelection() if not selObjs: msg = Translator.translate( "Tank objects can only be created on top of structure geometry (no object selected).\n" ) App.Console.PrintError(msg) msg = Translator.translate("Please create a tank geometry before using this tool.\n") App.Console.PrintError(msg) return True for i in range(0, len(selObjs)): solid = selObjs[i] if solid.isDerivedFrom("Part::Feature"): # Get shape shape = solid.Shape if not shape: continue solid = shape if not solid.isDerivedFrom("Part::TopoShape"): return None # Get shells shells = solid.Shells if not shells: continue # Build solids for s in shells: solids.append(Part.Solid(s)) if not solids: msg = Translator.translate( "Ship objects can only be created on top of structure geometry (no solids can't be computed).\n" ) App.Console.PrintError(msg) msg = Translator.translate("Please create or download a tank geometry before using this tool\n") App.Console.PrintError(msg) return True self.solid = Part.CompSolid(solids) msg = Translator.translate("Ready to work\n") App.Console.PrintMessage(msg) return False
def retranslateUi(self): """ Set user interface locale strings. """ self.form.setWindowTitle(Translator.translate("Outline draw")) self.form.findChild(QtGui.QGroupBox, "AutoCreateBox").setTitle(Translator.translate("Auto create")) self.form.findChild(QtGui.QGroupBox, "ScaleBox").setTitle(Translator.translate("Scale")) self.form.findChild(QtGui.QPushButton, "DeleteButton").setText(Translator.translate("Delete all sections")) self.form.findChild(QtGui.QPushButton, "CreateButton").setText(Translator.translate("Create sections")) self.form.findChild(QtGui.QComboBox, "SectionType").setItemText(0, Translator.translate("Transversal")) self.form.findChild(QtGui.QComboBox, "SectionType").setItemText(1, Translator.translate("Longitudinal")) self.form.findChild(QtGui.QComboBox, "SectionType").setItemText(2, Translator.translate("Water lines"))
def accept(self): # Create new ship instance obj = App.ActiveDocument.addObject("Part::FeaturePython", "Tank") ShipTank(obj, self.solid, self.form.level.value(), self.form.dens.value()) if not obj.IsShipTank: msg = Translator.translate("Tank has not been created.\n") App.Console.PrintError(msg) ViewProviderShipTank(obj.ViewObject) App.ActiveDocument.recompute() return True
def createDirectory(self): """ Create needed folder to write data and scripts. @return True if error happens. """ self.path = FreeCAD.ConfigGet("UserAppData") + "ShipOutput/" if not os.path.exists(self.path): os.makedirs(self.path) if not os.path.exists(self.path): msg = Translator.translate("Can't create '" + self.path + "' folder.\n") FreeCAD.Console.PrintError(msg) return False
def execute(self): """ Calls pyxplot in order to plot an save an image. @return True if error happens. """ filename = self.path + 'areas' comm = "pyxplot %s" % (self.layoutFile) if os.system(comm): msg = Translator.translate("Can't execute pyxplot. Maybe is not installed?\n") FreeCAD.Console.PrintError(msg) msg = Translator.translate("Plot will not generated\n") FreeCAD.Console.PrintError(msg) return True comm = "gs -r300 -dEPSCrop -dTextAlphaBits=4 -sDEVICE=png16m -sOutputFile=%s.png -dBATCH -dNOPAUSE %s.eps" % (filename,filename) if os.system(comm): msg = Translator.translate("Can't execute ghostscript. Maybe is not installed?\n") FreeCAD.Console.PrintError(msg) msg = Translator.translate("Generated image will not converted to png\n") FreeCAD.Console.PrintError(msg) return True return False