[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [1923] contrib/py/scripts/addons/ io_import_fbx.py: Updates how the script reads the fbx mesh info.

Kalle-Samuli Riihikoski haikalle at gmail.com
Sat May 14 16:51:19 CEST 2011


Revision: 1923
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=1923
Author:   haikalle
Date:     2011-05-14 14:51:19 +0000 (Sat, 14 May 2011)
Log Message:
-----------
Updates how the script reads the fbx mesh info. Now it should keep the same verts,edge,face order.

Modified Paths:
--------------
    contrib/py/scripts/addons/io_import_fbx.py

Modified: contrib/py/scripts/addons/io_import_fbx.py
===================================================================
--- contrib/py/scripts/addons/io_import_fbx.py	2011-05-14 14:32:34 UTC (rev 1922)
+++ contrib/py/scripts/addons/io_import_fbx.py	2011-05-14 14:51:19 UTC (rev 1923)
@@ -233,7 +233,7 @@
 
                         verts = tag_get_single(value2, "Vertices")[1]
                         faces = tag_get_single(value2, "PolygonVertexIndex")[1]
-                        #EDGE: edges = tag_get_single(value2, "Edges")[1]
+                        edges = tag_get_single(value2, "Edges")[1]
 
                         # convert odd fbx verts and faces to a blender mesh.
                         if verts and faces:
@@ -242,19 +242,20 @@
                             blen_verts = [verts[i - 3:i] for i in range(3, len(verts) + 3, 3)]
 
                             # get weirdo face indicies and proper edge indexs
-                            # edge_ends is referring to end vertex of the face.
-                            # Thas why we have link with first vertex of the face.
+                            # edge_points Collects faces index, first and last verts.
 
                             face = []
-                            #EDGE: ed = 0
-                            #EDGE: edge_ends = []
+                            edge_points = {}
                             blen_faces = [face]
                             blen_faces_edges = []  # faces that have a length of 2
                             blen_poly_mapping = {}
                             poly_idx = 0
+                            
                             for idx, f in enumerate(faces):
+                                        
                                 if f < 0:
                                     face.append(f ^ -1)
+                                    edge_points[idx] = [face[-1],face[0]]
                                     face = []
 
                                     if len(blen_faces[-1]) == 2:
@@ -264,48 +265,40 @@
 
                                     blen_faces.append(face)
                                     poly_idx += 1
-
-                                    #EDGE: if ed == 0:
-                                    #EDGE:     edge_ends.append((idx, 0))
-                                    #EDGE:     ed = 1
-                                    #EDGE:     tuli = idx + 1
-                                    #EDGE: else:
-                                    #EDGE:     edge_ends.append((idx, tuli))
-                                    #EDGE:     tuli = idx + 1
-
-                                else:
+                                    
+                                else:   
                                     face.append(f)
 
-
-                            #EDGE:
-                            """
                             edge_final = []
 
-                            for idx, e in enumerate(edges):
-                                if edge_ends[-1][0] == e:
-                                    edge1 = faces[edge_ends[-1][0]]
-                                    if edge1 < 0:
-                                        edge1 ^= -1
-                                    edge2 = faces[edge_ends[-1][1]]
-                                    if edge2 < 0:
-                                        edge2 ^= -1
+                            if(len(faces) == 2): # Special case if there is only one edge in scene.
+                                edge1 = faces[0]
+                                if(edge1<0):
+                                    edge1 ^= -1 
+                                edge2 = faces[1]
+                                if(edge2<0):
+                                    edge2 ^= -1
+                                edge_final.append((edge1,edge2))
+                            
+                            else:    # More than one edges. 
+                                for idx, e in enumerate(edges):
 
-                                    edge_final.append((edge1, edge2))
-                                else:
-                                    edge1 = faces[e]
-                                    if edge1 < 0:
-                                        edge1 ^= -1
-                                    edge2 = faces[e + 1]
-                                    if edge2 < 0:
-                                        edge2 ^= -1
+                                    if (faces[e]<0): #If this is the faces last point, use edge_points to create edge between last and first points of face
+                                        edge1 = edge_points[e][0]
+                                        edge2 = edge_points[e][1]
+                                    else:
+                                        edge1 = faces[e]
+                                        edge2 = faces[e + 1]
+                                        if edge2 < 0:
+                                            edge2 ^= -1
 
                                     edge_final.append((edge1, edge2))
-                            """
+                                  
                             if not blen_faces[-1]:
                                 del blen_faces[-1]
+                            
 
-                            #EDGE: me.from_pydata(blen_verts, edge_final + blen_faces_edges, blen_faces)
-                            me.from_pydata(blen_verts, blen_faces_edges, blen_faces)
+                            me.from_pydata(blen_verts, edge_final, blen_faces)
                             me.update()
 
                             # Handle smoothing
@@ -329,8 +322,7 @@
                                     print("WARNING: %s, unsupported smoothing type: %s" % (fbx_name, type))
 
 
-                            #EDGE:
-                            """ 
+                            
                             # Handle edge weighting
                             for i in tag_get_iter(value2, "LayerElementEdgeCrease"):
                                 i = i[1]
@@ -350,7 +342,7 @@
                                         ed.crease = crease_edges[idx]
                                 else:
                                     print("WARNING: %s, unsupported smoothing type: %s" % (fbx_name, type))
-                            """
+                            
 
                             obj = bpy.data.objects.new(fbx_name, me)
                             base = scene.objects.link(obj)



More information about the Bf-extensions-cvs mailing list