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:
authorBastien Montagne <montagne29@wanadoo.fr>2015-02-06 18:24:35 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2015-02-06 18:24:35 +0300
commit1c602ef7b58ac1e06098e82ce99e4fd82878351a (patch)
tree748cfc5d5bf24f0824a96245a7f17ac0f3f00821 /io_scene_fbx/import_fbx.py
parenta00934e26c465da8cccfc129fff97e49c0e2f394 (diff)
Fix part of T43582: Importing Custom Normals with FBX fails.
Mess in filename props ID. Thanks one more time FBX for your beautiful demonstrations of pure logic insanity...
Diffstat (limited to 'io_scene_fbx/import_fbx.py')
-rw-r--r--io_scene_fbx/import_fbx.py24
1 files changed, 19 insertions, 5 deletions
diff --git a/io_scene_fbx/import_fbx.py b/io_scene_fbx/import_fbx.py
index 675d0166..dc2e69b3 100644
--- a/io_scene_fbx/import_fbx.py
+++ b/io_scene_fbx/import_fbx.py
@@ -151,7 +151,9 @@ def elem_prop_first(elem, default=None):
# Support for
# Properties70: { ... P:
def elem_props_find_first(elem, elem_prop_id):
-
+ if elem is None:
+ # When properties are not found... Should never happen, but happens - as usual.
+ return None
# support for templates (tuple of elems)
if type(elem) is not FBXElem:
assert(type(elem) is tuple)
@@ -1273,12 +1275,22 @@ def blen_read_texture_image(fbx_tmpl, fbx_obj, basedir, settings):
image_cache = settings.image_cache
- filepath = elem_find_first_string(fbx_obj, b'RelativeFileName')
+ # Yet another beautiful logic demonstration by Master FBX:
+ # * RelativeFilename in both Video and Texture nodes.
+ # * FileName in texture nodes.
+ # * Filename in video nodes.
+ # Aaaaaaaarrrrrrrrgggggggggggg!!!!!!!!!!!!!!
+ filepath = elem_find_first_string(fbx_obj, b'RelativeFilename')
if filepath:
filepath = os.path.join(basedir, filepath)
else:
filepath = elem_find_first_string(fbx_obj, b'FileName')
- filepath = filepath.replace('\\', '/') if (os.sep == '/') else filepath.replace('/', '\\')
+ if not filepath:
+ filepath = elem_find_first_string(fbx_obj, b'Filename')
+ if not filepath:
+ print("Error, could not find any file path in ", fbx_obj)
+ else :
+ filepath = filepath.replace('\\', '/') if (os.sep == '/') else filepath.replace('/', '\\')
image = image_cache.get(filepath)
if image is not None:
@@ -2631,7 +2643,8 @@ def load(operator, context, filepath="",
assert(fbx_obj.id == b'Material')
fbx_props = (elem_find_first(fbx_obj, b'Properties70'),
elem_find_first(fbx_tmpl, b'Properties70', fbx_elem_nil))
- assert(fbx_props[0] is not None)
+ # Do not assert, it can be None actually, sigh...
+ #~ assert(fbx_props[0] is not None)
# (x / 7.142) is only a guess, cycles usable range is (0.0 -> 0.5)
return elem_props_get_number(fbx_props, b'BumpFactor', 2.5) / 7.142
@@ -2640,7 +2653,8 @@ def load(operator, context, filepath="",
fbx_props = (elem_find_first(fbx_obj, b'Properties70'),
elem_find_first(fbx_tmpl, b'Properties70', fbx_elem_nil))
- assert(fbx_props[0] is not None)
+ # Do not assert, it can be None actually, sigh...
+ #~ assert(fbx_props[0] is not None)
return (elem_props_get_vector_3d(fbx_props, b'Translation', (0.0, 0.0, 0.0)),
elem_props_get_vector_3d(fbx_props, b'Rotation', (0.0, 0.0, 0.0)),
elem_props_get_vector_3d(fbx_props, b'Scaling', (1.0, 1.0, 1.0)),