diff --git a/rigify/base_generate.py b/rigify/base_generate.py index ce04b8fc4da16ad741081d7e60d19bd69ea821fe..da4949b2c0119f3f3b71be5134aad803dd31080e 100644 --- a/rigify/base_generate.py +++ b/rigify/base_generate.py @@ -31,6 +31,7 @@ from .utils.misc import clone_parameters, assign_parameters from . import base_rig +from itertools import count #============================================= # Generator Plugin @@ -284,13 +285,24 @@ class BaseGenerator: self.stage = method_name - for rig in [*self.rig_list, *self.plugin_list]: + for rig in self.rig_list: rig.rigify_invoke_stage(method_name) assert(self.context.active_object == self.obj) assert(self.obj.mode == 'OBJECT') assert(num_bones == len(self.obj.data.bones)) + # Allow plugins to be added to the end of the list on the fly + for i in count(0): + if i >= len(self.plugin_list): + break + + self.plugin_list[i].rigify_invoke_stage(method_name) + + assert(self.context.active_object == self.obj) + assert(self.obj.mode == 'OBJECT') + assert(num_bones == len(self.obj.data.bones)) + def __run_edit_stage(self, method_name): assert(self.context.active_object == self.obj) @@ -299,13 +311,24 @@ class BaseGenerator: self.stage = method_name - for rig in [*self.rig_list, *self.plugin_list]: + for rig in self.rig_list: rig.rigify_invoke_stage(method_name) assert(self.context.active_object == self.obj) assert(self.obj.mode == 'EDIT') assert(num_bones == len(self.obj.data.edit_bones)) + # Allow plugins to be added to the end of the list on the fly + for i in count(0): + if i >= len(self.plugin_list): + break + + self.plugin_list[i].rigify_invoke_stage(method_name) + + assert(self.context.active_object == self.obj) + assert(self.obj.mode == 'EDIT') + assert(num_bones == len(self.obj.data.edit_bones)) + def invoke_initialize(self): self.__run_object_stage('initialize') diff --git a/rigify/base_rig.py b/rigify/base_rig.py index d878143b5b2f74900098c81b439eb2613154d602..c25e701df5c3f8ecd91319ce1fedeb0133a0a737 100644 --- a/rigify/base_rig.py +++ b/rigify/base_rig.py @@ -267,14 +267,25 @@ class RigUtility(BoneUtilityMixin, MechanismUtilityMixin): self.owner.register_new_bone(new_name, old_name) -class RigComponent(GenerateCallbackHost, RigUtility): - """Base class for utility classes that generate part of a rig using callbacks.""" +class LazyRigComponent(GenerateCallbackHost, RigUtility): + """Base class for utility classes that generate part of a rig using callbacks. Starts as disabled.""" def __init__(self, owner): super().__init__(owner) - self.owner.rigify_sub_objects = objects = self.owner.rigify_sub_objects or [] + self.is_component_enabled = False + + def enable_component(self): + if not self.is_component_enabled: + self.is_component_enabled = True + self.owner.rigify_sub_objects = objects = self.owner.rigify_sub_objects or [] + objects.append(self) + - objects.append(self) +class RigComponent(LazyRigComponent): + """Base class for utility classes that generate part of a rig using callbacks.""" + def __init__(self, owner): + super().__init__(owner) + self.enable_component() #=============================================