[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4700] trunk/py/scripts/addons/ io_scene_fbx/import_fbx.py: worarounds to get some models for 3dsmax loading
Campbell Barton
ideasman42 at gmail.com
Sat Aug 24 09:45:09 CEST 2013
Revision: 4700
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4700
Author: campbellbarton
Date: 2013-08-24 07:45:09 +0000 (Sat, 24 Aug 2013)
Log Message:
-----------
worarounds to get some models for 3dsmax loading
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-08-24 05:10:27 UTC (rev 4699)
+++ trunk/py/scripts/addons/io_scene_fbx/import_fbx.py 2013-08-24 07:45:09 UTC (rev 4700)
@@ -377,7 +377,7 @@
):
if fbx_layer_mapping == b'ByPolygon':
- if fbx_layer_ref in {b'IndexToDirect', b'Direct'}:
+ if fbx_layer_ref == b'IndexToDirect':
if stride == 1:
for i, blen_data_item in enumerate(blen_data):
setattr(blen_data_item, blend_attr, fbx_layer_data[i])
@@ -385,6 +385,12 @@
for i, blen_data_item in enumerate(blen_data):
setattr(blen_data_item, blend_attr, fbx_layer_data[(i * stride): (i * stride) + stride])
return True
+ elif fbx_layer_ref == b'Direct':
+ # looks like direct may have different meanings!
+ assert(stride == 1)
+ for i in fbx_layer_data:
+ setattr(blen_data[i - 1], blend_attr, True)
+ return True
else:
print("warning layer %r ref type unsupported: %r" % (descr, fbx_layer_ref))
else:
@@ -492,6 +498,10 @@
return False
if fbx_layer_mapping == b'ByEdge':
+ # some models have bad edge data, we cant use this info...
+ if not mesh.edges:
+ return False
+
blen_data = mesh.edges
ok_smooth = blen_read_geom_array_mapped_edge(
mesh, blen_data, "use_edge_sharp",
@@ -582,9 +592,16 @@
blen_read_geom_layer_uv(fbx_obj, mesh)
if fbx_edges:
- mesh.edges.add(len(fbx_edges) // 2)
- mesh.edges.foreach_set("vertices", fbx_edges)
+ # workaround for odd number of edge vertices
+ tot_edges = len(fbx_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)
+
+
# 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