diff options
Diffstat (limited to 'rigify/base_generate.py')
-rw-r--r-- | rigify/base_generate.py | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/rigify/base_generate.py b/rigify/base_generate.py index 7141d77e..22a35eae 100644 --- a/rigify/base_generate.py +++ b/rigify/base_generate.py @@ -62,6 +62,8 @@ class GeneratorPlugin(base_rig.GenerateCallbackHost, metaclass=SingletonPluginMe def register_new_bone(self, new_name, old_name=None): self.generator.bone_owners[new_name] = None + if old_name: + self.generator.derived_bones[old_name].add(new_name) #============================================= @@ -201,6 +203,7 @@ class BaseGenerator: self.root_rigs = [] # Map from bone names to their rigs self.bone_owners = {} + self.derived_bones = collections.defaultdict(set) # Set of plugins self.plugin_list = [] @@ -228,6 +231,32 @@ class BaseGenerator: self.noparent_bones.add(bone_name) + def find_derived_bones(self, bone_name, *, by_owner=False, recursive=True): + """Find which bones were copied from the specified one.""" + if by_owner: + owner = self.bone_owners.get(bone_name, None) + if not owner: + return {} + + table = owner.rigify_derived_bones + else: + table = self.derived_bones + + if recursive: + result = set() + + def rec(name): + for child in table.get(name, {}): + result.add(child) + rec(child) + + rec(bone_name) + + return result + else: + return set(table.get(bone_name, {})) + + def set_layer_group_priority(self, bone_name, layers, priority): for i, val in enumerate(layers): if val: |