예제 #1
0
def getTriangleMesh(fileName=None):
    gmsh.model.mesh.generate(2)
    if not fileName is None:
        gmsh.write(fileName + ".msh")
    # Renumber triangle nodeTags array with indices into aVertex
    nodeTags, coord, parametricCoord = gmsh.model.mesh.getNodes(2, -1, True)
    aVertex = np.asarray(coord, dtype=np.float32).reshape(len(nodeTags), 3)
    nodeTagToIdx = dict()
    for i, t in enumerate(nodeTags):
        nodeTagToIdx[t] = i
    elementTypes, elementTags, nodeTags = gmsh.model.mesh.getElements(2, -1)
    assert len(elementTypes) == 1 and elementTypes[0] == 2
    assert len(elementTags) == 1
    assert len(nodeTags) == 1 and len(nodeTags[0]) == len(elementTags[0]) * 3
    nodeTags = nodeTags[0]
    aTempNodeTags = np.empty(len(nodeTags), dtype=np.int32)
    for i, t in enumerate(nodeTags):
        aTempNodeTags[i] = nodeTagToIdx[t]
    aTriangle = aTempNodeTags.reshape(len(elementTags[0]), 3)
    oMesh = Mesh(0, 0)
    oMesh.aVertex = aVertex
    oMesh.aTriangle = aTriangle
    return oMesh