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)
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