Code Snipets
Table of Contents
IMPORT MT
import Mutant_Tools
import Mutant_Tools.Utils.Rigging
from Mutant_Tools.Utils.Rigging import main_mutant
imp.reload(Mutant_Tools.Utils.Rigging.main_mutant)
mt = main_mutant.Mutant()
nc, curve_data, setup = mt.import_configs()
GET ATTRS
CREATE ATTRS
ctrl_size = cmds.getAttr('{}.CtrlSize'.format(config))
ctrl_type = cmds.getAttr('{}.CtrlType'.format(config), asString = True)
rfl_temp_attr = mt.new_attr(input= ik_attrs_shape, name = attr, min = -100 , max = 100, default = 0)
show_gimbal_attr = mt.new_enum(input= ctrl, name = 'Gimbal', enums = 'Hide:Show')
CONNECT MULTIPLY DIVIDE NODES
mt.connect_md_node(in_x1=up_limit, in_x2=-1, out_x=upper_pivot_joint+'.minRotLimit.minRotZLimit', mode='multiply')
CLEAN ATTRS IN CTRLS
mt.hide_attr(input=jaw_ctrl, s=True)
CREATE CTRLS
ctrl = mt.curve( input=joint,
type='cube',
rename=True,
custom_name=True,
name=joint.replace(nc['joint'], nc['ctrl']),
size=size)
mt.assign_color(color=color)
root_grp = mt.root_grp()[0]
mt.match(root_grp, joint, r=True, t=True)
cmds.parentConstraint(ctrl, joint)
CLEAN THE RIG AT THE END
SET COLORS
clean_ctrl_grp = cmds.group(em=True, name = name + nc['ctrl'] + nc['group'])
clean_rig_grp = cmds.group(em=True, name = name + '_Rig' + nc['group'])
cmds.parent(clean_rig_grp, '{}{}'.format(setup['rig_groups']['misc'], nc['group']))
cmds.parent(clean_ctrl_grp, setup['base_groups']['control'] + nc['group'])
if side_guide.startswith(nc['right']):
color='red'
elif side_guide.startswith(nc['left']):
color='blue'
else:
color = 'yellow'
mt.assign_color(color=color)
MIRROR SYSTEMS
#check if the mirror attrs to Only_Right or mirror to True
if cmds.getAttr('{}.Mirror'.format(config), asString = True) == 'Right_Only':
mirror_ctrl_grp = mt.mirror_group(clean_ctrl_grp, world = True)
cmds.parentConstraint(block_parent, ikfk['ik_fk'][5][0] , mo = True)
cmds.parentConstraint(block_parent, cmds.listRelatives(ikfk['ik_fk'][4][2], p=True) , mo = True)
clean_ctrl_grp = mirror_ctrl_grp
elif cmds.getAttr('{}.Mirror'.format(config), asString = True) == 'True':
''
if str(side_guide).startswith(nc['right']) :
mirror_ctrl_grp = mt.mirror_group(clean_ctrl_grp, world = True)
cmds.parentConstraint(block_parent, ikfk['ik_fk'][5][0] , mo = True)
cmds.parentConstraint(block_parent, cmds.listRelatives(ikfk['ik_fk'][4][2], p=True) , mo = True)
cmds.orientConstraint(block_parent, ikfk['upper_twist']['no_rotate'] , mo = True)
clean_ctrl_grp = mirror_ctrl_grp
else:
cmds.parentConstraint(block_parent, ikfk['ik_fk'][5][0] , mo = True)
cmds.parentConstraint(block_parent, cmds.listRelatives(ikfk['ik_fk'][4][2], p=True) , mo = True)
cmds.orientConstraint(block_parent, ikfk['upper_twist']['no_rotate'] , mo = True)
else: #only left side
cmds.parentConstraint(block_parent, ikfk['ik_fk'][5][0] , mo = True)
cmds.parentConstraint(block_parent, cmds.listRelatives(ikfk['ik_fk'][4][2], p=True) , mo = True)
cmds.orientConstraint(block_parent, ikfk['upper_twist']['no_rotate'] , mo = True)
CREATE BIND JOINTS
# create bind joints
bind_jnt_grp = '{}{}'.format(setup['rig_groups']['bind_joints'], nc['group'])
for jnt in tweek_joints:
cmds.select(cl=True)
bind_joint = cmds.joint(n=jnt.replace(nc['joint'], nc['joint_bind']))
cmds.parentConstraint(jnt, bind_joint)
cmds.scaleConstraint(jnt, bind_joint)
cmds.setAttr('{}.radius'.format(bind_joint), 1.5)
cmds.parent(bind_joint, bind_jnt_grp)
VIS SWITCHES
#vis
attrs_position = cmds.getAttr('{}.SetAttrsPosition'.format(config), asString=True)
if attrs_position == 'new_locator':
guide_attrs_position = cmds.spaceLocator(n=name + '_Attrs' + nc['locator'])[0]
mt.line_attr(input=guide_attrs_position, name='Nose_Vis')
main_ctrl_attr = mt.new_enum(input=guide_attrs_position, name='noseMainCtrls', enums='Hide:Show')
mid_ctrl_attr = mt.new_enum(input=guide_attrs_position, name='noseMidCtrls', enums='Hide:Show')
show_tweeks_attr = mt.new_enum(input=guide_attrs_position, name='noseTweekCtrls', enums='Hide:Show')
for ctrl in main_controllers:
shape = cmds.listRelatives(ctrl, s=True)[0]
cmds.connectAttr(main_ctrl_attr, '{}.v'.format(shape))
for ctrl in sec_ctrls:
shape = cmds.listRelatives(ctrl, s=True)[0]
cmds.connectAttr(mid_ctrl_attr, '{}.v'.format(shape))
for ctrl in tweek_controllers:
shape = cmds.listRelatives(ctrl, s=True)[0]
cmds.connectAttr(show_tweeks_attr, '{}.v'.format(shape))
SHARED LOCATOR ATTRS
all_controllers = [chest_ctrl, belly_ctrl, base_ctrl, base_ik_ctrl] + spine_ik_ctrls
for ctrl in all_controllers:
cmds.select(ctrl)
if cmds.objectType(ctrl) == 'transform':
spine_attrs_loc = mt.shape_with_attr(input='', obj_name='{}_Attrs'.format(name), attr_name='').split('.')[0]
print(spine_attrs_loc)
SPACE SWITCHES
#Space switches
# compatible with older versions without spaces
if cmds.attributeQuery('SpaceSwitches', n=config, exists=True):
space_parents = cmds.getAttr('{}.SpaceSwitches'.format(config))
else:
space_parents = "Global_Ctrl:BlockParent"
if cmds.objExists('COG_Ctrl'):
space_parents = "Global_Ctrl:COG_Ctrl:BlockParent"
#Add shared loc
all_controllers = eyes_ctrls + [main_eye_ctrl]
for ctrl in all_controllers:
cmds.select(ctrl)
if cmds.objectType(ctrl) == 'transform':
spine_attrs_loc = mt.shape_with_attr(input='', obj_name='{}_Attrs'.format(name), attr_name='Test').split('.')[0]
mel.eval('catch (`deleteAttr -attribute "Test" "{}|Spine_Attrs_Loc"`);'.format(main_eye_ctrl))
space_attr = mt.new_enum(input=spine_attrs_loc, name='SpaceSwitch', enums=space_parents)
#add attrs
ctrl = main_eye_ctrl
offset = main_eye_root
root, auto = mt.root_grp(input=ctrl, autoRoot=True)
spaces_grp = cmds.group(em=True, n=name+'SpaceSwitches' + nc['group'])
print('SpaceSwitches:', space_parents)
space_parents = space_parents.replace('BlockParent', block_parent)
spaces = space_parents.split(':')
for num, space in enumerate(spaces):
space_loc = cmds.spaceLocator(n=name + space + '_SpaceSwitch' + nc['locator'])[0]
cmds.parent(space_loc, spaces_grp)
cmds.parentConstraint(space, space_loc, mo=True)[0]
oc = cmds.orientConstraint(space_loc, auto, mo=True)[0]
cmds.setAttr('{}.interpType'.format(oc), 2)
condition_node = cmds.shadingNode('condition', asUtility=True, n=name + space + nc['condition'])
cmds.setAttr('{}.operation'.format(condition_node), 0)
cmds.setAttr('{}.colorIfTrueR'.format(condition_node), 1)
cmds.setAttr('{}.colorIfFalseR'.format(condition_node), 0)
cmds.setAttr('{}.secondTerm'.format(condition_node), num)
cmds.connectAttr(space_attr, '{}.firstTerm'.format(condition_node))
cmds.connectAttr('{}.outColorR'.format(condition_node), '{}.{}W{}'.format(oc, space_loc, num))
cmds.parent(spaces_grp, clean_rig_grp)
Old Blocks Compatibility
if cmds.attributeQuery('CreateFingersAttrs', n=config, exists=True):
create_fingers_attrs = cmds.getAttr(config + '.CreateFingersAttrs')
else:
create_fingers_attrs = True