Update ik_fk_switcher.py

This commit is contained in:
2025-11-24 23:53:49 +08:00
parent 303b19d28d
commit 74ddbc7ffb

View File

@@ -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)