diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-02-10 17:17:07 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-02-10 17:17:07 +0400 |
commit | 9fa784d80a8a4483a159dad665b8f704bc30f605 (patch) | |
tree | a54ef4ee3868009a79d56c8d611e10d5aba90f32 /io_scene_obj | |
parent | 8c2a9a541c38332f57759d066e81915f95bf1391 (diff) |
add NGon importer support
Diffstat (limited to 'io_scene_obj')
-rw-r--r-- | io_scene_obj/import_obj.py | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/io_scene_obj/import_obj.py b/io_scene_obj/import_obj.py index 6a43934c..72c17bfa 100644 --- a/io_scene_obj/import_obj.py +++ b/io_scene_obj/import_obj.py @@ -39,6 +39,25 @@ from bpy_extras.io_utils import unpack_list, unpack_face_list from bpy_extras.image_utils import load_image +def mesh_untessellate(me, fgon_edges): + import bmesh + bm = bmesh.new() + bm.from_mesh(me) + verts = bm.verts[:] + get = bm.edges.get + edges = [get((verts[key[0]], verts[key[1]])) for key in fgon_edges] + try: + bmesh.ops.dissolve_edges(bm, edges=edges, use_verts=False) + except: + # Possible dissolve fails for some edges + # but dont fail silently unless this is a real bug. + import traceback + traceback.print_exc() + + bm.to_mesh(me) + bm.free() + + def line_value(line_split): """ Returns 1 string represneting the value for this line @@ -453,7 +472,7 @@ def create_mesh(new_objects, context_smooth_group_old = -1 # Split ngons into tri's - fgon_edges = {} # Used for storing fgon keys + fgon_edges = set() # Used for storing fgon keys if use_edges: edges = [] @@ -537,7 +556,7 @@ def create_mesh(new_objects, for key, users in edge_users.items(): if users > 1: - fgon_edges[key] = None + fgon_edges.add(key) # remove all after 3, means we dont have to pop this one. faces.pop(f_idx) @@ -679,19 +698,7 @@ def create_mesh(new_objects, bm.free() del bm - # XXX slow -# if use_ngons and fgon_edges: -# for fgon_edge in fgon_edges.keys(): -# for ed in me.edges: -# if edges_match(fgon_edge, ed.vertices): -# ed.is_fgon = True - -# if use_ngons and fgon_edges: -# FGON= Mesh.EdgeFlags.FGON -# for ed in me.findEdges( fgon_edges.keys() ): -# if ed is not None: -# me_edges[ed].flag |= FGON -# del FGON + mesh_untessellate(me, fgon_edges) # XXX slow # if unique_smooth_groups and sharp_edges: |