[Bf-extensions-cvs] [fa3b54a] master: FBX import: fix for previous change to `elem_find_first_bytes`, add new `elem_find_first_string_as_bytes`, and remove exception for AllSame mapping...

Bastien Montagne noreply at git.blender.org
Wed Feb 4 16:13:33 CET 2015


Commit: fa3b54a975fd4204ffe9ad502b1f4b4035219260
Author: Bastien Montagne
Date:   Wed Feb 4 15:38:52 2015 +0100
Branches: master
https://developer.blender.org/rBAfa3b54a975fd4204ffe9ad502b1f4b4035219260

FBX import: fix for previous change to `elem_find_first_bytes`, add new `elem_find_first_string_as_bytes`, and remove exception for AllSame mapping...

===================================================================

M	io_scene_fbx/import_fbx.py

===================================================================

diff --git a/io_scene_fbx/import_fbx.py b/io_scene_fbx/import_fbx.py
index 67dfd84..a31c10b 100644
--- a/io_scene_fbx/import_fbx.py
+++ b/io_scene_fbx/import_fbx.py
@@ -81,6 +81,15 @@ def elem_find_first_string(elem, id_search):
     return None
 
 
+def elem_find_first_string_as_bytes(elem, id_search):
+    fbx_item = elem_find_first(elem, id_search)
+    if fbx_item is not None:
+        assert(len(fbx_item.props) == 1)
+        assert(fbx_item.props_type[0] == data_types.STRING)
+        return fbx_item.props[0]  # Keep it as bytes as requested...
+    return None
+
+
 def elem_find_first_bytes(elem, id_search, decode=True):
     fbx_item = elem_find_first(elem, id_search)
     if fbx_item is not None:
@@ -684,8 +693,8 @@ def blen_read_animations(fbx_tmpl_astack, fbx_tmpl_alayer, stacks, scene):
 def blen_read_geom_layerinfo(fbx_layer):
     return (
         elem_find_first_string(fbx_layer, b'Name'),
-        elem_find_first_string(fbx_layer, b'MappingInformationType'),
-        elem_find_first_string(fbx_layer, b'ReferenceInformationType'),
+        elem_find_first_string_as_bytes(fbx_layer, b'MappingInformationType'),
+        elem_find_first_string_as_bytes(fbx_layer, b'ReferenceInformationType'),
         )
 
 
@@ -706,6 +715,10 @@ def blen_read_geom_array_setattr(generator, blen_data, blen_attr, fbx_data, stri
 
 
 # generic generators.
+def blen_read_geom_array_gen_allsame(data_len):
+    return zip(*(range(data_len), (0,) * data_len))
+
+
 def blen_read_geom_array_gen_direct(fbx_data, stride):
     fbx_data_len = len(fbx_data)
     return zip(*(range(fbx_data_len // stride), range(0, fbx_data_len, stride)))
@@ -748,6 +761,13 @@ def blen_read_geom_array_mapped_vert(
                                          blen_data, blen_attr, fbx_layer_data, stride, item_size, descr, xform)
             return True
         blen_read_geom_array_error_ref(descr, fbx_layer_ref)
+    elif fbx_layer_mapping == b'AllSame':
+        if fbx_layer_ref == b'IndexToDirect':
+            assert(fbx_layer_index is None)
+            blen_read_geom_array_setattr(blen_read_geom_array_gen_allsame(len(blen_data)),
+                                         blen_data, blen_attr, fbx_layer_data, stride, item_size, descr, xform)
+            return True
+        blen_read_geom_array_error_ref(descr, fbx_layer_ref)
     else:
         blen_read_geom_array_error_mapping(descr, fbx_layer_mapping)
 
@@ -767,6 +787,13 @@ def blen_read_geom_array_mapped_edge(
                                          blen_data, blen_attr, fbx_layer_data, stride, item_size, descr, xform)
             return True
         blen_read_geom_array_error_ref(descr, fbx_layer_ref)
+    elif fbx_layer_mapping == b'AllSame':
+        if fbx_layer_ref == b'IndexToDirect':
+            assert(fbx_layer_index is None)
+            blen_read_geom_array_setattr(blen_read_geom_array_gen_allsame(len(blen_data)),
+                                         blen_data, blen_attr, fbx_layer_data, stride, item_size, descr, xform)
+            return True
+        blen_read_geom_array_error_ref(descr, fbx_layer_ref)
     else:
         blen_read_geom_array_error_mapping(descr, fbx_layer_mapping)
 
@@ -797,6 +824,13 @@ def blen_read_geom_array_mapped_polygon(
                                          blen_data, blen_attr, fbx_layer_data, stride, item_size, descr, xform)
             return True
         blen_read_geom_array_error_ref(descr, fbx_layer_ref)
+    elif fbx_layer_mapping == b'AllSame':
+        if fbx_layer_ref == b'IndexToDirect':
+            assert(fbx_layer_index is None)
+            blen_read_geom_array_setattr(blen_read_geom_array_gen_allsame(len(blen_data)),
+                                         blen_data, blen_attr, fbx_layer_data, stride, item_size, descr, xform)
+            return True
+        blen_read_geom_array_error_ref(descr, fbx_layer_ref)
     else:
         blen_read_geom_array_error_mapping(descr, fbx_layer_mapping)
 
@@ -824,6 +858,13 @@ def blen_read_geom_array_mapped_polyloop(
                                          blen_data, blen_attr, fbx_layer_data, stride, item_size, descr, xform)
             return True
         blen_read_geom_array_error_ref(descr, fbx_layer_ref)
+    elif fbx_layer_mapping == b'AllSame':
+        if fbx_layer_ref == b'IndexToDirect':
+            assert(fbx_layer_index is None)
+            blen_read_geom_array_setattr(blen_read_geom_array_gen_allsame(len(blen_data)),
+                                         blen_data, blen_attr, fbx_layer_data, stride, item_size, descr, xform)
+            return True
+        blen_read_geom_array_error_ref(descr, fbx_layer_ref)
     else:
         blen_read_geom_array_error_mapping(descr, fbx_layer_mapping)
 
@@ -841,10 +882,6 @@ def blen_read_geom_layer_material(fbx_obj, mesh):
      fbx_layer_ref,
      ) = blen_read_geom_layerinfo(fbx_layer)
 
-    if fbx_layer_mapping == b'AllSame':
-        # only to quiet warning
-        return
-
     layer_id = b'Materials'
     fbx_layer_data = elem_prop_first(elem_find_first(fbx_layer, layer_id))
 
@@ -1234,7 +1271,6 @@ def blen_read_texture_image(fbx_tmpl, fbx_obj, basedir, settings):
     data = elem_find_first_bytes(fbx_obj, b'Content')
     if (data):
         data_len = len(data)
-        print(data_len)
         if (data_len):
             image.pack(data=data, data_len=data_len)



More information about the Bf-extensions-cvs mailing list