diff options
Diffstat (limited to 'rigify/utils/components.py')
-rw-r--r-- | rigify/utils/components.py | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/rigify/utils/components.py b/rigify/utils/components.py index c1d01c90..54c191ba 100644 --- a/rigify/utils/components.py +++ b/rigify/utils/components.py @@ -1,28 +1,34 @@ # SPDX-License-Identifier: GPL-2.0-or-later -import bpy +from typing import Optional +from mathutils import Vector, Matrix from .naming import make_derived_name from .bones import put_bone, copy_bone_position, align_bone_orientation from .widgets_basic import create_pivot_widget -from .misc import force_lazy +from .misc import force_lazy, OptionalLazy -from ..base_rig import RigComponent, stage +from ..base_rig import BaseRig, RigComponent class CustomPivotControl(RigComponent): """ A utility that generates a pivot control with a custom position. - Generates a control bone, and a MCH output bone. + Generates a control bone, and an MCH output bone. """ + ctrl: str + mch: str + def __init__( - self, rig, id_name, org_bone, *, - name=None, parent=None, position=None, matrix=None, - scale=1.0, scale_mch=None, - move_to=None, align_to=None, snap_to=None, - widget_axis=1.5, widget_cap=1.0, widget_square=True, + self, rig: BaseRig, id_name: str, org_bone: str, *, + name: Optional[str] = None, parent: OptionalLazy[str] = None, + position: Optional[Vector] = None, matrix: Optional[Matrix] = None, + scale: float = 1.0, scale_mch: Optional[float] = None, + move_to: OptionalLazy[str] = None, align_to: OptionalLazy[str] = None, + snap_to: OptionalLazy[str] = None, + widget_axis: float = 1.5, widget_cap: float = 1.0, widget_square: bool = True, ): super().__init__(rig) @@ -53,9 +59,12 @@ class CustomPivotControl(RigComponent): def output(self): return self.mch - def do_make_bones(self, org, name, position, matrix): - self.bones.ctrl[self.id_name] = self.ctrl = self.copy_bone(org, name, parent=not self.parent, scale=self.scale) - self.bones.mch[self.id_name] = self.mch = self.copy_bone(org, make_derived_name(name, 'mch'), scale=self.scale_mch) + def do_make_bones(self, org: str, name: str, + position: Optional[Vector], matrix: Optional[Matrix]): + self.bones.ctrl[self.id_name] = self.ctrl =\ + self.copy_bone(org, name, parent=not self.parent, scale=self.scale) + self.bones.mch[self.id_name] = self.mch =\ + self.copy_bone(org, make_derived_name(name, 'mch'), scale=self.scale_mch) if position or matrix: put_bone(self.obj, self.ctrl, position, matrix=matrix) @@ -83,7 +92,9 @@ class CustomPivotControl(RigComponent): self.set_bone_parent(self.mch, self.ctrl) def rig_bones(self): - self.make_constraint(self.mch, 'COPY_LOCATION', self.ctrl, space='LOCAL', invert_xyz=(True,)*3) + self.make_constraint( + self.mch, 'COPY_LOCATION', self.ctrl, space='LOCAL', invert_xyz=(True,)*3) def generate_widgets(self): - create_pivot_widget(self.obj, self.ctrl, axis_size=self.widget_axis, cap_size=self.widget_cap, square=self.widget_square) + create_pivot_widget(self.obj, self.ctrl, axis_size=self.widget_axis, + cap_size=self.widget_cap, square=self.widget_square) |