diff options
Diffstat (limited to 'rigify/base_rig.py')
-rw-r--r-- | rigify/base_rig.py | 70 |
1 files changed, 50 insertions, 20 deletions
diff --git a/rigify/base_rig.py b/rigify/base_rig.py index a1f9e952..b0bcc027 100644 --- a/rigify/base_rig.py +++ b/rigify/base_rig.py @@ -2,17 +2,24 @@ import collections +from bpy.types import PoseBone +from typing import TYPE_CHECKING, Any, Callable, Optional + from .utils.errors import RaiseErrorMixin from .utils.bones import BoneDict, BoneUtilityMixin from .utils.mechanism import MechanismUtilityMixin from .utils.metaclass import BaseStagedClass +from .utils.misc import ArmatureObject +from .utils.rig import get_rigify_params + +if TYPE_CHECKING: + from .base_generate import BaseGenerator + from .rig_ui_template import ScriptGenerator -# Only export certain symbols via 'from base_rig import *' -__all__ = ['BaseRig', 'stage'] -#============================================= +############################################## # Base Rig -#============================================= +############################################## class GenerateCallbackHost(BaseStagedClass, define_stages=True): """ @@ -138,6 +145,21 @@ class GenerateCallbackHost(BaseStagedClass, define_stages=True): class BaseRig(GenerateCallbackHost, RaiseErrorMixin, BoneUtilityMixin, MechanismUtilityMixin): + generator: 'BaseGenerator' + + obj: ArmatureObject + script: 'ScriptGenerator' + base_bone: str + params: Any + bones: BoneDict + + rigify_parent: Optional['BaseRig'] + rigify_children: list['BaseRig'] + rigify_org_bones: set[str] + rigify_child_bones: set[str] + rigify_new_bones: dict[str, Optional[str]] + rigify_derived_bones: dict[str, set[str]] + """ Base class for all rigs. @@ -151,24 +173,24 @@ class BaseRig(GenerateCallbackHost, RaiseErrorMixin, BoneUtilityMixin, Mechanism and the common generator object. The generation process is also split into multiple stages. """ - def __init__(self, generator, pose_bone): + def __init__(self, generator: 'BaseGenerator', pose_bone: PoseBone): self.generator = generator self.obj = generator.obj self.script = generator.script self.base_bone = pose_bone.name - self.params = pose_bone.rigify_parameters + self.params = get_rigify_params(pose_bone) # Collection of bone names for use in implementing the rig self.bones = BoneDict( # ORG bone names - org = self.find_org_bones(pose_bone), + org=self.find_org_bones(pose_bone), # Control bone names - ctrl = BoneDict(), + ctrl=BoneDict(), # MCH bone names - mch = BoneDict(), + mch=BoneDict(), # DEF bone names - deform = BoneDict(), + deform=BoneDict(), ) # Data useful for complex rig interaction: @@ -194,7 +216,7 @@ class BaseRig(GenerateCallbackHost, RaiseErrorMixin, BoneUtilityMixin, Mechanism ########################################################### # Bone ownership - def find_org_bones(self, pose_bone): + def find_org_bones(self, pose_bone: PoseBone) -> str | list[str] | BoneDict: """ Select bones directly owned by the rig. Returning the same bone from multiple rigs is an error. @@ -234,9 +256,9 @@ class BaseRig(GenerateCallbackHost, RaiseErrorMixin, BoneUtilityMixin, Mechanism """ -#============================================= +############################################## # Rig Utility -#============================================= +############################################## class RigUtility(BoneUtilityMixin, MechanismUtilityMixin): @@ -270,13 +292,21 @@ class RigComponent(LazyRigComponent): self.enable_component() -#============================================= +############################################## # Rig Stage Decorators -#============================================= +############################################## +# Generate @stage.<...> decorators for all valid stages. +@GenerateCallbackHost.stage_decorator_container class stage: - pass - -# Generate @stage.<...> decorators for all valid stages -for name, decorator in GenerateCallbackHost.make_stage_decorators(): - setattr(stage, name, decorator) + # Declare stages for auto-completion - doesn't affect execution. + initialize: Callable + prepare_bones: Callable + generate_bones: Callable + parent_bones: Callable + configure_bones: Callable + preapply_bones: Callable + apply_bones: Callable + rig_bones: Callable + generate_widgets: Callable + finalize: Callable |