def makeInteractiveMesh(mesh_data: MeshData) -> 'pywim.geom.tri.Mesh': import pywim int_mesh = pywim.geom.tri.Mesh() verts = mesh_data.getVertices() for i in range(mesh_data.getVertexCount()): int_mesh.add_vertex(i, verts[i][0], verts[i][1], verts[i][2]) faces = mesh_data.getIndices() if faces is not None: for i in range(mesh_data.getFaceCount()): v1 = int_mesh.vertices[faces[i][0]] v2 = int_mesh.vertices[faces[i][1]] v3 = int_mesh.vertices[faces[i][2]] int_mesh.add_triangle(i, v1, v2, v3) else: for i in range(0, len(int_mesh.vertices), 3): v1 = int_mesh.vertices[i] v2 = int_mesh.vertices[i + 1] v3 = int_mesh.vertices[i + 2] int_mesh.add_triangle(i // 3, v1, v2, v3) # Cura keeps around degenerate triangles, so we need to as well # so we don't end up with a mismatch in triangle ids int_mesh.analyze_mesh(remove_degenerate_triangles=False) return int_mesh
def _toTriMesh(self, mesh_data: MeshData) -> trimesh.base.Trimesh: indices = mesh_data.getIndices() if indices is None: # some file formats (eg 3mf) don't supply indices, but have unique vertices per face indices = numpy.arange(mesh_data.getVertexCount()).reshape(-1, 3) return trimesh.base.Trimesh(vertices=mesh_data.getVertices(), faces=indices, vertex_normals=mesh_data.getNormals())