コード例 #1
0
ファイル: TaskPanel.py プロジェクト: xuezchuang/FreeCAD-1
 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()
コード例 #2
0
ファイル: TaskPanel.py プロジェクト: RoyOnWheels/FreeCAD
 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"))
コード例 #3
0
ファイル: InitGui.py プロジェクト: orlik80/free-cad
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)
コード例 #4
0
ファイル: TaskPanel.py プロジェクト: Koelie2/freecad
 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
コード例 #5
0
 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
コード例 #6
0
ファイル: ShipGui.py プロジェクト: h4ck3rm1k3/FreeCAD
 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}
コード例 #7
0
ファイル: TaskPanel.py プロジェクト: h4ck3rm1k3/FreeCAD
 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
コード例 #8
0
ファイル: Instance.py プロジェクト: h4ck3rm1k3/FreeCAD
 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
コード例 #9
0
ファイル: TaskPanel.py プロジェクト: RoyOnWheels/FreeCAD
 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
コード例 #10
0
ファイル: InitGui.py プロジェクト: RoyOnWheels/FreeCAD
 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)
コード例 #11
0
ファイル: TaskPanel.py プロジェクト: RoyOnWheels/FreeCAD
 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"))
コード例 #12
0
 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
コード例 #13
0
 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"))
コード例 #14
0
ファイル: ShipGui.py プロジェクト: h4ck3rm1k3/FreeCAD
 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}
コード例 #15
0
ファイル: ShipGui.py プロジェクト: h4ck3rm1k3/FreeCAD
 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}
コード例 #16
0
ファイル: ShipGui.py プロジェクト: h4ck3rm1k3/FreeCAD
 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}
コード例 #17
0
ファイル: TaskPanel.py プロジェクト: RoyOnWheels/FreeCAD
 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]))
コード例 #18
0
ファイル: ShipGui.py プロジェクト: h4ck3rm1k3/FreeCAD
 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}
コード例 #19
0
ファイル: InitGui.py プロジェクト: h4ck3rm1k3/FreeCAD
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)
コード例 #20
0
ファイル: TaskPanel.py プロジェクト: mrlukeparry/freecad
 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]))
コード例 #21
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))
コード例 #22
0
ファイル: TaskPanel.py プロジェクト: orlik80/free-cad
 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
コード例 #23
0
 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"))
コード例 #24
0
ファイル: TaskPanel.py プロジェクト: RoyOnWheels/FreeCAD
 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
コード例 #25
0
ファイル: TaskPanel.py プロジェクト: orlik80/free-cad
 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)
コード例 #26
0
 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"))
コード例 #27
0
ファイル: TaskPanel.py プロジェクト: h4ck3rm1k3/FreeCAD
 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"))
コード例 #28
0
ファイル: TaskPanel.py プロジェクト: archri/freecad
 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)
コード例 #29
0
ファイル: Plot.py プロジェクト: xuezchuang/FreeCAD-1
 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
コード例 #30
0
ファイル: TaskPanel.py プロジェクト: archri/freecad
 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)
コード例 #31
0
 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]))
コード例 #32
0
ファイル: Plot.py プロジェクト: c-lutaud/FreeCAD_sf_master
 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
コード例 #33
0
ファイル: TaskPanel.py プロジェクト: orlik80/free-cad
 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)
コード例 #34
0
ファイル: Plot.py プロジェクト: h4ck3rm1k3/FreeCAD
 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
コード例 #35
0
ファイル: TaskPanel.py プロジェクト: h4ck3rm1k3/FreeCAD
 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
コード例 #36
0
ファイル: Instance.py プロジェクト: h4ck3rm1k3/FreeCAD
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
コード例 #37
0
ファイル: TaskPanel.py プロジェクト: archri/freecad
 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
コード例 #38
0
ファイル: TaskPanel.py プロジェクト: RoyOnWheels/FreeCAD
 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"))
コード例 #39
0
ファイル: Instance.py プロジェクト: Koelie2/freecad
 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
コード例 #40
0
ファイル: TaskPanel.py プロジェクト: RoyOnWheels/FreeCAD
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)
コード例 #41
0
ファイル: TaskPanel.py プロジェクト: RoyOnWheels/FreeCAD
 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()
コード例 #42
0
ファイル: TaskPanel.py プロジェクト: RoyOnWheels/FreeCAD
 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)
コード例 #43
0
ファイル: TaskPanel.py プロジェクト: h4ck3rm1k3/FreeCAD
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)
コード例 #44
0
ファイル: Instance.py プロジェクト: biki89/free-cad
 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
コード例 #45
0
ファイル: Plot.py プロジェクト: Koelie2/freecad
 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
コード例 #46
0
ファイル: InitGui.py プロジェクト: h4ck3rm1k3/FreeCAD
    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)
コード例 #47
0
ファイル: TaskPanel.py プロジェクト: Koelie2/freecad
 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)
コード例 #48
0
 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)
コード例 #49
0
 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)
コード例 #50
0
ファイル: TaskPanel.py プロジェクト: RoyOnWheels/FreeCAD
 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)
コード例 #51
0
ファイル: TaskPanel.py プロジェクト: orlik80/free-cad
 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
コード例 #52
0
ファイル: Preview.py プロジェクト: RoyOnWheels/FreeCAD
 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))
コード例 #53
0
ファイル: TaskPanel.py プロジェクト: RoyOnWheels/FreeCAD
 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
コード例 #54
0
ファイル: TaskPanel.py プロジェクト: archri/freecad
 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
コード例 #55
0
ファイル: TaskPanel.py プロジェクト: Koelie2/freecad
 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"))
コード例 #56
0
ファイル: TaskPanel.py プロジェクト: archri/freecad
 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
コード例 #57
0
ファイル: Plot.py プロジェクト: Koelie2/freecad
 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
コード例 #58
0
ファイル: Plot.py プロジェクト: Koelie2/freecad
 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