| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | __title__ = "FreeCAD Python Mesh reader and writer" |
| | __author__ = "Bernd Hahnebach" |
| | __url__ = "https://www.freecad.org" |
| |
|
| | |
| | |
| | |
| |
|
| | import FreeCAD |
| |
|
| | from femmesh import meshtools |
| | from builtins import open as pyopen |
| |
|
| | |
| | |
| | |
| | |
| |
|
| |
|
| | |
| | def export(objectslist, filename): |
| | "called when freecad exports a file" |
| | 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 |
| | femnodes_mesh = obj.FemMesh.Nodes |
| | femelement_table = meshtools.get_femelement_table(obj.FemMesh) |
| | if meshtools.is_solid_femmesh(obj.FemMesh): |
| | fem_mesh_type = "Solid" |
| | elif meshtools.is_face_femmesh(obj.FemMesh): |
| | fem_mesh_type = "Face" |
| | elif meshtools.is_edge_femmesh(obj.FemMesh): |
| | fem_mesh_type = "Edge" |
| | else: |
| | FreeCAD.Console.PrintError("Export of this FEM mesh to Python not supported.\n") |
| | return |
| | f = pyopen(filename, "w") |
| | write_python_mesh_to_file(femnodes_mesh, femelement_table, fem_mesh_type, f) |
| | f.close() |
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| |
|
| |
|
| | def write(fem_mesh, filename): |
| | """directly write a FemMesh to a Python mesh file |
| | fem_mesh: a FemMesh""" |
| |
|
| | if not fem_mesh.isDerivedFrom("Fem::FemMesh"): |
| | FreeCAD.Console.PrintError("Not a FemMesh was given as parameter.\n") |
| | return |
| | femnodes_mesh = fem_mesh.Nodes |
| | femelement_table = meshtools.get_femelement_table(fem_mesh) |
| | if meshtools.is_solid_femmesh(fem_mesh): |
| | fem_mesh_type = "Solid" |
| | elif meshtools.is_face_femmesh(fem_mesh): |
| | fem_mesh_type = "Face" |
| | elif meshtools.is_edge_femmesh(fem_mesh): |
| | fem_mesh_type = "Edge" |
| | else: |
| | FreeCAD.Console.PrintError("Export of this FEM mesh to Python not supported.\n") |
| | return |
| | f = pyopen(filename, "w") |
| | write_python_mesh_to_file(femnodes_mesh, femelement_table, fem_mesh_type, f) |
| | f.close() |
| |
|
| |
|
| | def write_python_mesh_to_file(femnodes_mesh, femelement_table, fem_mesh_type, f): |
| |
|
| | mesh_name = "femmesh" |
| |
|
| | |
| | f.write("def create_nodes(femmesh):\n") |
| | f.write(" # nodes\n") |
| | for node in femnodes_mesh: |
| | |
| | vec = femnodes_mesh[node] |
| | f.write(f" {mesh_name}.addNode({vec.x}, {vec.y}, {vec.z}, {node})\n") |
| | f.write(" return True\n") |
| | f.write("\n\n") |
| |
|
| | |
| | f.write("def create_elements(femmesh):\n") |
| | f.write(" # elements\n") |
| | for element in femelement_table: |
| | |
| | if fem_mesh_type == "Solid": |
| | f.write( |
| | " {}.addVolume({}, {})\n".format( |
| | mesh_name, list(femelement_table[element]), element |
| | ) |
| | ) |
| | elif fem_mesh_type == "Face": |
| | f.write( |
| | " {}.addFace({}, {})\n".format( |
| | mesh_name, list(femelement_table[element]), element |
| | ) |
| | ) |
| | elif fem_mesh_type == "Edge": |
| | f.write( |
| | " {}.addEdge({}, {})\n".format( |
| | mesh_name, list(femelement_table[element]), element |
| | ) |
| | ) |
| | f.write(" return True\n") |
| |
|