Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--io_scene_obj/__init__.py2
-rw-r--r--io_scene_obj/import_obj.py41
2 files changed, 24 insertions, 19 deletions
diff --git a/io_scene_obj/__init__.py b/io_scene_obj/__init__.py
index 7286f251..126e818e 100644
--- a/io_scene_obj/__init__.py
+++ b/io_scene_obj/__init__.py
@@ -21,7 +21,7 @@
bl_info = {
"name": "Wavefront OBJ format",
"author": "Campbell Barton, Bastien Montagne",
- "version": (3, 5, 5),
+ "version": (3, 5, 6),
"blender": (2, 80, 0),
"location": "File > Import-Export",
"description": "Import-Export OBJ, Import OBJ mesh, UV's, materials and textures",
diff --git a/io_scene_obj/import_obj.py b/io_scene_obj/import_obj.py
index ddb2658f..e7f9770c 100644
--- a/io_scene_obj/import_obj.py
+++ b/io_scene_obj/import_obj.py
@@ -454,8 +454,10 @@ def split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP):
# if the key is a tuple, join it to make a string
if not key:
return filename # assume its a string. make sure this is true if the splitting code is changed
- else:
+ elif isinstance(key, bytes):
return key.decode('utf-8', 'replace')
+ else:
+ return "_".join(k.decode('utf-8', 'replace') for k in key)
# Return a key that makes the faces unique.
face_split_dict = {}
@@ -468,10 +470,10 @@ def split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP):
face_vert_tex_indices,
context_material,
context_smooth_group,
- context_object,
+ context_object_key,
face_invalid_blenpoly,
) = face
- key = context_object
+ key = context_object_key
if oldkey != key:
# Check the key has changed.
@@ -532,7 +534,7 @@ def create_mesh(new_objects,
edges = []
tot_loops = 0
- context_object = None
+ context_object_key = None
# reverse loop through face indices
for f_idx in range(len(faces) - 1, -1, -1):
@@ -541,7 +543,7 @@ def create_mesh(new_objects,
face_vert_tex_indices,
context_material,
context_smooth_group,
- context_object,
+ context_object_key,
face_invalid_blenpoly,
) = faces[f_idx]
@@ -591,7 +593,7 @@ def create_mesh(new_objects,
] if face_vert_tex_indices else [],
context_material,
context_smooth_group,
- context_object,
+ context_object_key,
[],
)
for ngon in ngon_face_indices]
@@ -880,7 +882,7 @@ def load(context,
data.append(tuple(vec[:vec_len]))
return ret_context_multi_line
- def create_face(context_material, context_smooth_group, context_object):
+ def create_face(context_material, context_smooth_group, context_object_key):
face_vert_loc_indices = []
face_vert_nor_indices = []
face_vert_tex_indices = []
@@ -890,7 +892,7 @@ def load(context,
face_vert_tex_indices,
context_material,
context_smooth_group,
- context_object,
+ context_object_key,
[], # If non-empty, that face is a Blender-invalid ngon (holes...), need a mutable object for that...
)
@@ -918,7 +920,8 @@ def load(context,
# Context variables
context_material = None
context_smooth_group = None
- context_object = None
+ context_object_key = None
+ context_object_obpart = None
context_vgroup = None
objects_names = set()
@@ -1003,7 +1006,7 @@ def load(context,
if not context_multi_line:
line_split = line_split[1:]
# Instantiate a face
- face = create_face(context_material, context_smooth_group, context_object)
+ face = create_face(context_material, context_smooth_group, context_object_key)
(face_vert_loc_indices, face_vert_nor_indices, face_vert_tex_indices,
_1, _2, _3, face_invalid_blenpoly) = face
faces.append(face)
@@ -1077,7 +1080,7 @@ def load(context,
if not context_multi_line:
line_split = line_split[1:]
# Instantiate a face
- face = create_face(context_material, context_smooth_group, context_object)
+ face = create_face(context_material, context_smooth_group, context_object_key)
face_vert_loc_indices = face[0]
# XXX A bit hackish, we use special 'value' of face_vert_nor_indices (a single True item) to tag this
# as a polyline, and not a regular face...
@@ -1102,14 +1105,16 @@ def load(context,
elif line_start == b'o':
if use_split_objects:
- context_object = unique_name(objects_names, line_value(line_split))
- # unique_obects[context_object]= None
+ context_object_key = unique_name(objects_names, line_value(line_split))
+ context_object_obpart = context_object_key
+ # unique_objects[context_object_key]= None
elif line_start == b'g':
if use_split_groups:
- context_object = unique_name(objects_names, line_value(line_split))
- # print 'context_object', context_object
- # unique_obects[context_object]= None
+ grppart = line_value(line_split)
+ context_object_key = (context_object_obpart, grppart) if context_object_obpart else grppart
+ # print 'context_object_key', context_object_key
+ # unique_objects[context_object_key]= None
elif use_groups_as_vgroups:
context_vgroup = line_value(line.split())
if context_vgroup and context_vgroup != b'(null)':
@@ -1170,8 +1175,8 @@ def load(context,
context_nurbs[b'deg'] = [int(i) for i in line.split()[1:]]
elif line_start == b'end':
# Add the nurbs curve
- if context_object:
- context_nurbs[b'name'] = context_object
+ if context_object_key:
+ context_nurbs[b'name'] = context_object_key
nurbs.append(context_nurbs)
context_nurbs = {}
context_parm = b''