From a1dbf26e376ce6b7772c46eb68365008ec144bf9 Mon Sep 17 00:00:00 2001 From: Julien Duroure Date: Tue, 8 Oct 2019 22:02:44 +0200 Subject: glTF importer: check that primitive exists (some invalid glTF files don't have any) --- io_scene_gltf2/__init__.py | 2 +- io_scene_gltf2/blender/imp/gltf2_blender_gltf.py | 42 +++++++++++++----------- 2 files changed, 23 insertions(+), 21 deletions(-) (limited to 'io_scene_gltf2') diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py index 6bd62dd5..8fe1a4c5 100755 --- a/io_scene_gltf2/__init__.py +++ b/io_scene_gltf2/__init__.py @@ -15,7 +15,7 @@ bl_info = { 'name': 'glTF 2.0 format', 'author': 'Julien Duroure, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors', - "version": (1, 0, 1), + "version": (1, 0, 2), 'blender': (2, 81, 6), 'location': 'File > Import-Export', 'description': 'Import-Export as glTF 2.0', diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_gltf.py b/io_scene_gltf2/blender/imp/gltf2_blender_gltf.py index 6d2181fc..5904a974 100755 --- a/io_scene_gltf2/blender/imp/gltf2_blender_gltf.py +++ b/io_scene_gltf2/blender/imp/gltf2_blender_gltf.py @@ -282,27 +282,29 @@ class BlenderGlTF(): mesh.shapekey_names = [] used_names = set() - for sk, target in enumerate(mesh.primitives[0].targets or []): - if 'POSITION' not in target: - mesh.shapekey_names.append(None) - continue + # Some invalid glTF files has empty primitive tab + if len(mesh.primitives) > 0: + for sk, target in enumerate(mesh.primitives[0].targets or []): + if 'POSITION' not in target: + mesh.shapekey_names.append(None) + continue - # Check if glTF file has some extras with targetNames. Otherwise - # use the name of the POSITION accessor on the first primitive. - shapekey_name = None - if mesh.extras is not None: - if 'targetNames' in mesh.extras and sk < len(mesh.extras['targetNames']): - shapekey_name = mesh.extras['targetNames'][sk] - if shapekey_name is None: - if gltf.data.accessors[target['POSITION']].name is not None: - shapekey_name = gltf.data.accessors[target['POSITION']].name - if shapekey_name is None: - shapekey_name = "target_" + str(sk) - - shapekey_name = BlenderGlTF.find_unused_name(used_names, shapekey_name) - used_names.add(shapekey_name) - - mesh.shapekey_names.append(shapekey_name) + # Check if glTF file has some extras with targetNames. Otherwise + # use the name of the POSITION accessor on the first primitive. + shapekey_name = None + if mesh.extras is not None: + if 'targetNames' in mesh.extras and sk < len(mesh.extras['targetNames']): + shapekey_name = mesh.extras['targetNames'][sk] + if shapekey_name is None: + if gltf.data.accessors[target['POSITION']].name is not None: + shapekey_name = gltf.data.accessors[target['POSITION']].name + if shapekey_name is None: + shapekey_name = "target_" + str(sk) + + shapekey_name = BlenderGlTF.find_unused_name(used_names, shapekey_name) + used_names.add(shapekey_name) + + mesh.shapekey_names.append(shapekey_name) @staticmethod def find_unused_name(haystack, desired_name): -- cgit v1.2.3