OBJ importer: some more minor cleanup.

Note I tried to make 'face' tuple a namedtuple, but this makes things significantly
slower here (about ten percents), don't think it's worth it.
This commit is contained in:
Bastien Montagne 2015-02-18 18:05:16 +01:00
parent afdf7d1729
commit 218a565e74
1 changed files with 6 additions and 17 deletions

View File

@ -384,16 +384,7 @@ def split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP):
if oldkey != key:
# Check the key has changed.
try:
verts_split, faces_split, unique_materials_split, vert_remap = face_split_dict[key]
except KeyError:
faces_split = []
verts_split = []
unique_materials_split = {}
vert_remap = {}
face_split_dict[key] = (verts_split, faces_split, unique_materials_split, vert_remap)
verts_split, faces_split, unique_materials_split, vert_remap = face_split_dict.setdefault(key, ([], [], {}, {}))
oldkey = key
face_vert_loc_indices = face[0]
@ -414,8 +405,9 @@ def split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP):
faces_split.append(face)
# remove one of the itemas and reorder
return [(value[0], value[1], value[2], key_to_name(key)) for key, value in list(face_split_dict.items())]
# remove one of the items and reorder
return [(verts_split, faces_split, unique_materials_split, key_to_name(key))
for key, (verts_split, faces_split, unique_materials_split, _) in face_split_dict.items()]
def create_mesh(new_objects,
@ -525,7 +517,7 @@ def create_mesh(new_objects,
me.polygons.foreach_set("loop_start", faces_loop_start)
me.polygons.foreach_set("loop_total", faces_loop_total)
if verts_nor:
if verts_nor and me.loops:
# Note: we store 'temp' normals in loops, since validate() may alter final mesh,
# we can only set custom lnors *after* calling it.
me.create_normals_split()
@ -985,10 +977,7 @@ def load(operator, context, filepath,
print('\tbuilding geometry...\n\tverts:%i faces:%i materials: %i smoothgroups:%i ...' %
(len(verts_loc), len(faces), len(unique_materials), len(unique_smooth_groups)))
# Split the mesh by objects/materials, may
if use_split_objects or use_split_groups:
SPLIT_OB_OR_GROUP = True
else:
SPLIT_OB_OR_GROUP = False
SPLIT_OB_OR_GROUP = bool(use_split_objects or use_split_groups)
for data in split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP):
verts_loc_split, faces_split, unique_materials_split, dataname = data