[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