[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4254] trunk/py/scripts/addons/ io_scene_obj/import_obj.py: add NGon importer support

Campbell Barton ideasman42 at gmail.com
Sun Feb 10 14:17:07 CET 2013


Revision: 4254
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4254
Author:   campbellbarton
Date:     2013-02-10 13:17:07 +0000 (Sun, 10 Feb 2013)
Log Message:
-----------
add NGon importer support

Modified Paths:
--------------
    trunk/py/scripts/addons/io_scene_obj/import_obj.py

Modified: trunk/py/scripts/addons/io_scene_obj/import_obj.py
===================================================================
--- trunk/py/scripts/addons/io_scene_obj/import_obj.py	2013-02-10 12:58:02 UTC (rev 4253)
+++ trunk/py/scripts/addons/io_scene_obj/import_obj.py	2013-02-10 13:17:07 UTC (rev 4254)
@@ -39,6 +39,25 @@
 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 @@
         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 @@
 
                     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,20 +698,8 @@
         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
+    mesh_untessellate(me, fgon_edges)
 
-#     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
-
     # XXX slow
 #     if unique_smooth_groups and sharp_edges:
 #         for sharp_edge in sharp_edges.keys():



More information about the Bf-extensions-cvs mailing list