From 18901fa5f726735621d0bf4632b89d41091e14e5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 8 May 2015 01:17:24 +1000 Subject: [PATCH] Add alembic support (with option so we can disable) --- bam/blend/blendfile_path_walker.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/bam/blend/blendfile_path_walker.py b/bam/blend/blendfile_path_walker.py index 7389f49..725e5dd 100644 --- a/bam/blend/blendfile_path_walker.py +++ b/bam/blend/blendfile_path_walker.py @@ -23,6 +23,8 @@ import os VERBOSE = False # os.environ.get('BAM_VERBOSE', False) TIMEIT = False +USE_ALEMBIC_BRANCH = True + class C_defs: __slots__ = () @@ -52,6 +54,9 @@ class C_defs: PART_DRAW_OB = 7 PART_DRAW_GR = 8 + # DNA_object_types.h + # Object.transflag + OB_DUPLIGROUP = 1 << 8 if VERBOSE: import logging @@ -556,6 +561,11 @@ class FilePath: if block_external is not None: yield FPElem_block_path(basedir, level, (block_external, b'filename')), extra_info + if USE_ALEMBIC_BRANCH: + @staticmethod + def _from_block_CL(block, basedir, extra_info, level): + yield FPElem_block_path(basedir, level, (block, b'output_filepath')), extra_info + @staticmethod def _from_block_SC(block, basedir, extra_info, level): block_ed = block.get_pointer(b'ed') @@ -686,12 +696,25 @@ class ExpandID: def expand_OB(block): # 'Object' yield from ExpandID._expand_generic_animdata(block) yield from ExpandID._expand_generic_material(block) + + has_dup_group = False yield block.get_pointer(b'data') - yield block.get_pointer(b'dup_group') + if block[b'transflag'] & C_defs.OB_DUPLIGROUP: + dup_group = block.get_pointer(b'dup_group') + if dup_group is not None: + has_dup_group = True + yield dup_group + del dup_group yield block.get_pointer(b'proxy') yield block.get_pointer(b'proxy_group') + if USE_ALEMBIC_BRANCH: + if has_dup_group: + sdna_index_CacheLibrary = block.file.sdna_index_from_id.get(b'CacheLibrary') + if sdna_index_CacheLibrary is not None: + yield block.get_pointer(b'cache_library') + # 'ob->pose->chanbase[...].custom' block_pose = block.get_pointer(b'pose') if block_pose is not None: