From 74ddbc7ffb633f191bd610ddea49474986019ac5 Mon Sep 17 00:00:00 2001 From: jeffreytsai1004 Date: Mon, 24 Nov 2025 23:53:49 +0800 Subject: [PATCH] Update ik_fk_switcher.py --- .../scripts/animation_tools/ik_fk_switcher.py | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/2023/scripts/animation_tools/ik_fk_switcher.py b/2023/scripts/animation_tools/ik_fk_switcher.py index 7cd261c..9fb5b34 100644 --- a/2023/scripts/animation_tools/ik_fk_switcher.py +++ b/2023/scripts/animation_tools/ik_fk_switcher.py @@ -287,6 +287,7 @@ def get_original_fk_controls(): # ---------- DONE fk_ctrls = cmds.ls(sl=True) if len(fk_ctrls) != 3: assist_message("Incorrect number of controls selected. To apply an IK setup, you need to select 3 FK controls, in order of parent to child.", 4000) + return None cmds.select(cl=True) return fk_ctrls @@ -314,7 +315,10 @@ def create_ik_handle(parent_jnt, child_jnt, ik_ctrl): # ---------- DONE def create_temp_ik_controls(): # DONE # STORES ORIGINAL SELECTED FK CONTROLS INTO VARIABLES - parent_ctrl, middle_ctrl, child_ctrl = fk_ctrls = get_original_fk_controls() + fk_ctrls = get_original_fk_controls() + if fk_ctrls is None: + return None + parent_ctrl, middle_ctrl, child_ctrl = fk_ctrls check_if_setup_exists([parent_ctrl, middle_ctrl, child_ctrl]) check_anim_layer(fk_ctrls) @@ -425,7 +429,10 @@ def _fk_to_ik_impl(): timeline_start, timeline_end, specific_timeline_mode = get_timeline_range() check_negative_time_range(timeline_start, timeline_end) ###### CREATE CONTROLS ###### - [parent_ctrl, middle_ctrl, child_ctrl], [parent_jnt, middle_jnt, child_jnt], [ik_ctrl, pole_vector_ctrl] = fk_ctrls, ik_jnts, ik_ctrls = create_temp_ik_controls() + result = create_temp_ik_controls() + if result is None: + return + [parent_ctrl, middle_ctrl, child_ctrl], [parent_jnt, middle_jnt, child_jnt], [ik_ctrl, pole_vector_ctrl] = fk_ctrls, ik_jnts, ik_ctrls = result ###### REPOSITION CONTROLS ###### temp_constraints, ik_orient_constraint = set_temp_ik_controls_position(fk_ctrls, ik_jnts, ik_ctrls) @@ -482,6 +489,7 @@ def get_original_ik_controls(): ik_ctrls = cmds.ls(sl=True) if len(ik_ctrls) != 2: assist_message("Incorrect number of controls selected. To apply an FK setup, you need to select the Pole Vector first and then the IK Control, in order.", 4000) + return None cmds.select(cl=True) return ik_ctrls @@ -512,7 +520,10 @@ def get_ik_handle_joints(ik_handle): def get_original_controls(): # SEPARATES THE SELECTED CONTROLS INTO THEIR OWN VARIABLES - pole_vector, ik_ctrl = get_original_ik_controls() + ik_ctrls = get_original_ik_controls() + if ik_ctrls is None: + return None + pole_vector, ik_ctrl = ik_ctrls check_if_setup_exists([pole_vector, ik_ctrl]) ik_handle = get_ik_handle(pole_vector) parent_jnt, middle_jnt = get_ik_handle_joints(ik_handle) @@ -593,7 +604,10 @@ def _ik_to_fk_impl(): timeline_start, timeline_end, specific_timeline_mode = get_timeline_range() check_negative_time_range(timeline_start, timeline_end) - pole_vector, ik_ctrl, ik_handle, parent_jnt, middle_jnt = get_original_controls() + result = get_original_controls() + if result is None: + return + pole_vector, ik_ctrl, ik_handle, parent_jnt, middle_jnt = result check_anim_layer([pole_vector, ik_ctrl]) delete_visibility_keys(pole_vector, ik_ctrl) @@ -1260,7 +1274,10 @@ def fk_to_ik(): timeline_start, timeline_end, specific_timeline_mode = get_timeline_range() check_negative_time_range(timeline_start, timeline_end) ###### CREATE CONTROLS ###### - [parent_ctrl, middle_ctrl, child_ctrl], [parent_jnt, middle_jnt, child_jnt], [ik_ctrl, pole_vector_ctrl] = fk_ctrls, ik_jnts, ik_ctrls = create_temp_ik_controls() + result = create_temp_ik_controls() + if result is None: + return + [parent_ctrl, middle_ctrl, child_ctrl], [parent_jnt, middle_jnt, child_jnt], [ik_ctrl, pole_vector_ctrl] = fk_ctrls, ik_jnts, ik_ctrls = result ###### REPOSITION CONTROLS ###### temp_constraints, ik_orient_constraint = set_temp_ik_controls_position(fk_ctrls, ik_jnts, ik_ctrls) @@ -1440,7 +1457,10 @@ def ik_to_fk(): timeline_start, timeline_end, specific_timeline_mode = get_timeline_range() check_negative_time_range(timeline_start, timeline_end) - pole_vector, ik_ctrl, ik_handle, parent_jnt, middle_jnt = get_original_controls() + result = get_original_controls() + if result is None: + return + pole_vector, ik_ctrl, ik_handle, parent_jnt, middle_jnt = result check_anim_layer([pole_vector, ik_ctrl]) delete_visibility_keys(pole_vector, ik_ctrl)