Path: blob/devel/ElmerWorkflows/FreeCADBatchFEMTools/tests/cylinders_thermo_structural/cylinders.py
3206 views
# A test case for FreeCAD automatic scripting with thermo-structural (Elmer test is a modified fem/tests/ThermalBiMetal2)1# original date: November 20192# Author: Eelis Takala3# email: [email protected]4doc = App.newDocument('Cylinders')5import sys6import os7import time8import math9import FreeCAD10import Part111213sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..'))14import FreeCADBatchFEMTools as FBFT1516script_directory = os.path.dirname(__file__)1718def cylinder(r1, r2, h, name='cyl', mesh_size=10.):1920cyl = doc.addObject("PartDesign::Body","Cylinder")21sketch = cyl.newObject('Sketcher::SketchObject',name+' sketch')22sketch.MapMode = 'FlatFace'23sketch.addGeometry(Part.Circle(App.Vector(0.000000,0.000000,0),App.Vector(0,0,1),r2),False)24sketch.addGeometry(Part.Circle(App.Vector(0.000000,0.000000,0),App.Vector(0,0,1),r1),False)25doc.recompute()2627pad = cyl.newObject("PartDesign::Pad",name + " pad")28pad.Profile = sketch29pad.Length = h30pad.Length2 = h31pad.Type = 032pad.UpToFace = None33pad.Reversed = 034pad.Midplane = 135pad.Offset = 0.00000036doc.recompute()3738# create entities dict39face_picks = [('b1', 0), ('b2', 1), ('b3', 2)]40faces = FBFT.pick_faces_from_geometry(cyl, face_picks)41solids = []42FBFT.add_entity_in_list(solids, name, cyl, {'mesh size': mesh_size})43entities_dict = FBFT.create_entities_dict(name, faces, solids, cyl)4445return entities_dict4647def create_geometry():4849mesh_size_max = 100.50cyl_entities_list = []51cyl_entities_list.append(cylinder(20, 10, 40., name='cyl1', mesh_size=3.))52cyl_entities_list.append(cylinder(30, 20, 20., name='cyl2', mesh_size=4.))53entities_dict = FBFT.merge_entities_dicts(cyl_entities_list, 'All', default_mesh_size=mesh_size_max,54add_prefixes={'solids': False, 'faces': True})55solid_objects = FBFT.get_solids_from_entities_dict(entities_dict)5657mesh_object, compound_filter = FBFT.create_mesh_object_and_compound_filter(solid_objects, mesh_size_max, doc)5859FBFT.find_boundaries_with_entities_dict(mesh_object, compound_filter, entities_dict, doc)60body_mesh_groups = FBFT.find_bodies_with_entities_dict(mesh_object, compound_filter, entities_dict, doc, point_search=False)61FBFT.define_mesh_sizes(mesh_object, compound_filter, entities_dict, doc, point_search=False, ignore_list=['air'])6263FBFT.fit_view()64FBFT.create_mesh(mesh_object)65FBFT.export_unv(os.path.join(script_directory, 'cylinders.unv'), mesh_object)6667try:68create_geometry()6970except Exception:71import traceback72print(str(traceback.format_exc()))7374exit()757677