[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4752] trunk/py/scripts/addons/ io_scene_fbx/import_fbx.py: fix [#36714] FBX Importer fails to import binary FBX out of 3DS MAX

Campbell Barton ideasman42 at gmail.com
Fri Sep 13 02:48:12 CEST 2013


Revision: 4752
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4752
Author:   campbellbarton
Date:     2013-09-13 00:48:12 +0000 (Fri, 13 Sep 2013)
Log Message:
-----------
fix [#36714] FBX Importer fails to import binary FBX out of 3DS MAX

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-12 23:48:10 UTC (rev 4751)
+++ trunk/py/scripts/addons/io_scene_fbx/import_fbx.py	2013-09-13 00:48:12 UTC (rev 4752)
@@ -351,18 +351,29 @@
     fbx_layer_data, fbx_layer_index,
     fbx_layer_mapping, fbx_layer_ref,
     stride, item_size, descr,
+    xform=None,
     ):
 
     if fbx_layer_mapping == b'ByEdge':
         if fbx_layer_ref == b'Direct':
             if stride == 1:
-                for i, blen_data_item in enumerate(blen_data):
-                    setattr(blen_data_item, blend_attr,
-                            fbx_layer_data[i])
+                if xform is None:
+                    for i, blen_data_item in enumerate(blen_data):
+                        setattr(blen_data_item, blend_attr,
+                                fbx_layer_data[i])
+                else:
+                    for i, blen_data_item in enumerate(blen_data):
+                        setattr(blen_data_item, blend_attr,
+                                xform(fbx_layer_data[i]))
             else:
-                for i, blen_data_item in enumerate(blen_data):
-                    setattr(blen_data_item, blend_attr,
-                            fbx_layer_data[(i * stride): (i * stride) + item_size])
+                if xform is None:
+                    for i, blen_data_item in enumerate(blen_data):
+                        setattr(blen_data_item, blend_attr,
+                                fbx_layer_data[(i * stride): (i * stride) + item_size])
+                else:
+                    for i, blen_data_item in enumerate(blen_data):
+                        setattr(blen_data_item, blend_attr,
+                                xform(fbx_layer_data[(i * stride): (i * stride) + item_size]))
             return True
         else:
             print("warning layer %r ref type unsupported: %r" % (descr, fbx_layer_ref))
@@ -377,6 +388,7 @@
     fbx_layer_data, fbx_layer_index,
     fbx_layer_mapping, fbx_layer_ref,
     stride, item_size, descr,
+    xform=None,
     ):
 
     if fbx_layer_mapping == b'ByPolygon':
@@ -393,8 +405,12 @@
         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)
+            if xform is None:
+                for i in range(len(fbx_layer_data)):
+                    setattr(blen_data[i], blend_attr, fbx_layer_data[i])
+            else:
+                for i in range(len(fbx_layer_data)):
+                    setattr(blen_data[i], blend_attr, xform(fbx_layer_data[i]))
             return True
         else:
             print("warning layer %r ref type unsupported: %r" % (descr, fbx_layer_ref))
@@ -543,11 +559,8 @@
             fbx_layer_data, None,
             fbx_layer_mapping, fbx_layer_ref,
             1, 1, layer_id,
+            xform=lambda s: not s,
             )
-        if ok_smooth:
-            # ugh, need to negate
-            for e in mesh.edges:
-                e.use_edge_sharp = not e.use_edge_sharp
         return ok_smooth
     elif fbx_layer_mapping == b'ByPolygon':
         blen_data = mesh.polygons
@@ -556,6 +569,7 @@
             fbx_layer_data, None,
             fbx_layer_mapping, fbx_layer_ref,
             1, 1, layer_id,
+            xform=lambda s: (s != 0),  # smoothgroup bitflags, treat as booleans for now
             )
     else:
         print("warning layer %r mapping type unsupported: %r" % (fbx_layer.id, fbx_layer_mapping))



More information about the Bf-extensions-cvs mailing list