From 9448cef00d1b3ac3e4c58e7278d726fd9d2f95da Mon Sep 17 00:00:00 2001
From: Bastien Montagne <montagne29@wanadoo.fr>
Date: Thu, 10 Jan 2019 15:25:16 +0100
Subject: [PATCH] Fix first part of T60381: OBJ import broken in case of
 multiple OBJ objects named the same.

Ensure we use a different key for each OBJ object (usung similar naming
increment as Blender one).
---
 io_scene_obj/__init__.py   |  2 +-
 io_scene_obj/import_obj.py | 14 ++++++++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/io_scene_obj/__init__.py b/io_scene_obj/__init__.py
index 166cc7fc3..7fcb0a977 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, 3),
+    "version": (3, 5, 4),
     "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 a065f7e1c..8050b683d 100644
--- a/io_scene_obj/import_obj.py
+++ b/io_scene_obj/import_obj.py
@@ -856,6 +856,14 @@ def load(context,
     This function passes the file and sends the data off
         to be split into objects and then converted into mesh objects
     """
+    def unique_name(existing_names, name_orig):
+        i = 0
+        name = name_orig
+        while name in existing_names:
+            name = b"%s.%03d" % (name_orig, i)
+            i += 1
+        existing_names.add(name)
+        return name
 
     def handle_vec(line_start, context_multi_line, line_split, tag, data, vec, vec_len):
         ret_context_multi_line = tag if strip_slash(line_split) else b''
@@ -908,6 +916,8 @@ def load(context,
         context_object = None
         context_vgroup = None
 
+        objects_names = set()
+
         # Nurbs
         context_nurbs = {}
         nurbs = []
@@ -1086,12 +1096,12 @@ def load(context,
 
                 elif line_start == b'o':
                     if use_split_objects:
-                        context_object = line_value(line_split)
+                        context_object = unique_name(objects_names, line_value(line_split))
                         # unique_obects[context_object]= None
 
                 elif line_start == b'g':
                     if use_split_groups:
-                        context_object = line_value(line.split())
+                        context_object = unique_name(objects_names, line_value(line_split))
                         # print 'context_object', context_object
                         # unique_obects[context_object]= None
                     elif use_groups_as_vgroups:
-- 
GitLab