diff options
author | Alexander Gavrilov <angavrilov@gmail.com> | 2019-10-21 16:27:22 +0300 |
---|---|---|
committer | Alexander Gavrilov <angavrilov@gmail.com> | 2019-10-22 19:26:51 +0300 |
commit | 1d656f36618e5f2d5b1f7d0ff86e87ca6e705be4 (patch) | |
tree | 1559c5840f88810ea8c9212ba30210094263970a /rigify | |
parent | bde1bc48cd7a57e6187b5849d6208a4816102f01 (diff) |
Rigify: clear custom pivots in IK->FK snap and use in widget placement.
Diffstat (limited to 'rigify')
-rw-r--r-- | rigify/rigs/limbs/leg.py | 6 | ||||
-rw-r--r-- | rigify/rigs/limbs/limb_rigs.py | 19 | ||||
-rw-r--r-- | rigify/rigs/limbs/paw.py | 2 | ||||
-rw-r--r-- | rigify/rigs/spines/basic_spine.py | 4 | ||||
-rw-r--r-- | rigify/rigs/spines/basic_tail.py | 5 | ||||
-rw-r--r-- | rigify/rigs/spines/spine_rigs.py | 9 | ||||
-rw-r--r-- | rigify/utils/bones.py | 14 | ||||
-rw-r--r-- | rigify/utils/components.py | 8 |
8 files changed, 44 insertions, 23 deletions
diff --git a/rigify/rigs/limbs/leg.py b/rigify/rigs/limbs/leg.py index 309688e3..35e68f58 100644 --- a/rigify/rigs/limbs/leg.py +++ b/rigify/rigs/limbs/leg.py @@ -121,10 +121,10 @@ class Rig(BaseLimbRig): # IK controls def get_extra_ik_controls(self): + controls = super().get_extra_ik_controls() + [self.bones.ctrl.heel] if self.pivot_type == 'ANKLE_TOE': - return [self.bones.ctrl.heel, self.bones.ctrl.ik_spin] - else: - return [self.bones.ctrl.heel] + controls += [self.bones.ctrl.ik_spin] + return controls def make_ik_control_bone(self, orgs): name = self.copy_bone(orgs[2], make_derived_name(orgs[2], 'ctrl', '_ik')) diff --git a/rigify/rigs/limbs/limb_rigs.py b/rigify/rigs/limbs/limb_rigs.py index c195a9cb..493ba33a 100644 --- a/rigify/rigs/limbs/limb_rigs.py +++ b/rigify/rigs/limbs/limb_rigs.py @@ -23,7 +23,7 @@ import json from ...utils.animation import add_generic_snap_fk_to_ik, add_fk_ik_snap_buttons from ...utils.rig import connected_children_names -from ...utils.bones import BoneDict, put_bone, compute_chain_x_axis, align_bone_orientation +from ...utils.bones import BoneDict, put_bone, compute_chain_x_axis, align_bone_orientation, set_bone_widget_transform from ...utils.naming import strip_org, make_derived_name from ...utils.layers import ControlLayersOption from ...utils.misc import pairwise_nozip, padnone, map_list @@ -324,13 +324,14 @@ class BaseLimbRig(BaseRig): # IK controls def get_extra_ik_controls(self): - return [] + if self.component_ik_pivot: + return [self.component_ik_pivot.control] + else: + return [] def get_all_ik_controls(self): ctrl = self.bones.ctrl controls = [ctrl.ik_base, ctrl.ik_pole, ctrl.ik] - if self.component_ik_pivot: - controls.append(self.component_ik_pivot.control) return controls + self.get_extra_ik_controls() @stage.generate_bones @@ -411,9 +412,13 @@ class BaseLimbRig(BaseRig): @stage.generate_widgets def make_ik_control_widgets(self): - self.make_ik_base_widget(self.bones.ctrl.ik_base) - self.make_ik_pole_widget(self.bones.ctrl.ik_pole) - self.make_ik_ctrl_widget(self.bones.ctrl.ik) + ctrl = self.bones.ctrl + + set_bone_widget_transform(self.obj, ctrl.ik, self.get_ik_control_output()) + + self.make_ik_base_widget(ctrl.ik_base) + self.make_ik_pole_widget(ctrl.ik_pole) + self.make_ik_ctrl_widget(ctrl.ik) def make_ik_base_widget(self, ctrl): if self.main_axis == 'x': diff --git a/rigify/rigs/limbs/paw.py b/rigify/rigs/limbs/paw.py index 8e9d2480..a13348d1 100644 --- a/rigify/rigs/limbs/paw.py +++ b/rigify/rigs/limbs/paw.py @@ -84,7 +84,7 @@ class Rig(BaseLimbRig): # IK controls def get_extra_ik_controls(self): - return [self.bones.ctrl.heel] + return super().get_extra_ik_controls() + [self.bones.ctrl.heel] def make_ik_control_bone(self, orgs): name = self.copy_bone(orgs[3], make_derived_name(orgs[2], 'ctrl', '_ik')) diff --git a/rigify/rigs/spines/basic_spine.py b/rigify/rigs/spines/basic_spine.py index 09d9b5d2..c2905463 100644 --- a/rigify/rigs/spines/basic_spine.py +++ b/rigify/rigs/spines/basic_spine.py @@ -27,7 +27,7 @@ from mathutils import Matrix from ...utils.errors import MetarigError from ...utils.layers import ControlLayersOption from ...utils.naming import strip_org, make_deformer_name, make_mechanism_name, make_derived_name -from ...utils.bones import BoneDict, put_bone, align_bone_to_axis, align_bone_orientation +from ...utils.bones import BoneDict, put_bone, align_bone_to_axis, align_bone_orientation, set_bone_widget_transform from ...utils.widgets import adjust_widget_transform_mesh from ...utils.widgets_basic import create_circle_widget from ...utils.misc import map_list @@ -123,7 +123,7 @@ class Rig(BaseSpineRig): shape_bone = self.get_bone(wgt_mch) is_horizontal = abs(shape_bone.z_axis.normalized().y) < 0.7 - self.get_bone(ctrl).custom_shape_transform = shape_bone + set_bone_widget_transform(self.obj, ctrl, wgt_mch) obj = create_circle_widget( self.obj, ctrl, diff --git a/rigify/rigs/spines/basic_tail.py b/rigify/rigs/spines/basic_tail.py index 845c3ca3..716116bf 100644 --- a/rigify/rigs/spines/basic_tail.py +++ b/rigify/rigs/spines/basic_tail.py @@ -23,7 +23,8 @@ import bpy from itertools import count from ...utils.naming import strip_org, make_derived_name -from ...utils.bones import put_bone, flip_bone, is_same_position, connect_bbone_chain_handles, align_bone_orientation +from ...utils.bones import put_bone, flip_bone, is_same_position, connect_bbone_chain_handles +from ...utils.bones import align_bone_orientation, set_bone_widget_transform from ...utils.widgets_basic import create_circle_widget from ...utils.layers import ControlLayersOption from ...utils.misc import map_list @@ -69,7 +70,7 @@ class Rig(BaseHeadTailRig): @stage.generate_widgets def make_master_control_widget(self): bone = self.bones.ctrl.master - self.get_bone(bone).custom_shape_transform = self.get_bone(self.bones.ctrl.tweak[-1]) + set_bone_widget_transform(self.obj, bone, self.bones.ctrl.tweak[-1]) create_ballsocket_widget(self.obj, bone, size=0.7) #################################################### diff --git a/rigify/rigs/spines/spine_rigs.py b/rigify/rigs/spines/spine_rigs.py index cf563994..9f62595a 100644 --- a/rigify/rigs/spines/spine_rigs.py +++ b/rigify/rigs/spines/spine_rigs.py @@ -24,7 +24,7 @@ from itertools import count from ...utils.layers import ControlLayersOption from ...utils.naming import make_derived_name -from ...utils.bones import align_bone_orientation, align_bone_to_axis, put_bone +from ...utils.bones import align_bone_orientation, align_bone_to_axis, put_bone, set_bone_widget_transform from ...utils.widgets_basic import create_cube_widget from ...utils.switch_parent import SwitchParentBuilder from ...utils.components import CustomPivotControl @@ -123,10 +123,9 @@ class BaseSpineRig(TweakChainRig): @stage.generate_widgets def make_master_control_widget(self): - create_cube_widget( - self.obj, self.bones.ctrl.master, - radius=0.5, - ) + master = self.bones.ctrl.master + set_bone_widget_transform(self.obj, master, self.get_master_control_output()) + create_cube_widget(self.obj, master, radius=0.5) #################################################### # Tweak bones diff --git a/rigify/utils/bones.py b/rigify/utils/bones.py index 6a09cee1..854d4428 100644 --- a/rigify/utils/bones.py +++ b/rigify/utils/bones.py @@ -657,3 +657,17 @@ def align_bone_to_axis(obj, bone_name, axis, *, length=None, roll=0, flip=False) bone_e.tail = bone_e.head + vec bone_e.roll = roll + + +def set_bone_widget_transform(obj, bone_name, transform_bone, use_size=True, scale=1.0): + assert obj.mode != 'EDIT' + + bone = obj.pose.bones[bone_name] + + if transform_bone and transform_bone != bone_name: + bone.custom_shape_transform = obj.pose.bones[transform_bone] + else: + bone.custom_shape_transform = None + + bone.use_custom_shape_bone_size = use_size + bone.custom_shape_scale = scale diff --git a/rigify/utils/components.py b/rigify/utils/components.py index b99e183f..5c1ebcb6 100644 --- a/rigify/utils/components.py +++ b/rigify/utils/components.py @@ -17,7 +17,8 @@ class CustomPivotControl(RigComponent): def __init__( self, rig, id_name, org_bone, *, - name=None, parent=None, position=None, matrix=None, scale=1.0, + 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, ): @@ -30,6 +31,7 @@ class CustomPivotControl(RigComponent): self.parent = parent self.scale = scale or 1 + self.scale_mch = scale_mch or (self.scale * 0.7) self.move_to = move_to self.align_to = align_to self.snap_to = snap_to @@ -51,7 +53,7 @@ class CustomPivotControl(RigComponent): 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 * 0.7) + 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) @@ -61,7 +63,7 @@ class CustomPivotControl(RigComponent): if self.snap_to: bone = force_lazy(self.snap_to) copy_bone_position(self.obj, bone, self.ctrl, scale=self.scale) - copy_bone_position(self.obj, bone, self.mch, scale=self.scale * 0.7) + copy_bone_position(self.obj, bone, self.mch, scale=self.scale_mch) if self.move_to: pos = self.get_bone(force_lazy(self.move_to)).head |