def parseFile(self): vertices = [] normals = [] if 'v' in self.sorted_Objectlines: vertices = [ list(map(float, vertex_line_split)) for vertex_line_split in self.sorted_Objectlines['v'] ] if 'vn' in self.sorted_Objectlines: normals = [ list(map(float, vertex_normal_line_split)) for vertex_normal_line_split in self.sorted_Objectlines['vn'] ] bounding_box = BoundingBox(vertices) bounding_box.moveToCenter() bounding_box.scaleToBoundingBox() bounding_box.move_up() vertices = bounding_box.points if 'f' in self.sorted_Objectlines: for face_line_split in self.sorted_Objectlines['f']: points_indices = [] normals_indices = [] for value in face_line_split: # case v//vn if "//" in value: data = value.split('//') if len(data) > 0 and len(data[0]) > 0: points_indices.append(int(data[0]) - 1) # corrected vertex index if len(data) > 1 and len(data[1]) > 0: normals_indices.append(int(data[1]) - 1) # corrected normal index # case v/vt/vn undefined (we don't need textures yet) # elif '/' in value: # print("case v/vt/vn") # case v elif len(value) > 0: points_indices.append(int(value) - 1) # corrected vertex index face = [] points = [] norms = [] points.append(vertices[points_indices[0]]) points.append(vertices[points_indices[1]]) points.append(vertices[points_indices[2]]) if len(normals_indices) == 0: vector1 = np.array(points[2]) - np.array(points[0]) vector2 = np.array(points[2]) - np.array(points[1]) norm = np.cross(vector1, vector2) norms.append(norm) norms.append(norm) norms.append(norm) else: norms.append(normals[normals_indices[0]]) norms.append(normals[normals_indices[1]]) norms.append(normals[normals_indices[2]]) #face = edge of a Triangle face.append(points) face.append(norms) #faces and normals = Triangle self._faces_and_normals.append(face)