54 строки
1.7 KiB
Python
54 строки
1.7 KiB
Python
# Class to read
|
|
|
|
class MeshPly:
|
|
def __init__(self, filename, color=[0., 0., 0.]):
|
|
|
|
f = open(filename, 'r')
|
|
self.vertices = []
|
|
self.colors = []
|
|
self.indices = []
|
|
self.normals = []
|
|
|
|
vertex_mode = False
|
|
face_mode = False
|
|
|
|
nb_vertices = 0
|
|
nb_faces = 0
|
|
|
|
idx = 0
|
|
|
|
with f as open_file_object:
|
|
for line in open_file_object:
|
|
elements = line.split()
|
|
if vertex_mode:
|
|
self.vertices.append([float(i) for i in elements[:3]])
|
|
self.normals.append([float(i) for i in elements[3:6]])
|
|
|
|
if elements[6:9]:
|
|
self.colors.append([float(i) / 255. for i in elements[6:9]])
|
|
else:
|
|
self.colors.append([float(i) / 255. for i in color])
|
|
|
|
idx += 1
|
|
if idx == nb_vertices:
|
|
vertex_mode = False
|
|
face_mode = True
|
|
idx = 0
|
|
elif face_mode:
|
|
self.indices.append([float(i) for i in elements[1:4]])
|
|
idx += 1
|
|
if idx == nb_faces:
|
|
face_mode = False
|
|
elif elements[0] == 'element':
|
|
if elements[1] == 'vertex':
|
|
nb_vertices = int(elements[2])
|
|
elif elements[1] == 'face':
|
|
nb_faces = int(elements[2])
|
|
elif elements[0] == 'end_header':
|
|
vertex_mode = True
|
|
|
|
|
|
if __name__ == '__main__':
|
|
path_model = ''
|
|
mesh = MeshPly(path_model)
|