예제 #1
0
def get_triangle_mesh(file_name=None):
    gmsh.model.mesh.generate(2)
    if file_name is not None:
        gmsh.write(file_name + ".msh")
    # Renumber triangle node_tags array with indices into aVertex
    node_tags, coord, parametric_coord = gmsh.model.mesh.getNodes(2, -1, True)
    vertices = np.asarray(coord, dtype=np.float32).reshape(len(node_tags), 3)
    node_tag_to_idx = dict()
    for i, t in enumerate(node_tags):
        node_tag_to_idx[t] = i
    element_types, element_tags, node_tags = gmsh.model.mesh.getElements(2, -1)
    assert len(element_types) == 1 and element_types[0] == 2
    assert len(element_tags) == 1
    assert len(node_tags) == 1 and len(node_tags[0]) == len(element_tags[0]) * 3
    node_tags = node_tags[0]
    temp_node_tags = np.empty(len(node_tags), dtype=np.int32)
    for i, t in enumerate(node_tags):
        temp_node_tags[i] = node_tag_to_idx[t]
    triangles = temp_node_tags.reshape(len(element_tags[0]), 3)
    mesh = Mesh(0, 0)
    mesh.vertices = vertices
    mesh.triangles = triangles
    return mesh