I'd like to run some rigify operators. As you might know, the operators are "unique" for each armature because of their rig_id. If I have the rig_id = "i8fj1rbnfbd76bf5" then it takes the following syntax to call the operators:

                                                  fk_bones='["thigh_fk.L", "shin_fk.L", "foot_fk.L", "toe.L"]',
                                                  ik_bones='["thigh_ik.L", "MCH-shin_ik.L", "MCH-thigh_ik_target.L"]', 
                                                  ctrl_bones='["thigh_ik.L", "foot_ik.L", "thigh_ik_target.L"]', 
                                                  extra_ctrls='["foot_heel_ik.L", "foot_spin_ik.L"]')

                                                  fk_bones='["upper_arm_fk.L", "forearm_fk.L", "hand_fk.L"]',
                                                  ik_bones='["upper_arm_ik.L", "MCH-forearm_ik.L", "MCH-upper_arm_ik_target.L"]', 
                                                  ctrl_bones= '["upper_arm_ik.L", "hand_ik.L", "upper_arm_ik_target.L"]', 

I was thinking of concatenating the id with the rest of the syntax and converting that into an operator call that I can execute. Is that possible or what alternatives do I have?


I think you can use Python's exec() or eval() to do this, if the operator is already registered

import bpy
rig_id = "i8fj1rbnfbd76bf5"
op = eval("bpy.ops.pose.rigify_limb_ik2fk_" + rig_id)
# or with exec
# exec("op = bpy.ops.pose.rigify_limb_ik2fk_" + rig_id)

# now you can call op
op(prop_bone='upper_arm_parent.L') # and rest of arguments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.