From 1f3490adaf35946fa507c97b5312656d3136b65f Mon Sep 17 00:00:00 2001 From: Philipp Oeser Date: Tue, 19 Jun 2012 16:41:25 +0000 Subject: 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(-) (limited to 'io_scene_obj') diff --git a/io_scene_obj/import_obj.py b/io_scene_obj/import_obj.py index b60cb907..23e28913 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) -- cgit v1.2.3