From 5f966934df111994e58b9e5cae86133e525329df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Thu, 7 Jun 2018 15:18:18 +0200 Subject: [PATCH] Blender 2.8 fixes because of removed Material.mtex and Material.group --- blender_asset_tracer/blendfile/dna.py | 3 +++ blender_asset_tracer/trace/expanders.py | 10 +++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/blender_asset_tracer/blendfile/dna.py b/blender_asset_tracer/blendfile/dna.py index 8ebbb52..ce40194 100644 --- a/blender_asset_tracer/blendfile/dna.py +++ b/blender_asset_tracer/blendfile/dna.py @@ -148,6 +148,9 @@ class Struct: """ return self._fields + def has_field(self, field_name: bytes) -> bool: + return field_name in self._fields_by_name + def field_from_path(self, pointer_size: int, path: FieldPath) \ diff --git a/blender_asset_tracer/trace/expanders.py b/blender_asset_tracer/trace/expanders.py index 21d5469..540be0f 100644 --- a/blender_asset_tracer/trace/expanders.py +++ b/blender_asset_tracer/trace/expanders.py @@ -70,6 +70,10 @@ def _expand_generic_material(block: blendfile.BlendFileBlock): def _expand_generic_mtex(block: blendfile.BlendFileBlock): + if not block.dna_type.has_field(b'mtex'): + # mtex was removed in Blender 2.8 + return + for mtex in block.iter_fixed_array_of_pointers(b'mtex'): yield mtex.get_pointer(b'tex') yield mtex.get_pointer(b'object') @@ -137,7 +141,11 @@ def _expand_material(block: blendfile.BlendFileBlock): yield from _expand_generic_nodetree_id(block) yield from _expand_generic_mtex(block) - yield block.get_pointer(b'group') + try: + yield block.get_pointer(b'group') + except KeyError: + # Groups were removed from Blender 2.8 + pass @dna_code('MB')