Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'rigify/base_generate.py')
-rw-r--r--rigify/base_generate.py29
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: