def test_volume_from_surface_with_features(): helpers.download("elephant.vtu", "3552eb5b7f549b345d871999b4218dfc") mesh = pygalmesh.generate_volume_mesh_from_surface_mesh( "/tmp/elephant.vtu", detect_features=True, perturb=False, exude=False, edge_size=0.05, facet_angle=25.0, facet_size=0.15, facet_distance=0.008, cell_radius_edge_ratio=3.0, cell_size=1.0, verbose=False, ) tol = 1.0e-3 assert abs(max(mesh.points[:, 0]) - 0.36021700) < tol assert abs(min(mesh.points[:, 0]) + 0.35832974) < tol assert abs(max(mesh.points[:, 1]) - 0.49749655) < tol assert abs(min(mesh.points[:, 1]) + 0.49925193) < tol assert abs(max(mesh.points[:, 2]) - 0.29955834) < tol assert abs(min(mesh.points[:, 2]) + 0.29849035) < tol vol = sum(helpers.compute_volumes(mesh.points, mesh.cells["tetra"])) assert abs(vol - 0.044164693065) < tol return
def meshVolumetricFromSurface( filename: str, lloyd: bool = False, odt: bool = False, perturb: bool = False, exude: bool = False, max_edge_size_at_feature_edges: float = 0.0, min_facet_angle: float = 0.0, max_radius_surface_delaunay_ball: float = 0.0, max_facet_distance: float = 0.0, max_circumradius_edge_ratio: float = 0.0, max_cell_circumradius: float = 0.0, verbose: bool = True, reorient: bool = False, seed: int = 0, ) -> str: """Converts a surface mesh (e.g. triangles from an stl) to a volume mesh consisting of tetrahedra. Saves the volume mesh to a vtk file and returns the filename as a string. """ mesh = pygalmesh.generate_volume_mesh_from_surface_mesh( filename=filename, lloyd=lloyd, odt=odt, perturb=perturb, exude=exude, max_edge_size_at_feature_edges=max_edge_size_at_feature_edges, min_facet_angle=min_facet_angle, max_radius_surface_delaunay_ball=max_radius_surface_delaunay_ball, max_facet_distance=max_facet_distance, max_circumradius_edge_ratio=max_circumradius_edge_ratio, max_cell_circumradius=max_cell_circumradius, verbose=verbose, reorient=reorient, seed=seed, ) output_path = Path(filename).parent / Path( Path(filename).stem + "_volumetric.vtk") output_filename = str(output_path) if Path(output_filename).is_file() and verbose: print(f"[INFO] {output_filename} existist and will be rewritten.") mesh.write(output_filename) return output_filename
def test_volume_from_surface(): this_dir = os.path.dirname(os.path.abspath(__file__)) mesh = pygalmesh.generate_volume_mesh_from_surface_mesh( os.path.join(this_dir, "meshes", "elephant.vtu"), facet_angle=25.0, facet_size=0.15, facet_distance=0.008, cell_radius_edge_ratio=3.0, verbose=False, ) tol = 1.0e-3 assert abs(max(mesh.points[:, 0]) - 0.357612477657) < tol assert abs(min(mesh.points[:, 0]) + 0.358747130015) < tol assert abs(max(mesh.points[:, 1]) - 0.496137874959) < tol assert abs(min(mesh.points[:, 1]) + 0.495301051456) < tol assert abs(max(mesh.points[:, 2]) - 0.298780230629) < tol assert abs(min(mesh.points[:, 2]) + 0.300472866512) < tol vol = sum(helpers.compute_volumes(mesh.points, mesh.get_cells_type("tetra"))) assert abs(vol - 0.044164693065) < tol