Esempio n. 1
0
def export_fenics_mesh(obj, meshfileString):
    if not (meshfileString[-4:] == ".xml" or meshfileString[-5:] == ".hdf5"):
        error = "Error: only xml or hdf5 mesh is supported by gmsh conversion"
        FreeCAD.Console.PrintError(error)
        return error
    meshfileStem = (meshfileString[:-4])
    if isinstance(meshfileStem, (type(b"bytes type"),)):
        meshfileStem = meshfileStem.decode('utf8')

    gmsh = CaeMesherGmsh.CaeMesherGmsh(obj, CfdTools.getParentAnalysisObject(obj))
    meshfile = gmsh.export_mesh(u"Gmsh MSH", meshfileStem + u".msh")
    if meshfile:
        msg = "Info: Mesh has been written to `{}` by Gmsh\n".format(meshfile)
        FreeCAD.Console.PrintMessage(msg)
        # once Fenics is installed, dolfin-convert should be in path
        #comandlist = [u'dolfin-convert', u'-i gmsh', unicode(meshfileStem) + u".msh", unicode(meshfileStem) + u".xml"]
        comandlist = ['dolfin-convert {}.msh {}.xml'.format(meshfileStem,meshfileStem)]  # work only with shell = True
        # mixed str and unicode in comandlist cause error to run in subprocess
        error = _run_command(comandlist)
        if not os.path.exists(meshfileStem+"_facet_region.xml"):
            FreeCAD.Console.PrintWarning("Mesh  boundary file `{}` not generated\n".format(meshfileStem+"_physical_region.xml"))
        if error:
            return error
        if meshfileString[-5:] == ".hdf5":
            raise NotImplementedError('')
    else:
        error = "Failed to write mesh file `{}` by Gmsh\n".format(meshfileString)
        FreeCAD.Console.PrintError(error)
        return error
Esempio n. 2
0
def export(objectslist, fileString):
    "called when freecad exports a mesh file supprted by gmsh generation"
    if len(objectslist) != 1:
        FreeCAD.Console.PrintError(
            "This exporter can only export one object.\n")
        return
    obj = objectslist[0]
    if not obj.isDerivedFrom("Fem::FemMeshObject"):
        FreeCAD.Console.PrintError("No FEM mesh object selected.\n")
        return
    if not obj.Proxy.Type == 'FemMeshGmsh':
        FreeCAD.Console.PrintError(
            "Object selected is not a FemMeshGmsh type\n")
        return

    gmsh = CaeMesherGmsh.CaeMesherGmsh(obj,
                                       CfdTools.getParentAnalysisObject(obj))

    if fileString != "":
        fileName, fileExtension = os.path.splitext(fileString)
        for k in CaeMesherGmsh.CaeMesherGmsh.output_format_suffix:
            if CaeMesherGmsh.CaeMesherGmsh.output_format_suffix[
                    k] == fileExtension.lower():
                ret = gmsh.export_mesh(k, fileString)
                if not ret:
                    FreeCAD.Console.PrintError(
                        "Mesh is written to `{}` by Gmsh\n".format(ret))
                return
        FreeCAD.Console.PrintError(
            "Export mesh format with suffix `{}` is not supported by Gmsh\n".
            format(fileExtension.lower()))
Esempio n. 3
0
def runGmsh(mesh_obj, anaysis_obj=None):
    if not anaysis_obj:
        anaysis_obj = getParentAnalysisObject(mesh_obj)
    import CaeMesherGmsh
    gmsh_mesh = CaeMesherGmsh.CaeMesherGmsh(mesh_obj, anaysis_obj)
    error = ''
    try:
        error = gmsh_mesh.create_mesh()
    except:
        import sys
        print("Unexpected error when creating mesh: ", sys.exc_info()[0])
    return error
Esempio n. 4
0
def runGmsh(mesh_obj, anaysis_obj=None):
    if not anaysis_obj:
        anaysis_obj = getParentAnalysisObject(mesh_obj)
    import CaeMesherGmsh  # do not import at the start of this file, to be able to run without GUI
    gmsh_mesh = CaeMesherGmsh.CaeMesherGmsh(mesh_obj, anaysis_obj)
    error = ''
    try:
        error = gmsh_mesh.create_mesh()
    except:
        import sys
        print("Unexpected error when creating mesh: ", sys.exc_info()[0])
    return error
Esempio n. 5
0
def export_foam_mesh(obj, meshfileString, foamCaseFolder=None):
    # support only 3D
    gmsh = CaeMesherGmsh.CaeMesherGmsh(obj, CfdTools.getParentAnalysisObject(obj))
    meshfile = gmsh.export_mesh(u"Gmsh MSH", meshfileString)
    if meshfile:
        msg = "Info: Mesh is not written to `{}` by Gmsh\n".format(meshfile)
        FreeCAD.Console.PrintMessage(msg)
        if not foamCaseFolder:
            comandlist = [u'gmshToFoam', u'-case', foamCaseFolder, meshfile]
        else:
            comandlist = [u'gmshToFoam', meshfile]
        return _run_command(comandlist)
    else:
        error = "Mesh is NOT written to `{}` by Gmsh\n".format(meshfileString)
        FreeCAD.Console.PrintError(error)
        return error
Esempio n. 6
0
Gui.ActiveDocument = Gui.getDocument("Unnamed")
Gui.activateWorkbench("PartWorkbench")
App.ActiveDocument.addObject("Part::Cylinder", "Cylinder")
App.ActiveDocument.ActiveObject.Label = "Cylinder"
App.ActiveDocument.recompute()
Gui.SendMsgToActiveView("ViewFit")

Gui.activateWorkbench("CfdWorkbench")
Gui.ActiveDocument.setEdit('Cylinder', 0)

import FemGui
import CfdObjects
CfdObjects.makeCfdAnalysis('CfdAnalysis')
FemGui.setActiveAnalysis(App.activeDocument().ActiveObject)
FemGui.getActiveAnalysis().addObject(CfdObjects.makeCfdSolver('OpenFOAM'))
FemGui.getActiveAnalysis().addObject(
    CfdObjects.makeCfdFluidMaterial('FluidMaterial'))
mesh_obj = CfdObjects.makeCfdMeshGmsh('Cylinder_Mesh')
mesh_obj.Part = App.ActiveDocument.Cylinder
FemGui.getActiveAnalysis().addObject(mesh_obj)

import CaeMesherGmsh
gmsh_mesh = CaeMesherGmsh.CaeMesherGmsh(mesh_obj, FemGui.getActiveAnalysis())
error = gmsh_mesh.create_mesh()

##########################################################
#Gui.getMainWindow().close()  #still wait for user to confirm save not discard
#App.ActiveDocument.Name
FreeCAD.closeDocument('Unnamed')
Gui.doCommand('exit(0)')  # another way to exit