diff options
Diffstat (limited to 'rigify/rigs/limbs/ui.py')
-rw-r--r-- | rigify/rigs/limbs/ui.py | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/rigify/rigs/limbs/ui.py b/rigify/rigs/limbs/ui.py new file mode 100644 index 00000000..948b5719 --- /dev/null +++ b/rigify/rigs/limbs/ui.py @@ -0,0 +1,166 @@ +script_arm = """ +controls = [%s] +tweaks = [%s] +ik_ctrl = [%s] +fk_ctrl = '%s' +parent = '%s' +hand_fk = '%s' +pole = '%s' + +# IK/FK Switch on all Control Bones +if is_selected( controls ): + layout.prop( pose_bones[parent], '["%s"]', slider = True ) + props = layout.operator("pose.rigify_arm_fk2ik_" + rig_id, text="Snap FK->IK (" + fk_ctrl + ")") + props.uarm_fk = controls[1] + props.farm_fk = controls[2] + props.hand_fk = controls[3] + props.uarm_ik = controls[0] + props.farm_ik = ik_ctrl[1] + props.hand_ik = controls[4] + props = layout.operator("pose.rigify_arm_ik2fk_" + rig_id, text="Snap IK->FK (" + fk_ctrl + ")") + props.uarm_fk = controls[1] + props.farm_fk = controls[2] + props.hand_fk = controls[3] + props.uarm_ik = controls[0] + props.farm_ik = ik_ctrl[1] + props.hand_ik = controls[4] + props.pole = pole + props.main_parent = parent + + +# BBone rubber hose on each Respective Tweak +for t in tweaks: + if is_selected( t ): + layout.prop( pose_bones[ t ], '["%s"]', slider = True ) + +# IK Stretch and pole_vector on IK Control bone +if is_selected( ik_ctrl ) or is_selected(parent): + layout.prop( pose_bones[ parent ], '["%s"]', slider = True ) + layout.prop( pose_bones[ parent ], '["%s"]') + +# FK limb follow +if is_selected( fk_ctrl ) or is_selected(parent): + layout.prop( pose_bones[ parent ], '["%s"]', slider = True ) +""" + +script_leg = """ +controls = [%s] +tweaks = [%s] +ik_ctrl = [%s] +fk_ctrl = '%s' +parent = '%s' +foot_fk = '%s' +pole = '%s' + +# IK/FK Switch on all Control Bones +if is_selected( controls ): + layout.prop( pose_bones[parent], '["%s"]', slider = True ) + props = layout.operator("pose.rigify_leg_fk2ik_" + rig_id, text="Snap FK->IK (" + fk_ctrl + ")") + props.thigh_fk = controls[1] + props.shin_fk = controls[2] + props.foot_fk = controls[3] + props.mfoot_fk = controls[7] + props.thigh_ik = controls[0] + props.shin_ik = ik_ctrl[1] + props.foot_ik = ik_ctrl[2] + props.mfoot_ik = ik_ctrl[2] + props = layout.operator("pose.rigify_leg_ik2fk_" + rig_id, text="Snap IK->FK (" + fk_ctrl + ")") + props.thigh_fk = controls[1] + props.shin_fk = controls[2] + props.foot_fk = controls[3] + props.mfoot_fk = controls[7] + props.thigh_ik = controls[0] + props.shin_ik = ik_ctrl[1] + props.foot_ik = controls[6] + props.pole = pole + props.footroll = controls[5] + props.mfoot_ik = ik_ctrl[2] + props.main_parent = parent + +# BBone rubber hose on each Respective Tweak +for t in tweaks: + if is_selected( t ): + layout.prop( pose_bones[ t ], '["%s"]', slider = True ) + +# IK Stretch and pole_vector on IK Control bone +if is_selected( ik_ctrl ) or is_selected(parent): + layout.prop( pose_bones[ parent ], '["%s"]', slider = True ) + layout.prop( pose_bones[ parent ], '["%s"]') + +# FK limb follow +if is_selected( fk_ctrl ) or is_selected(parent): + layout.prop( pose_bones[ parent ], '["%s"]', slider = True ) +""" + +def create_script( bones, limb_type=None): + # All ctrls have IK/FK switch + controls = [bones['ik']['ctrl']['limb']] + bones['fk']['ctrl'] + controls += bones['ik']['ctrl']['terminal'] + controls += [bones['fk']['mch']] + controls += [bones['main_parent']] + + controls_string = ", ".join(["'" + x + "'" for x in controls]) + + # All tweaks have their own bbone prop + tweaks = bones['tweak']['ctrl'][1:-1] + tweaks_string = ", ".join(["'" + x + "'" for x in tweaks]) + + # IK ctrl has IK stretch + ik_ctrl = [ bones['ik']['ctrl']['terminal'][-1] ] + ik_ctrl += [ bones['ik']['mch_ik'] ] + ik_ctrl += [ bones['ik']['mch_target'] ] + + ik_ctrl_string = ", ".join(["'" + x + "'" for x in ik_ctrl]) + + if 'ik_target' in bones['ik']['ctrl'].keys(): + pole = bones['ik']['ctrl']['ik_target'] + else: + pole = '' + + if limb_type == 'arm': + return script_arm % ( + controls_string, + tweaks_string, + ik_ctrl_string, + bones['fk']['ctrl'][0], + bones['main_parent'], + bones['fk']['ctrl'][-1], + pole, + 'IK/FK', + 'rubber_tweak', + 'IK_Stretch', + 'pole_vector', + 'FK_limb_follow' + ) + + elif limb_type == 'leg': + return script_leg % ( + controls_string, + tweaks_string, + ik_ctrl_string, + bones['fk']['ctrl'][0], + bones['main_parent'], + bones['fk']['ctrl'][-1], + pole, + 'IK/FK', + 'rubber_tweak', + 'IK_Stretch', + 'pole_vector', + 'FK_limb_follow' + ) + + elif limb_type == 'paw': + return script_leg % ( + controls_string, + tweaks_string, + ik_ctrl_string, + bones['fk']['ctrl'][0], + bones['main_parent'], + bones['fk']['ctrl'][-1], + pole, + 'IK/FK', + 'rubber_tweak', + 'IK_Stretch', + 'pole_vector', + 'FK_limb_follow' + ) |