예제 #1
0
파일: ModelLoader.py 프로젝트: rosedu/hfall
 def saveModel(self):
     self.model = Model([], [1, 0, 0, 0] +
                            [0, 1, 0, 0] +
                            [0, 0, 1, 0] +
                            [0, 0, 0, 1], self.modelName)
     for m in self.parser.object.meshes:
         if m.type != 1:
             continue
         mesh = Mesh([], None, None, 16*[0])
         
         # get system coordinates
         for i in range(0, 3):
             for j in range(0, 4):
                 mesh.matrix4[i*3+j] = m.data.matrix[i+j*3]
         # get vertices & texCoordinates
         for i in range(0, m.data.nrOfVertices):
             mesh.vertices += m.data.vertices[i]
             if m.data.coordinates:
                 if not mesh.texels:
                     mesh.texels = []
                 mesh.texels += m.data.coordinates[i]
         # get faces
         if m.data.faces:
             mesh.triangles = []
             for group in m.data.faces.materialGroups:
                 triangles = Mesh.Triangles([], self.materialMng.get(group.materialName))
                 for i in group.faces:
                     triangles.faces += m.data.faces.faces[i]
                 mesh.triangles.append(triangles)
         self.model.meshes.append(mesh)
     self.modelMng.add(self.model)
예제 #2
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