Skip to content

Commit cb1ae9a

Browse files
author
Kurt Yoder
authored
Merge pull request #23 from SergioRAgostinho/object-less
Add support to object-less obj files
2 parents 4e47c15 + 301f941 commit cb1ae9a

File tree

4 files changed

+47
-17
lines changed

4 files changed

+47
-17
lines changed

pywavefront/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ def draw(self):
5858

5959
def add_mesh(self, the_mesh):
6060
self.mesh_list.append(the_mesh)
61-
if not the_mesh.name: return
6261
self.meshes[the_mesh.name] = the_mesh
6362

6463
class ObjParser(parser.Parser):
@@ -118,6 +117,7 @@ def parse_f(self, args):
118117
self.wavefront.add_mesh(self.mesh)
119118
if self.material is None:
120119
self.material = material.Material()
120+
self.wavefront.materials[self.material.name] = self.material
121121
self.mesh.add_material(self.material)
122122

123123
# For fan triangulation, remember first and latest vertices

pywavefront/mesh.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class Mesh(object):
3939
"""This is a basic mesh for drawing using OpenGL. Interestingly, it does
4040
not contain its own vertices. These are instead drawn via materials."""
4141

42-
def __init__(self, name=''):
42+
def __init__(self, name=None):
4343
self.name = name
4444
self.materials = []
4545

test/simple_no_object_no_mtl.obj

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Comment
2+
v 0.040000 0.050000 0.060000
3+
v 0.010000 0.020000 0.030000
4+
v 0.070000 0.080000 0.090000
5+
vt 14.000000 15.000000
6+
vt 12.000000 13.000000
7+
vt 10.000000 11.000000
8+
vn 0.879800 0.471100 0.063200
9+
vn 0.577400 0.577400 0.577400
10+
vn 0.894200 0.267700 -0.359000
11+
v 0.040000 0.050000 0.060000
12+
v 0.010000 0.020000 0.030000
13+
v 0.070000 0.080000 0.090000
14+
vt 14.000000 15.000000
15+
vt 12.000000 13.000000
16+
vt 10.000000 11.000000
17+
vn 0.879800 0.471100 0.063200
18+
vn 0.577400 0.577400 0.577400
19+
vn 0.894200 0.267700 -0.359000
20+
f 1/1/1 2/2/2 3/3/3
21+
f 4/4/4 5/5/5 6/6/6

test/test_wavefront.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,35 +8,37 @@ class TestWavefront(unittest.TestCase):
88
def setUp(self):
99
pyglet.resource.path.append('@' + __name__)
1010
pyglet.resource.reindex()
11+
self.mesh_names = ['Simple', 'SimpleB']
12+
self.material_names = ['Material.simple', 'Material2.simple']
1113
self.meshes = pywavefront.Wavefront('simple.obj')
1214

1315
def testMaterials(self):
1416
"Ensure parsed wavefront materials match known values."
15-
self.assertEqual(len(self.meshes.materials), 2)
16-
self.assertEqual(self.meshes.materials['Material.simple'].__class__,
17-
pywavefront.material.Material)
17+
self.assertEqual(len(self.meshes.materials), len(self.material_names))
18+
self.assertEqual(self.meshes.materials[self.material_names[0]].__class__,
19+
pywavefront.material.Material)
1820

1921
def testMeshes(self):
2022
"Ensure parsed wavefront meshes match known values."
21-
self.assertEqual(len(self.meshes.meshes), 2)
22-
self.assertEqual(self.meshes.meshes['Simple'].__class__,
23+
self.assertEqual(len(self.meshes.meshes), len(self.mesh_names))
24+
self.assertEqual(self.meshes.meshes[self.mesh_names[0]].__class__,
2325
pywavefront.mesh.Mesh)
2426

2527
def testMeshList(self):
2628
"Ensure parsed wavefront mesh list matches known values."
27-
self.assertEqual(len(self.meshes.mesh_list), 2)
29+
self.assertEqual(len(self.meshes.mesh_list), len(self.mesh_names))
2830
self.assertEqual(self.meshes.mesh_list[0].__class__,
2931
pywavefront.mesh.Mesh)
3032

3133
def testAddDuplicateMesh(self):
3234
"Adding a duplicate mesh should increment the mesh list, but not the meshes hash."
33-
self.meshes.add_mesh(self.meshes.meshes['Simple'])
34-
self.assertEqual(len(self.meshes.meshes), 2)
35-
self.assertEqual(len(self.meshes.mesh_list), 3)
35+
self.meshes.add_mesh(self.meshes.meshes[self.mesh_names[0]])
36+
self.assertEqual(len(self.meshes.meshes), len(self.mesh_names))
37+
self.assertEqual(len(self.meshes.mesh_list), len(self.mesh_names) + 1)
3638

3739
def testMeshMaterialVertices(self):
3840
"Mesh vertices should have known values."
39-
self.assertEqual(len(self.meshes.meshes['Simple'].materials[0].vertices), 24)
41+
self.assertEqual(len(self.meshes.meshes[self.mesh_names[0]].materials[0].vertices), 24)
4042

4143
class TestBrokenWavefront(unittest.TestCase):
4244
def setUp(self):
@@ -58,12 +60,19 @@ def setUp(self):
5860
pyglet.resource.path.append('@' + __name__)
5961
pyglet.resource.reindex()
6062
# reset the obj file to new file with no mtl line
63+
self.mesh_names = ['Simple', 'SimpleB']
64+
self.material_names = [None]
6165
self.meshes = pywavefront.Wavefront('simple_no_mtl.obj')
6266

63-
def testMaterials(self):
64-
"""Override this test"""
65-
pass
66-
6767
def testMeshMaterialVertices(self):
6868
"Mesh vertices should have known values."
69-
self.assertEqual(len(self.meshes.meshes['Simple'].materials[0].vertices), 48)
69+
self.assertEqual(len(self.meshes.meshes[self.mesh_names[0]].materials[0].vertices), 48)
70+
71+
class TestNoObjectNoMaterial(TestNoMaterial):
72+
def setUp(self):
73+
pyglet.resource.path.append('@' + __name__)
74+
pyglet.resource.reindex()
75+
# reset the obj file to new file with no mtl line
76+
self.mesh_names = [None]
77+
self.material_names = [None]
78+
self.meshes = pywavefront.Wavefront('simple_no_object_no_mtl.obj')

0 commit comments

Comments
 (0)