diff options
author | Philipp Oeser <info@graphics-engineer.com> | 2012-06-19 20:41:25 +0400 |
---|---|---|
committer | Philipp Oeser <info@graphics-engineer.com> | 2012-06-19 20:41:25 +0400 |
commit | 1f3490adaf35946fa507c97b5312656d3136b65f (patch) | |
tree | 715619b37da5122c21c1518b2f07239571c59034 /io_scene_obj | |
parent | 4ba80e489434d0e85c6b235f874b1f84b2f58a32 (diff) |
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.
Diffstat (limited to 'io_scene_obj')
-rw-r--r-- | io_scene_obj/import_obj.py | 24 |
1 files changed, 21 insertions, 3 deletions
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) |