[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4724] trunk/py/scripts/addons/ io_scene_fbx/import_fbx.py: fix for edge importing, it wasn' t working at all.
Campbell Barton
ideasman42 at gmail.com
Mon Sep 2 08:24:26 CEST 2013
Revision: 4724
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4724
Author: campbellbarton
Date: 2013-09-02 06:24:26 +0000 (Mon, 02 Sep 2013)
Log Message:
-----------
fix for edge importing, it wasn't working at all.
Modified Paths:
--------------
trunk/py/scripts/addons/io_scene_fbx/import_fbx.py
Modified: trunk/py/scripts/addons/io_scene_fbx/import_fbx.py
===================================================================
--- trunk/py/scripts/addons/io_scene_fbx/import_fbx.py 2013-09-01 23:27:50 UTC (rev 4723)
+++ trunk/py/scripts/addons/io_scene_fbx/import_fbx.py 2013-09-02 06:24:26 UTC (rev 4724)
@@ -616,7 +616,7 @@
poly_loop_starts.append(poly_loop_prev)
poly_loop_totals.append((i - poly_loop_prev) + 1)
poly_loop_prev = i + 1
- index = -(index + 1)
+ index = index ^ -1
l.vertex_index = index
mesh.polygons.add(len(poly_loop_starts))
@@ -628,16 +628,34 @@
blen_read_geom_layer_color(fbx_obj, mesh)
if fbx_edges:
- # workaround for odd number of edge vertices
- tot_edges = len(fbx_edges) // 2
+ # edges in fact index the polygons (NOT the vertices)
+ import array
+ tot_edges = len(fbx_edges)
+ edges_conv = array.array('i', [0]) * (tot_edges * 2)
- if len(fbx_edges) % 2:
- print("Corrupt edges found in: %s" % elem_name_utf8)
- else:
- mesh.edges.add(tot_edges)
- mesh.edges.foreach_set("vertices", fbx_edges)
+ edge_index = 0
+ for i in fbx_edges:
+ if fbx_polys[i] >= 0:
+ e_a, e_b = fbx_polys[i], fbx_polys[i + 1]
+ if e_b < 0:
+ e_b = e_b ^ -1
+ else:
+ # Last index of polygon, wrap back to the start.
+ # ideally we wouldn't have to search back,
+ # but it should only be 2-3 iterations.
+ j = i - 1
+ while j >= 0 and fbx_polys[j] >= 0:
+ j -= 1
+ e_a, e_b = fbx_polys[i] ^ -1, fbx_polys[j + 1]
+ edges_conv[edge_index] = e_a
+ edges_conv[edge_index + 1] = e_b
+ edge_index += 2
+
+ mesh.edges.add(tot_edges)
+ mesh.edges.foreach_set("vertices", edges_conv)
+
# must be after edge, face loading.
ok_smooth = blen_read_geom_layer_smooth(fbx_obj, mesh)
More information about the Bf-extensions-cvs
mailing list