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
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()))
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
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
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
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