This tool started as a couple smaller scripts that i often would use as plane text in the script editor and change a coulpe variables as needed for my current task, but since that is a bit tedious i opted to make it more of a collection of tools in a menu i could always have open when rigging for easy acces.
My goal was to learn more about scripting with python in maya and tool development to automate and speed up the rigging process.
Automated FK setup. The way this works is that I create a empty group and circle, rename them based on the joint name and add "_ctrl" / "_fixGroup", then match the groups transforms to the joint. Orinet constraints the controller to the joint then parent constraints the fixGroup to the parent joint if there is one.
All the controllers and fixGroups are then placed in a FK controller holder group for a cleaner outliner. This works from the selected joint and down in the hierarcy for one or more chains at a time.
Automated IK setup, this works in a very similar way to the FK setup, differences would be the rotate plane solder inbetween the selected joints, if only one joint is selected the solver will end at the root joint of the chain. The pole vector is placed at the parent of the first selected joint.
I made some controller curves and a script that gets the CV positions and outputs that as code that i then can use as a preset later on in my script for furure use.
I also made a shape replacement function so i can use this in conjunction with the other tools in my toolset.
Since i find is somewhat tedious to create and rename joints i felt the need to automate this. The joints will be named "fk_joint#_jnt" by defaul if nothing else is set by the user. One particular pro of this is that everything is named by the same standard which makes it easy to rename later if needed.
The space switch function lets you change the parent of the control on the fly via a dropdown list in the channelbox that can be key-framed.
It works by selecting the control you want the switch on then the drivers and it will create a new "space switch group" containing the controller that is then parent constrained to the driving objects and change the weight in the constraint depending on what is active in the list.
I think this was a good experience to write everything from scratch but in the future i should probably use QT to have more time to write functions and not spend so much time tinkering with the layout of things.