[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