print line numbers when failing to load material library, bugfix "next"

This commit is contained in:
Josh Holtrop 2012-07-15 18:52:29 -04:00
parent 63695755b0
commit 505bdf9f4b

View File

@ -118,39 +118,43 @@ class WFObj(object):
fh = open(name, 'r') fh = open(name, 'r')
material = None material = None
material_name = '' material_name = ''
lineno = 0
for line in iter(fh.readline, ''): for line in iter(fh.readline, ''):
lineno += 1
line = line.strip() line = line.strip()
if line.startswith('#'): if line.startswith('#'):
next continue
parts = line.split() parts = line.split()
if len(parts) < 1: if len(parts) < 1:
next continue
if parts[0] == 'newmtl': if parts[0] == 'newmtl':
if len(parts[1:]) < 1: if len(parts[1:]) < 1:
raise ValueError('newmtl directive requires argument') raise ValueError('newmtl directive requires argument on line %d' % lineno)
material = Material() material = Material()
material_name = parts[1] material_name = parts[1]
self.materials[material_name] = material self.materials[material_name] = material
else: else:
if material is None: if material is None:
raise ValueError('Material directive preceeding "newmtl"') print line
print repr(parts)
raise ValueError('Material directive preceeding "newmtl" on line %d' % lineno)
if parts[0] == 'Ns': if parts[0] == 'Ns':
material.shininess = float(parts[1]) material.shininess = float(parts[1])
elif parts[0] == 'Ka': elif parts[0] == 'Ka':
if len(parts[1:]) < 3: if len(parts[1:]) < 3:
raise ValueError('Ka requires 3 arguments') raise ValueError('Ka requires 3 arguments on line %d' % lineno)
material.ambient = map(float, parts[1:]) material.ambient = map(float, parts[1:])
if len(material.ambient) < 4: if len(material.ambient) < 4:
material.ambient.append(1.0) material.ambient.append(1.0)
elif parts[0] == 'Kd': elif parts[0] == 'Kd':
if len(parts[1:]) < 3: if len(parts[1:]) < 3:
raise ValueError('Kd requires 3 arguments') raise ValueError('Kd requires 3 arguments on line %d' % lineno)
material.diffuse = map(float, parts[1:]) material.diffuse = map(float, parts[1:])
if len(material.diffuse) < 4: if len(material.diffuse) < 4:
material.diffuse.append(1.0) material.diffuse.append(1.0)
elif parts[0] == 'Ks': elif parts[0] == 'Ks':
if len(parts[1:]) < 3: if len(parts[1:]) < 3:
raise ValueError('Ks requires 3 arguments') raise ValueError('Ks requires 3 arguments on line %d' % lineno)
material.specular = map(float, parts[1:]) material.specular = map(float, parts[1:])
if len(material.specular) < 4: if len(material.specular) < 4:
material.specular.append(1.0) material.specular.append(1.0)
@ -166,7 +170,7 @@ class WFObj(object):
elif parts[0] == 'map_Kd': elif parts[0] == 'map_Kd':
material.texture = parts[1] material.texture = parts[1]
else: else:
raise ValueError('Unknown material directive "%s"' % parts[0]) raise ValueError('Unknown material directive "%s" on line %d' % (parts[0], lineno))
if self.fileloader is None: if self.fileloader is None:
fh.close() fh.close()