in jsuarez/extra/embyr_deprecated/embyr/kivy3/loaders/objloader.py [0:0]
def _load_meshes(self):
wvobj = WaveObject(self)
self.vertices = []
self.normals = []
self.texcoords = []
faces_section = False
for line in open(self.source, "r"):
if line.startswith('#'):
continue
if line.startswith('s'):
continue
values = line.split()
if not values:
continue
if values[0] == 'o' or values[0] == 'g':
wvobj.name = values[1]
elif values[0] == 'mtllib':
if not self.mtl_source:
_obj_dir = os.path.abspath(os.path.dirname(self.source))
self.mtl_source = os.path.join(_obj_dir, values[1])
self.load_mtl()
elif values[0] == 'usemtl':
wvobj.mtl_name = values[1]
elif values[0] == 'v':
if faces_section:
# here we yield new mesh object
faces_section = False
yield wvobj
wvobj = WaveObject(self)
v = list(map(float, values[1:4]))
if self.swapyz:
v = v[0], v[2], v[1]
self.vertices.append(v)
elif values[0] == 'vn':
v = list(map(float, values[1:4]))
if self.swapyz:
v = v[0], v[2], v[1]
self.normals.append(v)
elif values[0] == 'vt':
self.texcoords.append(list(map(float, values[1:3])))
elif values[0] == 'f':
if not faces_section:
faces_section = True
face = []
texcoords = []
norms = []
for v in values[1:]:
w = v.split('/')
face.append(int(w[0]))
if len(w) >= 2 and len(w[1]) > 0:
texcoords.append(int(w[1]))
else:
texcoords.append(-1)
if len(w) >= 3 and len(w[2]) > 0:
norms.append(int(w[2]))
else:
norms.append(-1)
wvobj.faces.append((face, norms, texcoords))
yield wvobj