From f7a18ba07dbe4f0b4c896282a45bb7ca15a78134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Wed, 13 Jun 2018 17:40:05 +0200 Subject: [PATCH] Support nested collections in Blender 2.8 --- blender_asset_tracer/trace/expanders.py | 14 ++++++++++++++ blender_asset_tracer/trace/result.py | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/blender_asset_tracer/trace/expanders.py b/blender_asset_tracer/trace/expanders.py index 540be0f..f90d46a 100644 --- a/blender_asset_tracer/trace/expanders.py +++ b/blender_asset_tracer/trace/expanders.py @@ -123,10 +123,24 @@ def _expand_curve(block: blendfile.BlendFileBlock): @dna_code('GR') def _expand_group(block: blendfile.BlendFileBlock): + log.debug('Block: %s', block) + objects = block.get_pointer((b'gobject', b'first')) for item in iterators.listbase(objects): yield item.get_pointer(b'ob') + # Recurse through child collections. + try: + children = block.get_pointer((b'children', b'first')) + except KeyError: + # 'children' was introduced in Blender 2.8 collections + pass + else: + for child in iterators.listbase(children): + subcoll = child.get_pointer(b'collection') + log.debug('recursing into child collection %s', subcoll.id_name) + yield from _expand_group(subcoll) + @dna_code('LA') def _expand_lamp(block: blendfile.BlendFileBlock): diff --git a/blender_asset_tracer/trace/result.py b/blender_asset_tracer/trace/result.py index 8924411..b22a527 100644 --- a/blender_asset_tracer/trace/result.py +++ b/blender_asset_tracer/trace/result.py @@ -153,6 +153,10 @@ class BlockUsage: self._abspath = as_path.resolve() except FileNotFoundError: self._abspath = as_path + log.info('Resolving %s rel to %s → %s', + self.asset_path, self.block.bfile.filepath, self._abspath) + else: + log.info('Reusing abspath %s', self._abspath) return self._abspath abspath = property(__fspath__)