EwanRigTools
Thu Sep 12 2024 07:07:11 GMT+0000 (Coordinated Universal Time)
Saved by @eugene98
from maya import cmds, OpenMaya
def ui():
if cmds.workspaceControl("Rig Tools",ex = True):
cmds.deleteUI("Rig Tools")
myWin = cmds.workspaceControl("Rig Tools")
myWin = cmds.tabLayout()
cmds.scrollLayout(': : : : : : : : : : : : : : : : : : : : : : : : Tools : : : : : : : : : : : : : : : : : : : : : : : :',hst=16,vst=16,w=340)
cmds.columnLayout(adj = True)
cmds.showWindow("Rig Tools")
cmds.frameLayout(label='Rig Help', collapsable=True, collapse=True,w=330)
cmds.rowColumnLayout(nc=1)
cmds.separator(vis=False)
cmds.text('Help to create locator, group, joint, parent and scale constraint.',al='left')
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout(nc=5)
cmds.button('1',vis=False,w=20)
cmds.button(label='Create Locators', command=create_locator_on_selection,w=139)
cmds.button('2',vis=False)
cmds.button(label="Create Group", command=create_group_on_selection,w=139)
cmds.button('3',vis=False)
cmds.separator(h=15,vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.button('4',vis=False)
cmds.button("Create Joint",c = "jnt()")
cmds.button('6',vis=False)
cmds.button("Parent Scale Constraint",c="parentscale()")
cmds.setParent('..')
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
#Controller tab
cmds.frameLayout(label='Controller', collapsable=True, collapse=True)
cmds.rowColumnLayout(nr=4)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
cmds.frameLayout(label='Shape', collapsable=True, collapse=True,w=310)
cmds.rowColumnLayout( nc=1 )
cmds.rowColumnLayout(nc=1)
cmds.separator(vis=False)
cmds.text('Help to create different type of controller.',al='left')
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout(nc=5)
cmds.button(w=20,vis=False)
cmds.button("cube",command=create_cube_on_selection,w = 130)
cmds.button(w=20,vis=False)
cmds.button("circle",command=create_circle_on_selection,w = 130)
cmds.button(w=20,vis=False)
cmds.separator(h=15,vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.button(w=20,vis=False)
cmds.button("square",command=create_square_on_selection)
cmds.button(w=20,vis=False)
cmds.button("cross",command=create_x_on_selection)
cmds.button(w=20,vis=False)
cmds.separator(h=15,vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.button(w=20,vis=False)
cmds.button("pyramid",command=create_pyramid_on_selection)
cmds.button(w=20,vis=False)
cmds.button("trianglecube",command=create_trianglecube_on_selection)
cmds.setParent('..')
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
#Color tab
cmds.frameLayout(label='Color', collapsable=True, collapse=True,w=310)
cmds.rowColumnLayout(nc=1)
cmds.separator(vis=False)
cmds.text('Help to change color of selected controller.',align='left')
cmds.separator(h=10,vis=False)
cmds.gridLayout(nr=1,nc=10,cellWidthHeight=(31,20))
backgroundColor = [((0.348,0.057,0.064),"DarkRed()"),((0.081,0.115,0.404),"darkBlue()"),((0.100,0.031,3.658),"blue()"),((0.052,0.013,0.114),"black()"),((0.531,0.091,0.768),"purple()"),((0.288,0.145,0.088),"brown()"),((0.096,0.058,0.049),"darkBrown()"),((0.333,0.089,0.016),"darkOrange()"),((1.240,0.106,0.018),"red()"),((0.294,5.113,0.000),"lightGreen()"),((8.423,2.724,0.000),"yellow()"),((0.423,1.213,8.659),"lightBlue()"),((2.320,0.606,0.574),"pink()"),((1.094,0.572,0.285),"lightOrange()"),((0.175,0.402,0.174),"darkGreen()"),((0.443,0.469,0.104),"darkYellow()"),((0.210,0.448,0.198),"green()"),((0.350,0.109,0.219),"darkPink()"),((0.208,0.096,0.447),"darkPurple()"),((0.147,0.211,0.456),"navy()")]
for each in backgroundColor:
cmds.iconTextButton(bgc=each[0],c=each[1])
cmds.setParent('..')
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
#Lock attributes tab
cmds.frameLayout(label='Attributes Lock / Unlock', collapsable=True, collapse=True,w=310)
cmds.rowColumnLayout(nc=1)
cmds.separator(vis=False)
cmds.text('Help to lock or unlock attributes of selected controller.',align='left')
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout(nc=5)
cmds.button('1',vis=False,w=17)
cmds.button("lock / unlock translate",c = "LockTranslate()",w=134)
cmds.button('2',vis=False,w=17)
cmds.button("lock / unlock rotate",c = "LockRotate()",w=134)
cmds.button('3',vis=False,w=17)
cmds.separator(h=15,vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.button('4',vis=False,w=17)
cmds.button("lock / unlock scale",c = "LockScale()")
cmds.button('5',vis=False,w=17)
cmds.button("lock / unlock visibility",c = "LockVisibility()")
cmds.setParent('..')
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
#Mirror controller tab
cmds.frameLayout(label='Mirror', collapsable=True, collapse=True,w=310)
cmds.rowColumnLayout(nc=1)
cmds.separator(vis=False)
cmds.text('Help to mirror controller.',align='left')
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout(nc=7)
cmds.button(w=10,vis=False)
cmds.button("Left To Right",c = "MirrorFromLeft()",w=90)
cmds.button(w=10,vis=False)
cmds.button("Right To Left",c = "MirrorFromRight()",w=90)
cmds.button(w=10,vis=False)
cmds.button("Selected",c = "MirrorFromSelected()",w=90)
cmds.button(w=10,vis=False)
cmds.separator(h=5,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
#Connect attributes tab
cmds.frameLayout(label='Connect Attr', collapsable=True, collapse=True)
cmds.rowColumnLayout(nc=1)
cmds.separator(vis=False)
cmds.text('Help to connect atrribute of selected object.',align='left')
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout(nc=7)
cmds.button(w=10,vis=False)
cmds.button("Connect Translate",c = "ConnectTanslate()",w=96)
cmds.button(w=10,vis=False)
cmds.button("Connect Rotate",c = "ConnectRotate()",w=96)
cmds.button(w=10,vis=False)
cmds.button("Connect Scale",c = "ConnectScale()",w=96)
cmds.button(w=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
#follicle tab
cmds.frameLayout(label='Create Follicle', collapsable=True, collapse=True)
cmds.rowColumnLayout(nc=1)
cmds.separator(vis=False)
cmds.text('Select a plane and locators then click "Create Follicles".',align='left')
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout(nc=3)
cmds.button(w=63,vis=False)
cmds.button("Create Follicles",c = 'createFollicles()',w=200)
cmds.button(w=63,vis=False)
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.frameLayout(label='Rename', collapsable=True, collapse=True)
cmds.rowColumnLayout(nr=5)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
#rename tab#
cmds.frameLayout(label='Search And Replace', collapsable=True, collapse=True,w=310)
cmds.rowColumnLayout(nc=1)
cmds.separator(h=5,vis=False)
cmds.text('Help to search and replace name of selected object.',al='left')
cmds.rowColumnLayout(nc=4)
cmds.separator(h=10,vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.text(label='Search:',w=70,al='left')
cmds.button(w=20,vis=False)
cmds.textField('search_field',w=190)
cmds.button(w=20,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.text(label='Replace:',al='left')
cmds.button(w=20,vis=False)
cmds.textField('replace_field')
cmds.button(vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.button(vis=False)
cmds.button(w=20,vis=False)
cmds.button(label='Rename', command='search_replace()')
cmds.button(vis=False)
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
# Prefix UI elements
cmds.frameLayout(label='Add Prefix', collapsable=True, collapse=True)
cmds.rowColumnLayout(nc=1)
cmds.separator(h=5,vis=False)
cmds.text('Help to add prefix name of selected object.',al='left')
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout(nc=4)
cmds.text(label='Prefix:',w=70,al='left')
cmds.button(w=20,vis=False)
cmds.textField('prefix_field',w=190)
cmds.button(w=20,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.button(vis=False)
cmds.button(w=20,vis=False)
cmds.button(label='Add Prefix',c='addPrefix()')
cmds.button(w=20,vis=False)
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
# Suffix UI elements
cmds.frameLayout(label='Add Suffix', collapsable=True, collapse=True)
cmds.rowColumnLayout(nc=1)
cmds.separator(h=5,vis=False)
cmds.text('Help to add suffix name of selected object.',al='left')
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout(nc=4)
cmds.text(label='Suffix:',w=70,al = 'left')
cmds.button(w=20,vis=False)
cmds.textField('suffix_field',w=190)
cmds.button(w=20,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.separator(vis=False)
cmds.button(vis=False)
cmds.button(w=20,vis=False)
cmds.button(label='Add Suffix',c='addSuffix()')
cmds.button(w=20,vis=False)
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
#add suffix name#
cmds.frameLayout(label='Add Prefix or Suffix Name', collapsable=True, collapse=True)
cmds.rowColumnLayout(nc=1)
cmds.separator(h=5,vis=False)
cmds.text('Help to add suffix name of selected object.',al='left')
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout(nc=7)
cmds.button(w=10,vis=False)
cmds.button(label='_jnt',c='addSuffixJnt()',w=88)
cmds.button(w=10,vis=False)
cmds.button(label='_grp',c='addSuffixGrp()',w=88)
cmds.button(w=10,vis=False)
cmds.button(label='_ctrl',c='addSuffixCtrl()',w=88)
cmds.button(w=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
#add number suffix name#
cmds.frameLayout(label='Add Number Suffix Name', collapsable=True, collapse=True)
cmds.rowColumnLayout(nc=1)
cmds.separator(h=5,vis=False)
cmds.text('Help to add number suffix name of selected object.',al='left')
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout(nc=4)
cmds.text(label="Start number:",al='left')
cmds.button(w=20,vis=False)
cmds.intField('startNumField',value=1, minValue=1,w=190)
cmds.button(w=20,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.text(label="Increment:",al='left')
cmds.button(w=20,vis=False)
cmds.intField('incrementField',value=1, minValue=1)
cmds.button(w=20,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.button(w=20,vis=False)
cmds.button(w=20,vis=False)
cmds.button(label="Add Suffix", command='add_suffix()')
cmds.button(w=20,vis=False)
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
#Auto rig tab
cmds.frameLayout(label='Auto Rig', collapsable=True, collapse=True)
cmds.rowColumnLayout(nr=4)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
cmds.frameLayout(label='Biped', collapsable=True, collapse=True,w=310)
cmds.rowColumnLayout( nc=1 )
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout(nc=3)
cmds.text('Biped Setup:',al='left')
cmds.button("SetupJoint",c = "setupjoint()",w = 150)
cmds.button(w = 150,vis=0)
cmds.separator(h=25,w=100)
cmds.separator()
cmds.separator()
cmds.text('Mirror Setup:',al='left')
cmds.button("MirrorSetupJoint",c = "mirrorSetupjoint()",w = 90)
cmds.button(w = 150,vis=0)
cmds.separator(h=25)
cmds.separator()
cmds.separator()
cmds.text('Build Setup:',al='left')
cmds.button("BuildSetup",c = "buildsetup()",w = 90)
cmds.button(w = 150,vis=0)
cmds.separator(h=25)
cmds.separator()
cmds.separator()
cmds.text('Bendy Setup:',al='left')
cmds.checkBox('bendyArm', label='BendyArm')
cmds.button(w = 150,vis=0)
cmds.button(w = 150,vis=0)
cmds.checkBox('bendyLeg', label='BendyLeg')
cmds.separator(vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.frameLayout(label='Extra Rig', collapsable=True, collapse=True)
cmds.rowColumnLayout(nc=1)
cmds.rowColumnLayout(nr=3)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
cmds.frameLayout(label='IK Spring Rig', collapsable=True, collapse=True,w=285)
cmds.rowColumnLayout(nc=1)
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout(nc=4)
cmds.text('IK Spring Setup:',al='left')
cmds.button(w=40,vis=False)
cmds.button("BuildIKSpringSetupJoint",c = "BuildIKSpringSetupJoint()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Build Setup:',al='left')
cmds.button(w=40,vis=False)
cmds.button("BuildIKSpringSetupRig",c = "BuildIKSpringSetupRig()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.frameLayout(label='Tail Rig', collapsable=True, collapse=True)
cmds.rowColumnLayout(nc=1)
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout( nc=4 )
cmds.text('Tail Setup:',al='left')
cmds.button(w=60,vis=False)
cmds.button("BuildTailSetupJoint",c = "BuildTailSetupJoint()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Build Setup:',al='left')
cmds.button(w=60,vis=False)
cmds.button("BuildTailSetupRig",c = "BuildTailSetupRig()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.frameLayout(label='Motion Path Rig', collapsable=True, collapse=True)
cmds.rowColumnLayout(nc=1)
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout(nc=3)
cmds.text('Path Setup:',al='left')
cmds.button(w=60,vis=False)
cmds.button("MotionPathSetupLocator",c = "createLocator()",w = 150)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Joints Setup:',al='left')
cmds.button(w=60,vis=False)
cmds.intField('numbersOfLocator',min=1,value=1)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Build Setup:',al='left')
cmds.button(w=60,vis=False)
cmds.button("BuildMotionPathSetupRig",c = "createMotionPath()",w = 150)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.frameLayout(label='Quadruped Rig', collapsable=True, collapse=True)
cmds.rowColumnLayout( nc=1 )
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout( nc=4 )
cmds.text('Quadruped Setup:',al='left')
cmds.button(w=60,vis=False)
cmds.button("BuildQuadrupedSetupJoint",c = "BuildQuadrupedSetupJoint()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Mirror Setup:',al='left')
cmds.button(w=60,vis=False)
cmds.button("MirrorQuadrupedSetupJoint",c = "MirrorQuadrupedSetupJoint()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Build Setup:',al='left')
cmds.button(w=60,vis=False)
cmds.button("BuildQuadrupedRig",c = "BuildQuadrupedSetupRig()",w = 150)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.frameLayout(label='Facial', collapsable=True, collapse=True,w=310)
cmds.rowColumnLayout(nc=1)
cmds.rowColumnLayout(nr=3)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
cmds.button(w=10,vis=0)
cmds.frameLayout(label='Eyelid', collapsable=True, collapse=True,w=285)
cmds.rowColumnLayout(nc=1)
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout( nc=4 )
cmds.text('Eye Locator Setup:',al='left')
cmds.button(w=20,vis=False)
cmds.button("Eye Placement",c = "create_display_eye()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Eye Upper Lid Setup:',al='left')
cmds.button(w=20,vis=False)
cmds.button("Upper Eyelid Vertex",c = "store_vertex_ids()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Eye Lower Lid Setup:',al='left')
cmds.button(w=20,vis=False)
cmds.button("Lower Eyelid Vertex",c = "store_lower_vertex_ids()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Eyelid Setup:',al='left')
cmds.button(w=20,vis=False)
cmds.button("Build Eyelid",c = "create_joints_and_parent_joints()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.text('Eyelid Curve Reverse:',al='left')
cmds.button(w=20,vis=False)
cmds.checkBox('reversecrv', label='Reverse Curve')
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Eyelid Rename:',al='left')
cmds.button(w=20,vis=False)
cmds.button("Left Eyelid",c = "rename_left()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=10,vis=False)
cmds.separator(h=20,vis=False)
cmds.separator(h=20,vis=False)
cmds.button("Right Eyelid",c = "rename_right()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=10,vis=False)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.frameLayout(label='Lip', collapsable=True, collapse=True,w=285)
global head_joint_field
cmds.rowColumnLayout(nc=1)
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout( nc=4 )
cmds.text('Head Joint Name:',al='left')
cmds.button(w=5,vis=False)
head_joint_field = cmds.textField(placeholderText="Enter Head Joint Name")
cmds.button(w=20,vis=False)
cmds.button(w=20,vis=False)
cmds.button(w=20,vis=False)
cmds.button(label="Store Selected", command=store_head_joint_name)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Lip Upper Curve Setup:',al='left')
cmds.button(w=20,vis=False)
cmds.button("Upper Lip Edge",c = "create_upper_lip_edge()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Lip Lower Curve Setup:',al='left')
cmds.button(w=20,vis=False)
cmds.button("Lower Lip Edge",c = "create_lower_lip_edge()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Lip Setup:',al='left')
cmds.button(w=20,vis=False)
cmds.button("Build Lip Setup",c = "build_lip_setup()",w = 150)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.setParent('..')
cmds.setParent('..')
cmds.setParent('..')
cmds.frameLayout(label='Eyebrow and Cheek', collapsable=True, collapse=True,w=285)
cmds.rowColumnLayout(nc=1)
cmds.rowColumnLayout(nc=1)
cmds.separator(h=10,vis=False)
cmds.rowColumnLayout( nc=4 )
cmds.text('Inner Eyebrow Setup:',al='left')
cmds.button(w=20,vis=False)
cmds.button(label="Place Selected", command=build_inner_eyebrow_locator,w = 140)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Middle Eyebrow Setup:',al='left')
cmds.button(w=20,vis=False)
cmds.button(label="Place Selected", command=build_middle_eyebrow_locator,w = 140)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Outer Eyebrow Setup:',al='left')
cmds.button(w=20,vis=False)
cmds.button(label="Place Selected", command=build_outer_eyebrow_locator,w = 140)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Cheek Setup:',al='left')
cmds.button(w=20,vis=False)
cmds.button(label="Place Selected", command=build_cheek_locator,w = 140)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.text('Build Setup:',al='left')
cmds.button(w=20,vis=False)
cmds.button(label="Build All", command=build_all,w = 140)
cmds.button(w=5,vis=False)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
cmds.separator(h=20)
#locator function#
def create_locator(position):
locator = cmds.spaceLocator()[0]
cmds.move(position[0], position[1], position[2], locator)
return locator
def create_locator_with_values(selected_object):
position = cmds.xform(selected_object, query=True, worldSpace=True, translation=True)
rotation = cmds.xform(selected_object, query=True, worldSpace=True, rotation=True)
locator_name = '{}_loc'.format(selected_object)
locator = create_locator(position)
cmds.rotate(rotation[0], rotation[1], rotation[2], locator)
cmds.rename(locator, locator_name)
return locator
def create_locator_on_selection(*args):
selected_objects = cmds.ls(selection=True)
if selected_objects:
for selected_object in selected_objects:
create_locator_with_values(selected_object)
else:
create_locator([0, 0, 0])
#group function#
def create_group_with_values(selected_object=None):
group_name = selected_object + "_grp" if selected_object else "group"
if cmds.objExists(group_name):
group_name = cmds.rename(group_name, "{}_1".format(group_name))
cmds.group(empty=True, name=group_name)
if selected_object:
position = cmds.xform(selected_object, query=True, worldSpace=True, translation=True)
rotation = cmds.xform(selected_object, query=True, worldSpace=True, rotation=True)
cmds.move(position[0], position[1], position[2], group_name)
cmds.rotate(rotation[0], rotation[1], rotation[2], group_name)
return group_name
def create_group_on_selection(*args):
selected_objects = cmds.ls(selection=True)
if selected_objects:
for selected_object in selected_objects:
create_group_with_values(selected_object)
else:
cmds.group(em=True)
#joint function#
def jnt():
selected = cmds.ls(sl = True)
if selected:
for each in selected:
cmds.select(each)
newJoint = cmds.joint(n=each+'_jnt')
cmds.parent(newJoint,w = True)
else:
cmds.joint()
#parentscale function#
def parentscale():
lst = cmds.ls(sl = True)
cmds.parentConstraint(lst,mo = True)
cmds.scaleConstraint(lst,mo = True)
#cube function#
def create_group_with_cube_values(selected_object=None):
group_name = selected_object + "_ctrl_grp" if selected_object else "group"
if cmds.objExists(group_name):
group_name = cmds.rename(group_name, "{}_1".format(group_name))
group = cmds.group(empty=True, name=group_name)
cube = cmds.curve(d=1, p=[(-0.5, -0.5, 0.5),(-0.5, 0.5, 0.5),(0.5, 0.5, 0.5),(0.5, -0.5, 0.5),(0.5, -0.5, -0.5),(0.5, 0.5, -0.5),(-0.5, 0.5, -0.5),(-0.5, -0.5, -0.5),(-0.5, -0.5, 0.5),(0.5, -0.5, 0.5),(0.5, 0.5, 0.5),(0.5, 0.5, -0.5),(0.5, -0.5, -0.5),(-0.5, -0.5, -0.5),(-0.5, 0.5, -0.5),(-0.5, 0.5, 0.5)])
cmds.parent(cube,group)
cmds.rename(cube,selected_object + '_ctrl')
if selected_object:
position = cmds.xform(selected_object, query=True, worldSpace=True, translation=True)
rotation = cmds.xform(selected_object, query=True, worldSpace=True, rotation=True)
cmds.move(position[0], position[1], position[2], group_name)
cmds.rotate(rotation[0], rotation[1], rotation[2], group_name)
return group_name
def create_cube_on_selection(*args):
selected_objects = cmds.ls(selection=True)
if selected_objects:
for selected_object in selected_objects:
create_group_with_cube_values(selected_object)
else:
cmds.curve(d=1, p=[(-0.5, -0.5, 0.5),(-0.5, 0.5, 0.5),(0.5, 0.5, 0.5),(0.5, -0.5, 0.5),(0.5, -0.5, -0.5),(0.5, 0.5, -0.5),(-0.5, 0.5, -0.5),(-0.5, -0.5, -0.5),(-0.5, -0.5, 0.5),(0.5, -0.5, 0.5),(0.5, 0.5, 0.5),(0.5, 0.5, -0.5),(0.5, -0.5, -0.5),(-0.5, -0.5, -0.5),(-0.5, 0.5, -0.5),(-0.5, 0.5, 0.5)])
cmds.group()
#circle function#
def create_group_with_circle_values(selected_object=None):
group_name = selected_object + "_ctrl_grp" if selected_object else "group"
if cmds.objExists(group_name):
group_name = cmds.rename(group_name, "{}_1".format(group_name))
group = cmds.group(empty=True, name=group_name)
curvecircle = cmds.circle()[0]
cmds.delete(curvecircle,constructionHistory = True)
cmds.parent(curvecircle,group)
cmds.rename(curvecircle,selected_object + '_ctrl')
if selected_object:
position = cmds.xform(selected_object, query=True, worldSpace=True, translation=True)
rotation = cmds.xform(selected_object, query=True, worldSpace=True, rotation=True)
cmds.move(position[0], position[1], position[2], group_name)
cmds.rotate(rotation[0], rotation[1], rotation[2], group_name)
return group_name
def create_circle_on_selection(*args):
selected_objects = cmds.ls(selection=True)
if selected_objects:
for selected_object in selected_objects:
create_group_with_circle_values(selected_object)
else:
ctrl = cmds.circle()
cmds.group()
cmds.delete(ctrl,constructionHistory = True)
#square function#
def create_group_with_square_values(selected_object=None):
group_name = selected_object + "_ctrl_grp" if selected_object else "group"
if cmds.objExists(group_name):
group_name = cmds.rename(group_name, "{}_1".format(group_name))
group = cmds.group(empty=True, name=group_name)
square = cmds.curve(d=1, p=[(0.5, 0, 0.5),(-0.5, 0, 0.5),(-0.5, 0, -0.5),(0.5, 0, -0.5),(0.5, 0, 0.5)])
cmds.parent(square,group)
cmds.rename(square,selected_object + '_ctrl')
if selected_object:
position = cmds.xform(selected_object, query=True, worldSpace=True, translation=True)
rotation = cmds.xform(selected_object, query=True, worldSpace=True, rotation=True)
cmds.move(position[0], position[1], position[2], group_name)
cmds.rotate(rotation[0], rotation[1], rotation[2], group_name)
return group_name
def create_square_on_selection(*args):
selected_objects = cmds.ls(selection=True)
if selected_objects:
for selected_object in selected_objects:
create_group_with_square_values(selected_object)
else:
cmds.curve(d=1, p=[(0.5, 0, 0.5),(-0.5, 0, 0.5),(-0.5, 0, -0.5),(0.5, 0, -0.5),(0.5, 0, 0.5)])
cmds.group()
#X function#
def create_group_with_x_values(selected_object=None):
group_name = selected_object + "_ctrl_grp" if selected_object else "group"
if cmds.objExists(group_name):
group_name = cmds.rename(group_name, "{}_1".format(group_name))
group = cmds.group(empty=True, name=group_name)
x = cmds.curve(d=1, p=[(0.25, 0, 1.5),(-0.25, 0, 1.5),(-0.25, 0, 0.25),(-1.5, 0, 0.25),(-1.5, 0, -0.25),(-0.25, 0, -0.25),(-0.25, 0, -1.5),(0.25, 0 ,-1.5),(0.25, 0, -0.25),(1.5, 0, -0.25),(1.5, 0, 0.25,),(0.25, 0 ,0.25),(0.25, 0, 1.5)])
cmds.parent(x,group)
cmds.rename(x,selected_object + '_ctrl')
if selected_object:
position = cmds.xform(selected_object, query=True, worldSpace=True, translation=True)
rotation = cmds.xform(selected_object, query=True, worldSpace=True, rotation=True)
cmds.move(position[0], position[1], position[2], group_name)
cmds.rotate(rotation[0], rotation[1], rotation[2], group_name)
return group_name
def create_x_on_selection(*args):
selected_objects = cmds.ls(selection=True)
if selected_objects:
for selected_object in selected_objects:
create_group_with_x_values(selected_object)
else:
cmds.curve(d=1, p=[(0.25, 0, 1.5),(-0.25, 0, 1.5),(-0.25, 0, 0.25),(-1.5, 0, 0.25),(-1.5, 0, -0.25),(-0.25, 0, -0.25),(-0.25, 0, -1.5),(0.25, 0 ,-1.5),(0.25, 0, -0.25),(1.5, 0, -0.25),(1.5, 0, 0.25,),(0.25, 0 ,0.25),(0.25, 0, 1.5)])
cmds.group()
#pyramid function#
def create_group_with_pyramid_values(selected_object=None):
group_name = selected_object + "_ctrl_grp" if selected_object else "group"
if cmds.objExists(group_name):
group_name = cmds.rename(group_name, "{}_1".format(group_name))
group = cmds.group(empty=True, name=group_name)
pyramid = cmds.curve(d=1, p=[(1, -0.75, 1), (0, 0.5, 0), (-1, -0.75, 1), (1, -0.75, 1), (0, 0.5, 0), (-1, -0.75, -1), (1, -0.75, -1), (0, 0.5, 0), (1, -0.75, -1), (1, -0.75, 1), (0, 0.5, 0), (-1, -0.75, 1), (-1, -0.75, -1)])
cmds.parent(pyramid,group)
cmds.rename(pyramid,selected_object + '_ctrl')
if selected_object:
position = cmds.xform(selected_object, query=True, worldSpace=True, translation=True)
rotation = cmds.xform(selected_object, query=True, worldSpace=True, rotation=True)
cmds.move(position[0], position[1], position[2], group_name)
cmds.rotate(rotation[0], rotation[1], rotation[2], group_name)
return group_name
def create_pyramid_on_selection(*args):
selected_objects = cmds.ls(selection=True)
if selected_objects:
for selected_object in selected_objects:
create_group_with_pyramid_values(selected_object)
else:
cmds.curve(d=1, p=[(1, -0.75, 1), (0, 0.5, 0), (-1, -0.75, 1), (1, -0.75, 1), (0, 0.5, 0), (-1, -0.75, -1), (1, -0.75, -1), (0, 0.5, 0), (1, -0.75, -1), (1, -0.75, 1), (0, 0.5, 0), (-1, -0.75, 1), (-1, -0.75, -1)])
cmds.group()
#trianglecube function#
def create_group_with_trianglecube_values(selected_object=None):
group_name = selected_object + "_ctrl_grp" if selected_object else "group"
if cmds.objExists(group_name):
group_name = cmds.rename(group_name, "{}_1".format(group_name))
group = cmds.group(empty=True, name=group_name)
trianglecube = cmds.curve(d = 1, p = [(0, 0.5, 0), (0, 0, 0.5), (0, -0.5, 0), (0, 0, -0.5), (0, 0.5, 0), (0.5, 0, 0), (0, -0.5, 0), (-0.5, 0, 0), (0, 0, 0.5), (0.5, 0, 0), (0, 0, -0.5), (-0.5, 0, 0), (0, 0.5, 0)])
cmds.parent(trianglecube,group)
cmds.rename(trianglecube,selected_object + '_ctrl')
if selected_object:
position = cmds.xform(selected_object, query=True, worldSpace=True, translation=True)
rotation = cmds.xform(selected_object, query=True, worldSpace=True, rotation=True)
cmds.move(position[0], position[1], position[2], group_name)
cmds.rotate(rotation[0], rotation[1], rotation[2], group_name)
return group_name
def create_trianglecube_on_selection(*args):
selected_objects = cmds.ls(selection=True)
if selected_objects:
for selected_object in selected_objects:
create_group_with_trianglecube_values(selected_object)
else:
cmds.curve(d = 1, p = [(0, 0.5, 0), (0, 0, 0.5), (0, -0.5, 0), (0, 0, -0.5), (0, 0.5, 0), (0.5, 0, 0), (0, -0.5, 0), (-0.5, 0, 0), (0, 0, 0.5), (0.5, 0, 0), (0, 0, -0.5), (-0.5, 0, 0), (0, 0.5, 0)])
cmds.group()
#dark red function#
def DarkRed():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,4)
#dark blue function#
def darkBlue():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,5)
#blue function#
def blue():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,6)
#black function#
def black():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,8)
#pink function#
def purple():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,9)
#brown function#
def brown():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,10)
#dark brown function#
def darkBrown():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,11)
#dark orange function#
def darkOrange():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,12)
#red function#
def red():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,13)
#light green function#
def lightGreen():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,14)
#yellow function#
def yellow():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,17)
#lightblue function#
def lightBlue():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,18)
#pink function#
def pink():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,20)
#light orange function#
def lightOrange():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,21)
#dark green function#
def darkGreen():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,7)
#dark yellow function#
def darkYellow():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,25)
#green function#
def green():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,26)
#dark pink function#
def darkPink():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,31)
#dark purple function#
def darkPurple():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,30)
#navy function#
def navy():
sel = cmds. ls(sl = True)
shape =cmds.listRelatives(sel, shapes = True)
for node in shape:
cmds.setAttr(node + ".overrideEnabled" ,True)
cmds.setAttr(node + ".overrideColor" ,29)
#lock translate function#
def LockTranslate():
sel = cmds.ls(sl = True)
for obj in sel:
lockOrNot = cmds.getAttr (obj +'.translateX',lock = True)
if lockOrNot == False:
cmds.setAttr (obj +'.translateX',keyable = False, cb = False, lock = True)
cmds.setAttr (obj +'.translateY',keyable = False, cb = False, lock = True)
cmds.setAttr (obj +'.translateZ',keyable = False, cb = False, lock = True)
else:
cmds.setAttr (obj +'.translateX',keyable = True, cb = False, lock = False)
cmds.setAttr (obj +'.translateY',keyable = True, cb = False, lock = False)
cmds.setAttr (obj +'.translateZ',keyable = True, cb = False, lock = False)
#lock rotate function#
def LockRotate():
sel = cmds.ls(sl = True)
for obj in sel:
lockOrNot = cmds.getAttr (obj +'.rotateX',lock = True)
if lockOrNot == False:
cmds.setAttr (obj +'.rotateX',keyable = False, cb = False, lock = True)
cmds.setAttr (obj +'.rotateY',keyable = False, cb = False, lock = True)
cmds.setAttr (obj +'.rotateZ',keyable = False, cb = False, lock = True)
else:
cmds.setAttr (obj +'.rotateX',keyable = True, cb = False, lock = False)
cmds.setAttr (obj +'.rotateY',keyable = True, cb = False, lock = False)
cmds.setAttr (obj +'.rotateZ',keyable = True, cb = False, lock = False)
#lock scale function#
def LockScale():
sel = cmds.ls(sl = True)
for obj in sel:
lockOrNot = cmds.getAttr (obj +'.scaleX',lock = True)
if lockOrNot == False:
cmds.setAttr (obj +'.scaleX',keyable = False, cb = False, lock = True)
cmds.setAttr (obj +'.scaleY',keyable = False, cb = False, lock = True)
cmds.setAttr (obj +'.scaleZ',keyable = False, cb = False, lock = True)
else:
cmds.setAttr (obj +'.scaleX',keyable = True, cb = False, lock = False)
cmds.setAttr (obj +'.scaleY',keyable = True, cb = False, lock = False)
cmds.setAttr (obj +'.scaleZ',keyable = True, cb = False, lock = False)
#lock visibility function#
def LockVisibility():
sel = cmds.ls(sl = True)
for obj in sel:
lockOrNot = cmds.getAttr (obj +'.visibility',lock = True)
if lockOrNot == False:
cmds.setAttr (obj +'.visibility',keyable = False, cb = False, lock = True)
else:
cmds.setAttr (obj +'.visibility',keyable = True, cb = False, lock = False)
#connect tanslation function#
def ConnectTanslate():
selection = cmds.ls(selection=True)
if len(selection) != 2:
cmds.warning("Please select exactly two objects.")
else:
source_obj = selection[0]
destination_obj = selection[1]
attrs = ["translateX", "translateY", "translateZ"]
for attr in attrs:
cmds.connectAttr(source_obj + "." + attr, destination_obj + "." + attr)
#connect roration function#
def ConnectRotate():
selection = cmds.ls(selection=True)
if len(selection) != 2:
cmds.warning("Please select exactly two objects.")
else:
source_obj = selection[0]
destination_obj = selection[1]
attrs = ["rotateX", "rotateY", "rotateZ"]
for attr in attrs:
cmds.connectAttr(source_obj + "." + attr, destination_obj + "." + attr)
#connect scaling function#
def ConnectScale():
selection = cmds.ls(selection=True)
if len(selection) != 2:
cmds.warning("Please select exactly two objects.")
else:
source_obj = selection[0]
destination_obj = selection[1]
attrs = ["scaleX", "scaleY", "scaleZ"]
for attr in attrs:
cmds.connectAttr(source_obj + "." + attr, destination_obj + "." + attr)
# Mirror controllers function
def MirrorFromLeft():
# Define your left and right prefixes
left_prefix = "l_"
right_prefix = "r_"
# Get a list of NURBS curves with the left prefix
left_curves = cmds.ls(left_prefix + "*", type="nurbsCurve")
# Specify the names of the curves to skip
curves_to_skip = ["r_elbow_direction_crvShape", "l_elbow_direction_crvShape","r_knee_direction_crvShape","l_knee_direction_crvShape","r_lwr_bendy_arm_crvShape","l_lwr_bendy_arm_crvShape","r_lwr_bendy_leg_crvShape","l_lwr_bendy_leg_crvShape","r_upr_bendy_arm_crvShape","l_upr_bendy_arm_crvShape","r_upr_bendy_leg_crvShape","l_upr_bendy_leg_crvShape"]
# Iterate through the left curves
for left_curve in left_curves:
# Check if the curve is in the list of curves to skip
if left_curve in curves_to_skip:
print(f"Skipping {left_curve}.")
continue
# Construct the corresponding right curve name
right_curve = left_curve.replace(left_prefix, right_prefix)
# Check if the right curve exists
if cmds.objExists(right_curve):
# Retrieve the CVs from the left curve
left_cvs = cmds.getAttr(f"{left_curve}.cv[*]")
# Get the number of CVs
num_cvs = len(left_cvs)
# Apply the copied CVs to the right curve
for i in range(num_cvs):
target_cv_attr = "{0}.cv[{1}]".format(right_curve, i)
cmds.setAttr(target_cv_attr, *left_cvs[i], type="double3")
print("CVs copied from '{0}' to '{1}'.".format(left_curve, right_curve))
else:
cmds.warning("Corresponding right curve '{0}' not found for '{1}'. Skipping.".format(right_curve, left_curve))
print("CV copy completed.")
def MirrorFromRight():
# Define your left and right prefixes
left_prefix = "l_"
right_prefix = "r_"
# Get a list of NURBS curves with the left prefix
right_curves = cmds.ls(right_prefix + "*", type="nurbsCurve")
# Specify the names of the curves to skip
curves_to_skip = ["r_elbow_direction_crvShape", "l_elbow_direction_crvShape","r_knee_direction_crvShape","l_knee_direction_crvShape","r_lwr_bendy_arm_crvShape","l_lwr_bendy_arm_crvShape","r_lwr_bendy_leg_crvShape","l_lwr_bendy_leg_crvShape","r_upr_bendy_arm_crvShape","l_upr_bendy_arm_crvShape","r_upr_bendy_leg_crvShape","l_upr_bendy_leg_crvShape"]
# Iterate through the left curves
for right_curve in right_curves:
# Check if the curve is in the list of curves to skip
if right_curve in curves_to_skip:
print(f"Skipping {right_curve}.")
continue
# Construct the corresponding right curve name
left_curve = right_curve.replace(right_prefix, left_prefix)
# Check if the right curve exists
if cmds.objExists(left_curve):
# Retrieve the CVs from the left curve
right_cvs = cmds.getAttr(f"{right_curve}.cv[*]")
# Get the number of CVs
num_cvs = len(right_cvs)
# Apply the copied CVs to the right curve
for i in range(num_cvs):
target_cv_attr = "{0}.cv[{1}]".format(left_curve, i)
cmds.setAttr(target_cv_attr, *right_cvs[i], type="double3")
print("CVs copied from '{0}' to '{1}'.".format(right_curve, left_curve))
else:
cmds.warning("Corresponding left curve '{0}' not found for '{1}'. Skipping.".format(left_curve, right_curve))
print("CV copy completed.")
def MirrorFromSelected():
# Get the selected control shapes (NURBS curves)
selected_objects = cmds.ls(selection=True)
# Ensure there are exactly two selected control shapes
if len(selected_objects) != 2:
cmds.warning("Please select exactly two NURBS curves to copy from and copy to.")
else:
# Sort the selected objects
selected_objects.sort()
# Extract CVs from the first selected control shape
source_cvs = cmds.getAttr(f"{selected_objects[0]}.cp[*]")
# Extract the number of CVs in the source curve
num_cvs = len(source_cvs)
# Apply the copied CVs to the second selected control shape
for i in range(num_cvs):
target_cv_attr = "{0}.cp[{1}]".format(selected_objects[1], i)
cmds.setAttr(target_cv_attr, *source_cvs[i])
print("CVs copied from '{0}' to '{1}'.".format(selected_objects[0], selected_objects[1]))
#create follicles function#
def createFollicles(*args):
sel = cmds.ls(selection=True)
if len(sel) < 2:
cmds.warning('Please select a plane and at least one locator.')
return
plane = sel[0]
locators = sel[1:]
minX, minY, minZ, maxX, maxY, maxZ = cmds.xform(plane, q=True, ws=True, bb=True)
width = maxX - minX
height = maxZ - minZ
for loc in locators:
posX, posY, posZ = cmds.xform(loc, q=True, ws=True, translation=True)
u = (posX - minX) / width
v = (posZ - minZ) / height
follicleX = u * width + minX
follicleY = maxY
follicleZ = v * height + minZ
follicle = cmds.createNode('follicle')
cmds.connectAttr('%s.outMesh' % plane, '%s.inputMesh' % follicle)
cmds.connectAttr('%s.worldMatrix[0]' % plane, '%s.inputWorldMatrix' % follicle)
cmds.setAttr('%s.parameterU' % follicle, u)
cmds.setAttr('%s.parameterV' % follicle, v)
cmds.move(follicleX, follicleY, follicleZ, follicle)
cmds.setAttr('%s.visibility' % follicle, 0)
follicleTransform = cmds.listRelatives(follicle, parent=True)[0]
cmds.connectAttr('%s.outTranslate' % follicle, '%s.translate' % follicleTransform)
cmds.connectAttr('%s.outRotate' % follicle, '%s.rotate' % follicleTransform)
#rename function#
def search_replace():
selection = cmds.ls(selection=True)
search_text = cmds.textField('search_field', query=True, text=True)
replace_text = cmds.textField('replace_field', query=True, text=True)
for node in selection:
new_name = node.replace(search_text, replace_text)
cmds.rename(node, new_name)
cmds.textField('search_field',edit=True,text = '')
cmds.textField('replace_field',edit=True,text = '')
#prefix and suffix functions#
def addPrefix():
selection = cmds.ls(selection=True)
prefix = cmds.textField('prefix_field', query=True, text=True)
for node in selection:
new_name = prefix + node
cmds.rename(node, new_name)
cmds.textField('prefix_field',edit=True,text = '')
def addSuffix():
selection = cmds.ls(selection=True)
suffix = cmds.textField('suffix_field', query=True, text=True)
for node in selection:
new_name = node + suffix
cmds.rename(node, new_name)
cmds.textField('suffix_field',edit=True,text = '')
def addSuffixJnt():
selection = cmds.ls(selection=True)
for node in selection:
new_name = node + '_jnt'
cmds.rename(node, new_name)
def addSuffixGrp():
selection = cmds.ls(selection=True)
for node in selection:
new_name = node + '_grp'
cmds.rename(node, new_name)
def addSuffixCtrl():
selection = cmds.ls(selection=True)
for node in selection:
new_name = node + '_ctrl'
cmds.rename(node, new_name)
#add number suffix function#
def add_suffix():
start_num = cmds.intField('startNumField', query=True, value=True)
increment = cmds.intField('incrementField', query=True, value=True)
selected_objects = cmds.ls(selection=True)
for i, obj in enumerate(selected_objects):
new_suffix = "_{:02d}".format(start_num + i*increment)
new_name = obj + new_suffix
cmds.rename(obj, new_name)
#build IK spring setup joint#
def BuildIKSpringSetupJoint():
nameOfIKSpringSetupJnt = [('ikSpring_01_setup_jnt',(0,0,0)),('ikSpring_02_setup_jnt',(5,0,0)),('ikSpring_03_setup_jnt',(10,0,0)),('ikSpring_04_setup_jnt',(15,0,0)),('ikSpring_05_setup_jnt',(20,0,0))]
for each in nameOfIKSpringSetupJnt:
cmds.joint(n=each[0],p=each[1])
cmds.setAttr('ikSpring_01_setup_jnt.rotateY',30)
cmds.setAttr('ikSpring_02_setup_jnt.rotateY',-60)
cmds.setAttr('ikSpring_03_setup_jnt.rotateY',60)
cmds.setAttr('ikSpring_04_setup_jnt.rotateY',-60)
#build IK spring setup rig#
def BuildIKSpringSetupRig():
def ControllerAttr(controllerName,visKeyableOrnot,scaleXKeyableOrnot,scaleYKeyableOrnot,scaleZKeyableOrnot,rotateXKeyableOrnot,rotateYKeyableOrnot,rotateZKeyableOrnot,visLockOrnot,scaleXLockOrnot,scaleYLockOrnot,scaleZLockOrnot,rotateXLockOrnot,rotateYLockOrnot,rotateZLockOrnot,colorEnableOrnot,colorNumber,translateXKeyableOrnot,translateYKeyableOrnot,translateZKeyableOrnot,translateXLockOrnot,translateYLockOrnot,translateZLockOrnot):
cmds.setAttr ((controllerName) +'.visibility',keyable = visKeyableOrnot, cb = False, lock = visLockOrnot)
cmds.setAttr ((controllerName) +'.scaleX',keyable = scaleXKeyableOrnot, cb = False, lock = scaleXLockOrnot)
cmds.setAttr ((controllerName) +'.scaleY',keyable = scaleYKeyableOrnot, cb = False, lock = scaleYLockOrnot)
cmds.setAttr ((controllerName) +'.scaleZ',keyable = scaleZKeyableOrnot, cb = False, lock = scaleZLockOrnot)
cmds.setAttr ((controllerName) +'.rotateX',keyable = rotateXKeyableOrnot, cb = False, lock = rotateXLockOrnot)
cmds.setAttr ((controllerName) +'.rotateY',keyable = rotateYKeyableOrnot, cb = False, lock = rotateYLockOrnot)
cmds.setAttr ((controllerName) +'.rotateZ',keyable = rotateZKeyableOrnot, cb = False, lock = rotateZLockOrnot)
cmds.setAttr ((controllerName) +'.translateX',keyable = translateXKeyableOrnot, cb = False, lock = translateXLockOrnot)
cmds.setAttr ((controllerName) +'.translateY',keyable = translateYKeyableOrnot, cb = False, lock = translateYLockOrnot)
cmds.setAttr ((controllerName) +'.translateZ',keyable = translateZKeyableOrnot, cb = False, lock = translateZLockOrnot)
cmds.setAttr ((controllerName) + '.overrideEnabled' ,colorEnableOrnot)
cmds.setAttr ((controllerName) + '.overrideColor' ,colorNumber)
nameOfIKSpringSetupRigUprJnt = [('ik_upr_01_jnt'),('ik_upr_02_jnt'),('ik_upr_03_jnt')]
for each in nameOfIKSpringSetupRigUprJnt:
cmds.joint(n=each)
toGetPosUprJnt = [('ikSpring_01_setup_jnt','ik_upr_01_jnt'),('ikSpring_02_setup_jnt','ik_upr_02_jnt'),('ikSpring_03_setup_jnt','ik_upr_03_jnt')]
for each in toGetPosUprJnt:
parentConForDel = cmds.parentConstraint(each[0],each[1],mo=False)
cmds.delete(parentConForDel)
orientConForDel = cmds.orientConstraint('ikSpring_02_setup_jnt','ik_upr_03_jnt',mo=False)
cmds.delete(orientConForDel)
cmds.makeIdentity( 'ik_upr_01_jnt', apply=True, translate=True, rotate=True )
nameOfIKSpringSetupRigLwrJnt = [('ik_lwr_01_jnt'),('ik_lwr_02_jnt'),('ik_lwr_03_jnt')]
for each in nameOfIKSpringSetupRigLwrJnt:
cmds.joint(n=each)
cmds.parent(w=True)
toGetPosLwrJnt = [('ikSpring_03_setup_jnt','ik_lwr_01_jnt'),('ikSpring_04_setup_jnt','ik_lwr_02_jnt'),('ikSpring_05_setup_jnt','ik_lwr_03_jnt')]
for each in toGetPosLwrJnt:
parentConForDel = cmds.parentConstraint(each[0],each[1],mo=False)
cmds.delete(parentConForDel)
nameOfFKSetupJnt = [('fk_01_jnt'),('fk_02_jnt'),('fk_03_jnt'),('fk_04_jnt'),('fk_05_jnt')]
for each in nameOfFKSetupJnt:
cmds.joint(n=each)
cmds.parent(w=True)
toGetPosFKJnt = [('ikSpring_01_setup_jnt','fk_01_jnt'),('ikSpring_02_setup_jnt','fk_02_jnt'),('ikSpring_03_setup_jnt','fk_03_jnt'),('ikSpring_04_setup_jnt','fk_04_jnt'),('ikSpring_05_setup_jnt','fk_05_jnt')]
for each in toGetPosFKJnt:
parentConForDel = cmds.parentConstraint(each[0],each[1],mo=False)
cmds.delete(parentConForDel)
nameOfIKSpringSetupRigJnt = [('ikSpring_01_jnt'),('ikSpring_02_jnt'),('ikSpring_03_jnt'),('ikSpring_04_jnt'),('ikSpring_05_jnt')]
for each in nameOfIKSpringSetupRigJnt:
cmds.joint(n=each)
cmds.parent(w=True)
toGetPosIKSpringJnt = [('ikSpring_01_setup_jnt','ikSpring_01_jnt'),('ikSpring_02_setup_jnt','ikSpring_02_jnt'),('ikSpring_03_setup_jnt','ikSpring_03_jnt'),('ikSpring_04_setup_jnt','ikSpring_04_jnt'),('ikSpring_05_setup_jnt','ikSpring_05_jnt')]
for each in toGetPosIKSpringJnt:
parentConForDel = cmds.parentConstraint(each[0],each[1],mo=False)
cmds.delete(parentConForDel)
toParent = [('fk_05_jnt','fk_04_jnt'),('fk_04_jnt','fk_03_jnt'),('fk_03_jnt','fk_02_jnt'),('fk_02_jnt','fk_01_jnt'),('ik_lwr_03_jnt','ik_lwr_02_jnt'),('ik_lwr_02_jnt','ik_lwr_01_jnt'),('ikSpring_05_jnt','ikSpring_04_jnt'),('ikSpring_04_jnt','ikSpring_03_jnt'),('ikSpring_03_jnt','ikSpring_02_jnt'),('ikSpring_02_jnt','ikSpring_01_jnt')]
for each in toParent:
cmds.parent(each[0],each[1])
cmds.makeIdentity( 'ik_lwr_01_jnt','fk_01_jnt','ikSpring_01_jnt', apply=True, translate=True, rotate=True )
#ik Rig#
cmds.ikHandle(n='upr_ikh', sj='ik_upr_01_jnt', ee='ik_upr_03_jnt')
cmds.ikHandle(n='lwr_ikh', sj='ik_lwr_01_jnt', ee='ik_lwr_03_jnt')
cmds.ikHandle(n='spring_ikh', sj='ikSpring_01_jnt', ee='ikSpring_05_jnt',sol='ikSpringSolver')
cmds.curve(d=1, p=[(-1, -1, 1),(-1, 1, 1),(1, 1, 1),(1, -1, 1),(1, -1, -1),(1, 1, -1),(-1, 1, -1),(-1, -1, -1),(-1, -1, 1),(1, -1, 1),(1, 1, 1),(1, 1, -1),(1, -1, -1),(-1, -1, -1),(-1, 1, -1),(-1, 1, 1)])
cmds.rename('ik_mid_ctrl')
ControllerAttr('ik_mid_ctrl',False,False,False,False,False,False,False,True,True,True,True,False,False,False,True,6,True,True,True,False,False,False)
cmds.group()
cmds.rename('ik_mid_ctrl_grp')
parentCon = cmds.parentConstraint('ik_upr_03_jnt','ik_mid_ctrl_grp',mo = False)
cmds.delete(parentCon)
cmds.curve(d=1, p=[(-1, -1, 1),(-1, 1, 1),(1, 1, 1),(1, -1, 1),(1, -1, -1),(1, 1, -1),(-1, 1, -1),(-1, -1, -1),(-1, -1, 1),(1, -1, 1),(1, 1, 1),(1, 1, -1),(1, -1, -1),(-1, -1, -1),(-1, 1, -1),(-1, 1, 1)])
cmds.rename('ik_inr_ctrl')
ControllerAttr('ik_inr_ctrl',False,False,False,False,True,True,True,True,True,True,True,False,False,False,True,6,True,True,True,False,False,False)
cmds.group()
cmds.rename('ik_inr_ctrl_grp')
parentCon = cmds.parentConstraint('ik_lwr_03_jnt','ik_inr_ctrl_grp',mo = False)
cmds.delete(parentCon)
cmds.curve(d=1, p=[(-2, -2, 2),(-2, 2, 2),(2, 2, 2),(2, -2, 2),(2, -2, -2),(2, 2, -2),(-2, 2, -2),(-2, -2, -2),(-2, -2, 2),(2, -2, 2),(2, 2, 2),(2, 2, -2),(2, -2, -2),(-2, -2, -2),(-2, 2, -2),(-2, 2, 2)])
cmds.rename('ik_ctrl')
ControllerAttr('ik_ctrl',False,False,False,False,True,True,True,True,True,True,True,False,False,False,True,6,True,True,True,False,False,False)
cmds.group()
cmds.rename('ik_ctrl_grp')
parentCon = cmds.parentConstraint('ik_lwr_03_jnt','ik_ctrl_grp',mo = False)
cmds.delete(parentCon)
cmds.pointConstraint('ik_ctrl','spring_ikh',mo = True)
cmds.parentConstraint('ikSpring_05_jnt','ik_inr_ctrl_grp',mo = True)
cmds.parentConstraint('ikSpring_03_jnt','ik_mid_ctrl_grp',mo = True)
cmds.pointConstraint('ik_mid_ctrl','upr_ikh',mo = True)
cmds.pointConstraint('ik_inr_ctrl','lwr_ikh',mo = True)
cmds.pointConstraint('ik_mid_ctrl','ik_lwr_01_jnt',mo = True)
cmds.orientConstraint('ik_inr_ctrl','ik_lwr_03_jnt',mo = True)
#fk Rig#
nameOfFKctrl = [('fk_01_ctrl','fk_01_ctrl_grp'),('fk_02_ctrl','fk_02_ctrl_grp'),('fk_03_ctrl','fk_03_ctrl_grp'),('fk_04_ctrl','fk_04_ctrl_grp'),('fk_05_ctrl','fk_05_ctrl_grp')]
for each in nameOfFKctrl:
FKctrl = cmds.circle(n=each[0],r=1,nrx = 90)
cmds.group(n=each[1])
ControllerAttr(each[0],False,False,False,False,True,True,True,True,True,True,True,False,False,False,True,6,True,True,True,False,False,False)
toGetPosOfFKctrl = [('ikSpring_01_setup_jnt','fk_01_ctrl_grp'),('ikSpring_02_setup_jnt','fk_02_ctrl_grp'),('ikSpring_03_setup_jnt','fk_03_ctrl_grp'),('ikSpring_04_setup_jnt','fk_04_ctrl_grp'),('ikSpring_05_setup_jnt','fk_05_ctrl_grp')]
for each in toGetPosOfFKctrl:
parentCon = cmds.parentConstraint(each[0],each[1],mo = False)
cmds.delete(parentCon)
toGetParent = [('fk_05_ctrl_grp','fk_04_ctrl'),('fk_04_ctrl_grp','fk_03_ctrl'),('fk_03_ctrl_grp','fk_02_ctrl'),('fk_02_ctrl_grp','fk_01_ctrl')]
for each in toGetParent:
cmds.parent(each[0],each[1])
parentCon = [('fk_01_ctrl','fk_01_jnt'),('fk_02_ctrl','fk_02_jnt'),('fk_03_ctrl','fk_03_jnt'),('fk_04_ctrl','fk_04_jnt'),('fk_05_ctrl','fk_05_jnt')]
for each in parentCon:
cmds.parentConstraint(each[0],each[1],mo = True)
#IKFK Setup Rig#
nameOfIKFKSetupJnt = [('bln_01_jnt'),('bln_02_jnt'),('bln_03_jnt'),('bln_04_jnt'),('bln_05_jnt')]
for each in nameOfIKFKSetupJnt:
cmds.joint(n=each)
cmds.parent(w = True)
toGetPosOfIKFKjnt = [('ikSpring_01_setup_jnt','bln_01_jnt'),('ikSpring_02_setup_jnt','bln_02_jnt'),('ikSpring_03_setup_jnt','bln_03_jnt'),('ikSpring_04_setup_jnt','bln_04_jnt'),('ikSpring_05_setup_jnt','bln_05_jnt')]
for each in toGetPosOfIKFKjnt:
parentCon = cmds.parentConstraint(each[0],each[1])
cmds.delete(parentCon)
toGetParent = [('bln_05_jnt','bln_04_jnt'),('bln_04_jnt','bln_03_jnt'),('bln_03_jnt','bln_02_jnt'),('bln_02_jnt','bln_01_jnt')]
for each in toGetParent:
cmds.parent(each[0],each[1])
cmds.makeIdentity( 'bln_01_jnt', apply=True, translate=True, rotate=True )
parentConIKFKjnt = [('ik_upr_01_jnt','bln_01_jnt'),('ik_upr_02_jnt','bln_02_jnt'),('ik_lwr_01_jnt','bln_03_jnt'),('ik_lwr_02_jnt','bln_04_jnt'),('ik_lwr_03_jnt','bln_05_jnt'),('fk_01_jnt','bln_01_jnt'),('fk_02_jnt','bln_02_jnt'),('fk_03_jnt','bln_03_jnt'),('fk_04_jnt','bln_04_jnt'),('fk_05_jnt','bln_05_jnt')]
for each in parentConIKFKjnt:
cmds.parentConstraint(each[0],each[1],mo = True)
cmds.curve(d=1, p=[(0.5, 0, 2.25),(-0.5, 0, 2.25),(-0.5, 0, 0.5),(-2.25, 0, 0.5),(-2.25, 0, -0.5),(-0.5, 0, -0.5),(-0.5, 0, -2.25),(0.5, 0 ,-2.25),(0.5, 0, -0.5),(2.25, 0, -0.5),(2.25, 0, 0.5,),(0.5, 0 ,0.5),(0.5, 0, 2.25)])
cmds.rename('ik_fk_switch')
ControllerAttr('ik_fk_switch',False,False,False,False,False,False,False,True,True,True,True,True,True,True,True,15,False,False,False,True,True,True)
cmds.group()
cmds.rename('ik_fk_switch_grp')
cmds.addAttr('ik_fk_switch',sn='IKFK', min = 0, max=1 ,k=1)
cmds.parentConstraint('bln_05_jnt', 'ik_fk_switch_grp')
cmds.shadingNode('reverse',n = 'ik_fk_rev',asUtility=1)
toConect = [('ik_fk_switch.IKFK','bln_01_jnt_parentConstraint1.fk_01_jntW1'),('ik_fk_switch.IKFK','bln_02_jnt_parentConstraint1.fk_02_jntW1'),('ik_fk_switch.IKFK', 'bln_03_jnt_parentConstraint1.fk_03_jntW1'),('ik_fk_switch.IKFK', 'bln_04_jnt_parentConstraint1.fk_04_jntW1'),('ik_fk_switch.IKFK', 'bln_05_jnt_parentConstraint1.fk_05_jntW1'),('ik_fk_rev.outputX', 'bln_01_jnt_parentConstraint1.ik_upr_01_jntW0'),('ik_fk_rev.outputX', 'bln_02_jnt_parentConstraint1.ik_upr_02_jntW0'),('ik_fk_switch.IKFK', 'ik_fk_rev.inputX'),('ik_fk_rev.outputX', 'bln_03_jnt_parentConstraint1.ik_lwr_01_jntW0'),('ik_fk_rev.outputX', 'bln_04_jnt_parentConstraint1.ik_lwr_02_jntW0'),('ik_fk_rev.outputX', 'bln_05_jnt_parentConstraint1.ik_lwr_03_jntW0'),('ik_fk_switch.IKFK','fk_01_ctrl_grp.visibility'),('ik_fk_rev.outputX','ik_mid_ctrl_grp.visibility'),('ik_fk_rev.outputX','ik_inr_ctrl_grp.visibility'),('ik_fk_rev.outputX','ik_ctrl_grp.visibility')]
for each in toConect:
cmds.connectAttr(each[0],each[1])
toHide = [('ikSpring_01_setup_jnt.visibility'),('ik_lwr_01_jnt.visibility'),('fk_01_jnt.visibility'),('ikSpring_01_jnt.visibility'),('ik_upr_01_jnt.visibility'),('upr_ikh.visibility'),('lwr_ikh.visibility'),('spring_ikh.visibility')]
for each in toHide:
cmds.setAttr(each,0)
createGroup = ('rig_grp','jnt_grp','rename')
for each in createGroup:
cmds.group(w=1,n=each,em=1)
toGroup = [('ikSpring_01_setup_jnt','rig_grp'),('ik_lwr_01_jnt','rig_grp'),('fk_01_jnt','rig_grp'),('ikSpring_01_jnt','rig_grp'),('upr_ikh','rig_grp'),('lwr_ikh','rig_grp'),('spring_ikh','rig_grp'),('fk_01_ctrl_grp','rig_grp'),('ik_mid_ctrl_grp','rig_grp'),('ik_inr_ctrl_grp','rig_grp'),('ik_ctrl_grp','rig_grp'),('ik_fk_switch_grp','rig_grp'),('bln_01_jnt','jnt_grp'),('jnt_grp','rename'),('rig_grp','rename')]
for each in toGroup:
cmds.parent(each[0],each[1])
#create tail setup joint function#
def BuildTailSetupJoint():
list = [('tail_01_setup_jnt',(0, 0, 0)),('tail_02_setup_jnt',(10, 0, 0)),('tail_03_setup_jnt',(20, 0, 0)),('tail_04_setup_jnt',(30, 0, 0)),('tail_05_setup_jnt',(40, 0, 0))]
for each in list:
cmds.joint(n=each[0],p=each[1])
#create tail setup rig function#
def BuildTailSetupRig():
#create FK tail setup
list = ['tail_01_FK_jnt','tail_02_FK_jnt','tail_03_FK_jnt','tail_04_FK_jnt','tail_05_FK_jnt']
for each in list:
cmds.joint(n=each)
list = [('tail_01_FK_ctrl','tail_01_FK_ctrl_grp'),('tail_02_FK_ctrl','tail_02_FK_ctrl_grp'),('tail_03_FK_ctrl','tail_03_FK_ctrl_grp'),('tail_04_FK_ctrl','tail_04_FK_ctrl_grp'),('tail_05_FK_ctrl','tail_05_FK_ctrl_grp')]
for each in list:
ctrl = cmds.circle(n=each[0],r=5,nrx = 90)
cmds.delete(ctrl,constructionHistory = True)
cmds.group(n=each[1])
cmds.parent('tail_01_FK_jnt',w=True)
list = [('tail_01_setup_jnt','tail_01_FK_ctrl_grp'),('tail_02_setup_jnt','tail_02_FK_ctrl_grp'),('tail_03_setup_jnt','tail_03_FK_ctrl_grp'),('tail_04_setup_jnt','tail_04_FK_ctrl_grp'),('tail_05_setup_jnt','tail_05_FK_ctrl_grp'),('tail_01_setup_jnt','tail_01_FK_jnt'),('tail_02_setup_jnt','tail_02_FK_jnt'),('tail_03_setup_jnt','tail_03_FK_jnt'),('tail_04_setup_jnt','tail_04_FK_jnt'),('tail_05_setup_jnt','tail_05_FK_jnt')]
for each in list:
forDel = cmds.parentConstraint(each[0],each[1],mo=False)
cmds.delete(forDel)
list = [('tail_05_FK_ctrl_grp','tail_04_FK_ctrl'),('tail_04_FK_ctrl_grp','tail_03_FK_ctrl'),('tail_03_FK_ctrl_grp','tail_02_FK_ctrl'),('tail_02_FK_ctrl_grp','tail_01_FK_ctrl')]
for each in list:
cmds.parent(each[0],each[1])
list = [('tail_01_FK_ctrl','tail_01_FK_jnt'),('tail_02_FK_ctrl','tail_02_FK_jnt'),('tail_03_FK_ctrl','tail_03_FK_jnt'),('tail_04_FK_ctrl','tail_04_FK_jnt'),('tail_05_FK_ctrl','tail_05_FK_jnt')]
for each in list:
cmds.parentConstraint(each[0],each[1],mo=True)
#create IK tail
list = ['tail_01_IK_jnt','tail_02_IK_jnt','tail_03_IK_jnt','tail_04_IK_jnt','tail_05_IK_jnt','tail_01_length_jnt','tail_02_length_jnt','tail_03_length_jnt','tail_04_length_jnt','tail_05_length_jnt','tail_start_length_jnt','tail_end_length_jnt']
for each in list:
cmds.joint(n=each)
list = [('tail_01_IK_ctrl','tail_01_IK_ctrl_grp'),('tail_02_IK_ctrl','tail_02_IK_ctrl_grp'),('tail_03_IK_ctrl','tail_03_IK_ctrl_grp')]
for each in list:
cmds.curve(n=each[0],d=1, p=[(-2.5, -5, 5),(-2.5, 5, 5),(2.5, 5, 5),(2.5, -5, 5),(2.5, -5, -5),(2.5, 5, -5),(-2.5, 5, -5),(-2.5, -5, -5),(-2.5, -5, 5),(2.5, -5, 5),(2.5, 5, 5),(2.5, 5, -5),(2.5, -5, -5),(-2.5, -5, -5),(-2.5, 5, -5),(-2.5, 5, 5)])
cmds.group(n=each[1])
cmds.parent('tail_01_IK_jnt','tail_start_length_jnt','tail_01_length_jnt',w=True)
rig tools (part 1) (line 2404)



Comments