From 1f3490adaf35946fa507c97b5312656d3136b65f Mon Sep 17 00:00:00 2001
From: Philipp Oeser <info@graphics-engineer.com>
Date: Tue, 19 Jun 2012 16:41:25 +0000
Subject: [PATCH] This should fix [#31801] "OBJ importer doesn't import
 smoothing groups as sharp edges" reported by Tom Penn.

There was code to mark edges as sharp but it was disabled as being too slow. Found a quicker way using bmesh.
Reviewed by Campbell.
---
 io_scene_obj/import_obj.py | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/io_scene_obj/import_obj.py b/io_scene_obj/import_obj.py
index b60cb907f..23e28913a 100644
--- a/io_scene_obj/import_obj.py
+++ b/io_scene_obj/import_obj.py
@@ -644,6 +644,27 @@ def create_mesh(new_objects,
     def edges_match(e1, e2):
         return (e1[0] == e2[0] and e1[1] == e2[1]) or (e1[0] == e2[1] and e1[1] == e2[0])
 
+    me.validate()
+    me.update(calc_edges=use_edges)
+
+    if unique_smooth_groups and sharp_edges:
+        import bmesh
+        bm = bmesh.new()
+        bm.from_mesh(me)
+        # to avoid slow iterator lookups later / indexing verts is slow in bmesh
+        bm_verts = bm.verts[:]
+        
+        for sharp_edge in sharp_edges.keys():
+            vert1 = bm_verts[sharp_edge[0]]
+            vert2 = bm_verts[sharp_edge[1]]
+            if vert1 != vert2:
+                edge = bm.edges.get((vert1, vert2))
+                if edge is not None:
+                    me.edges[edge.index].use_edge_sharp = True
+
+        bm.free()
+        del bm
+
     # XXX slow
 #     if use_ngons and fgon_edges:
 #         for fgon_edge in fgon_edges.keys():
@@ -672,9 +693,6 @@ def create_mesh(new_objects,
 #                 me_edges[ed].flag |= SHARP
 #         del SHARP
 
-    me.validate()
-    me.update(calc_edges=use_edges)
-
     ob = bpy.data.objects.new(me.name, me)
     new_objects.append(ob)
 
-- 
GitLab