| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | __title__ = "Result import for Z88 displacements format" |
| | __author__ = "Bernd Hahnebach" |
| | __url__ = "https://www.freecad.org" |
| |
|
| | |
| | |
| | |
| |
|
| | import os |
| |
|
| | import FreeCAD |
| | from FreeCAD import Console |
| | from builtins import open as pyopen |
| |
|
| |
|
| | |
| |
|
| |
|
| | def open(filename): |
| | "called when freecad opens a file" |
| | docname = os.path.splitext(os.path.basename(filename))[0] |
| | insert(filename, docname) |
| |
|
| |
|
| | def insert(filename, docname): |
| | "called when freecad wants to import a file" |
| | try: |
| | doc = FreeCAD.getDocument(docname) |
| | except NameError: |
| | doc = FreeCAD.newDocument(docname) |
| | FreeCAD.ActiveDocument = doc |
| | import_z88_disp(filename) |
| |
|
| |
|
| | |
| | def import_z88_disp(filename, analysis=None, result_name_prefix=None): |
| | """insert a FreeCAD FEM mechanical result object in the ActiveDocument |
| | pure usage: |
| | import feminout.importZ88O2Results as importZ88O2Results |
| | disp_file = "/pathtofile/z88o2.txt" |
| | importZ88O2Results.import_z88_disp(disp_file) |
| | |
| | the z888i1.txt FEMMesh file needs to be in the same directory as z88o2.txt |
| | # ahh, make a new document first ;-) |
| | """ |
| | import ObjectsFem |
| | from . import importZ88Mesh |
| | from . import importToolsFem |
| | from femresult import resulttools |
| |
|
| | if result_name_prefix is None: |
| | result_name_prefix = "" |
| | disp_read = read_z88_disp(filename) |
| | result_mesh_object = None |
| | if len(disp_read["Nodes"]) > 0: |
| | if analysis: |
| | analysis_object = analysis |
| |
|
| | |
| | if filename.endswith("z88o2.txt"): |
| | mesh_file = filename.replace("o2", "i1") |
| | mesh_data = importZ88Mesh.read_z88_mesh(mesh_file) |
| | femmesh = importToolsFem.make_femmesh(mesh_data) |
| | result_mesh_object = ObjectsFem.makeMeshResult(FreeCAD.ActiveDocument, "Result_mesh") |
| | result_mesh_object.FemMesh = femmesh |
| | else: |
| | Console.PrintError("Z88 mesh file z88i1.txt not found.\n") |
| | return None |
| |
|
| | |
| | for result_set in disp_read["Results"]: |
| | results_name = result_name_prefix + "results" |
| |
|
| | res_obj = ObjectsFem.makeResultMechanical(FreeCAD.ActiveDocument, results_name) |
| | res_obj.Mesh = result_mesh_object |
| | res_obj = importToolsFem.fill_femresult_mechanical(res_obj, result_set) |
| | res_obj = resulttools.add_disp_apps(res_obj) |
| | res_obj = resulttools.fill_femresult_stats(res_obj) |
| |
|
| | if analysis: |
| | analysis_object.addObject(res_obj) |
| |
|
| | if FreeCAD.GuiUp: |
| | if analysis: |
| | import FemGui |
| |
|
| | FemGui.setActiveAnalysis(analysis_object) |
| | FreeCAD.ActiveDocument.recompute() |
| |
|
| | else: |
| | Console.PrintError( |
| | "Problem on Z88 result file import. No nodes found in Z88 result file.\n" |
| | ) |
| | return None |
| | return res_obj |
| |
|
| |
|
| | def read_z88_disp(z88_disp_input): |
| | """ |
| | read a z88 disp file and extract the nodes and elements |
| | z88 Displacement output file is z88o2.txt |
| | works with Z88OS14 |
| | """ |
| | nodes = {} |
| | mode_disp = {} |
| | mode_results = {} |
| | results = [] |
| |
|
| | z88_disp_file = pyopen(z88_disp_input, "r") |
| |
|
| | for no, line in enumerate(z88_disp_file): |
| | lno = no + 1 |
| | linelist = line.split() |
| |
|
| | if lno >= 6: |
| | |
| | node_no = int(linelist[0]) |
| | mode_disp_x = float(linelist[1]) |
| | mode_disp_y = float(linelist[2]) |
| | if len(linelist) > 3: |
| | mode_disp_z = float(linelist[3]) |
| | else: |
| | mode_disp_z = 0.0 |
| | mode_disp[node_no] = FreeCAD.Vector(mode_disp_x, mode_disp_y, mode_disp_z) |
| | nodes[node_no] = node_no |
| |
|
| | mode_results["disp"] = mode_disp |
| | results.append(mode_results) |
| |
|
| | for r in results[0]["disp"]: |
| | Console.PrintLog("{} --> {}\n".format(r, results[0]["disp"][r])) |
| |
|
| | z88_disp_file.close() |
| | return {"Nodes": nodes, "Results": results} |
| |
|