Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-09-13 04:48:12 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-09-13 04:48:12 +0400
commit151a89950001ec5643e75901eddf85fededf1213 (patch)
tree029cc9fe82d26178b0d1d3d5f5a174d422d9aa3c
parentac7e79ea35be9d2b9fd2d87ad09c4dc1aa26e248 (diff)
fix [#36714] FBX Importer fails to import binary FBX out of 3DS MAX
-rw-r--r--io_scene_fbx/import_fbx.py38
1 files changed, 26 insertions, 12 deletions
diff --git a/io_scene_fbx/import_fbx.py b/io_scene_fbx/import_fbx.py
index 22a4279d..e807a049 100644
--- a/io_scene_fbx/import_fbx.py
+++ b/io_scene_fbx/import_fbx.py
@@ -351,18 +351,29 @@ def blen_read_geom_array_mapped_edge(
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 @@ def blen_read_geom_array_mapped_polygon(
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 @@ def blen_read_geom_array_mapped_polygon(
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 @@ def blen_read_geom_layer_smooth(fbx_obj, mesh):
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 @@ def blen_read_geom_layer_smooth(fbx_obj, mesh):
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))