Skip to content

Commit c9202ca

Browse files
author
Kurt Yoder
authored
Merge pull request #47 from einarf/fixes
Various bug fixes
2 parents 46bd182 + 2755c1c commit c9202ca

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

pywavefront/obj.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ def consume_vertices(self):
6262
)
6363

6464
self.next_line()
65+
if not self.values:
66+
break
67+
6568
if self.values[0] != "v":
6669
break
6770

@@ -70,7 +73,7 @@ def parse_vn(self):
7073

7174
# Since list() also consumes StopIteration we need to sanity check the line
7275
# to make sure the parser advances
73-
if self.values[0] == "vn":
76+
if self.values and self.values[0] == "vn":
7477
self.next_line()
7578

7679
def consume_normals(self):
@@ -85,6 +88,9 @@ def consume_normals(self):
8588
)
8689

8790
self.next_line()
91+
if not self.values:
92+
break
93+
8894
if self.values[0] != "vn":
8995
break
9096

@@ -107,6 +113,9 @@ def consume_texture_coordinates(self):
107113
)
108114

109115
self.next_line()
116+
if not self.values:
117+
break
118+
110119
if self.values[0] != "vt":
111120
break
112121

@@ -154,7 +163,7 @@ def parse_f(self):
154163

155164
# Since list() also consumes StopIteration we need to sanity check the line
156165
# to make sure the parser advances
157-
if self.values[0] == "f":
166+
if self.values and self.values[0] == "f":
158167
self.next_line()
159168

160169
def consume_faces(self):
@@ -178,9 +187,6 @@ def consume_faces(self):
178187
has_vn = False
179188
has_colors = False
180189

181-
# If the face contains elements
182-
triangulate = len(self.values) - 1 >= 4
183-
184190
parts = self.values[1].split('/')
185191
# We assume texture coordinates are present
186192
if len(parts) == 2:
@@ -194,7 +200,7 @@ def consume_faces(self):
194200
has_vn = True
195201

196202
# Are we referencing vertex with color info?
197-
vertex = self.vertices[int(parts[0])]
203+
vertex = self.vertices[int(parts[0]) - 1]
198204
has_colors = len(vertex) == 6
199205

200206
# Prepare vertex format string
@@ -216,6 +222,9 @@ def consume_faces(self):
216222
while True:
217223
v1, vlast = None, None
218224

225+
# Do we need to triangulate? Each line may contain a varying amount of elements
226+
triangulate = (len(self.values) - 1) > 3
227+
219228
for i, v in enumerate(self.values[1:]):
220229
parts = v.split('/')
221230
v_index = (int(parts[0]) - 1)
@@ -269,5 +278,8 @@ def consume_faces(self):
269278

270279
# Break out of the loop when there are no more f statements
271280
self.next_line()
281+
if not self.values:
282+
break
283+
272284
if self.values[0] != "f":
273285
break

pywavefront/parser.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,6 @@ def create_line_generator(self):
8282
gz = gzip.open(self.file_name, mode='rt')
8383

8484
for line in gz.readlines():
85-
if line == '':
86-
continue
8785
yield line
8886

8987
gz.close()
@@ -96,8 +94,6 @@ def create_line_generator(self):
9694
file = codecs.open(self.file_name, mode='r', encoding=self.encoding)
9795

9896
for line in file:
99-
if line == '': # Skip empty lines
100-
continue
10197
yield line
10298

10399
file.close()

0 commit comments

Comments
 (0)