Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #--------------------------------------------------------------------------------------
- # Rigger Tools CLASS BASED 0.03a
- # Brian Williams / [email protected] / 2011
- #--------------------------------------------------------------------------------------
- #--------------------------------------------------------------------------------------
- # Importing
- #--------------------------------------------------------------------------------------
- from pymel.core import *
- import maya.cmds as mc
- #--------------------------------------------------------------------------------------
- # TO-DO: Master
- #--------------------------------------------------------------------------------------
- '''
- -CUSTOM ATTRS: On shape node so you can share them with other nodes (ie FK/IK blend attr)
- #--------------------------------------------------------------------------------------
- # Ideas
- #--------------------------------------------------------------------------------------
- -Console GUI which shows mouseover information for buttons and printouts on errors etc
- I tried this and it works but it isnt great I will think of a better way to do it another time.
- '''
- #--------------------------------------------------------------------------------------
- class RiggerTool():
- def __new__(self):
- pass
- '''
- if window(self.mainWin, exists=True):
- deleteUI(self.mainWin)
- window(title='Rig Tool', widthHeight=(defaultWidth+3,600), mxb=False)
- '''
- def __init__(self):
- # Vars
- self.fr_LayoutColour = (.5,.5,.5)
- self.menuColour = (.43,.43,.43)
- defaultWidth = 231
- self.defaultWidth = defaultWidth
- self.defaultCpntWidth = defaultWidth-22
- #--------------------------------------------------------------------------------------
- # GUI
- #--------------------------------------------------------------------------------------
- self.mainWin = window(t='Rig-A-Majiger', widthHeight=(defaultWidth+3,750), mxb=False)
- self.myLayout = scrollLayout( bgc=(.15,.15,.15))
- #--------------------------------------------------------------------------------------
- # Selection Tools
- #--------------------------------------------------------------------------------------
- self.mainToolsFrameLayout = frameLayout(cll=False, w=self.defaultCpntWidth, l='Main Tools', p=self.myLayout, bgc=self.fr_LayoutColour)
- self.txt_Spacer = text(label='', al='left', w=self.defaultCpntWidth,p=self.myLayout)
- self.txt_SelectionTools = text(label=' Selection Tools', al='left', w=self.defaultCpntWidth,p=self.myLayout)
- self.SelectPCRCLayout = rowColumnLayout(nc=2, cw=[(1, self.defaultCpntWidth/2), (2, self.defaultCpntWidth/2)], p=self.myLayout)
- self.btn_selectParent = button(label = 'Select Parent', parent=self.SelectPCRCLayout, w=self.defaultCpntWidth/2)
- self.btn_selectChild = button(label = 'Select Child', parent=self.SelectPCRCLayout, w=self.defaultCpntWidth/2)
- self.btn_selectHierarchy = button(label = 'Select Hierarchy', parent=self.myLayout, w=self.defaultCpntWidth)
- text(label='', al='left', w=self.defaultCpntWidth,p=self.myLayout)
- self.txt_AlignmentTools = text(label=' Alignment Tools', al='left',p=self.myLayout)
- self.btn_CenterToScene = button(label = 'Center Of Scene', parent=self.myLayout, w=self.defaultCpntWidth)
- self.btn_CenterToComp = button(label = 'Center To Component', parent=self.myLayout, w=self.defaultCpntWidth)
- text(label='', al='left', w=self.defaultCpntWidth, p=self.myLayout)
- self.txt_JointTools = text(label=' Joint Tools', al='left', w=self.defaultCpntWidth, p=self.myLayout)
- #--------------------------------------------------------------------------------------
- # Joint Tools GUI
- #--------------------------------------------------------------------------------------
- self.SelectCDJoLayout = rowColumnLayout(nc=2, cw=[(1, self.defaultCpntWidth/2), (2, self.defaultCpntWidth/2)], p=self.myLayout)
- self.btn_CreateJoints = button(label = 'Create Joints', parent=self.SelectCDJoLayout, w=self.defaultCpntWidth/2)
- self.btn_DeleteJoints = button(label = 'Delete Joints', parent=self.SelectCDJoLayout, w=self.defaultCpntWidth/2)
- # Mirror Joint Tools GUI
- #--------------------------------------------------------------------------------------
- self.btn_MirrorJoints = button(label = 'Mirror Joints', parent=self.myLayout, w=self.defaultCpntWidth)
- # Align Joint Tools GUI
- #--------------------------------------------------------------------------------------
- self.btn_orientJoints = button(en= False, label = 'Orient Joints', parent=self.myLayout, w=self.defaultCpntWidth)
- self.btn_BuildIKWithPole = button(label = 'Build IKRP With Pole Vector', parent=self.myLayout, w=self.defaultCpntWidth)
- # Joint Tool Options
- #--------------------------------------------------------------------------------------
- self.mirrorJointsFrameLayout = frameLayout(cll=True, w=self.defaultCpntWidth, l='Options', p=self.myLayout, cl=True, bgc=self.menuColour)
- text(label='Mirror Joint', al='left', w=self.defaultCpntWidth,p=self.mirrorJointsFrameLayout)
- self.rc_MirrorJointXYZ = radioCollection(p=self.mirrorJointsFrameLayout)
- self.mirrorJointRowLayout = rowLayout(p=self.mirrorJointsFrameLayout,w=self.defaultCpntWidth,nc=3)
- self.rb_MirrorJoint_X = radioButton( label='X', cl=self.rc_MirrorJointXYZ, sl=True,p=self.mirrorJointRowLayout)
- self.rb_MirrorJoint_Y = radioButton( label='Y', cl=self.rc_MirrorJointXYZ,p=self.mirrorJointRowLayout)
- self.rb_MirrorJoint_Z = radioButton( label='Z', cl=self.rc_MirrorJointXYZ,p=self.mirrorJointRowLayout)
- self.mirrorOffsetRCLayout = rowColumnLayout(nc=2, cw=[(1, 50), (2, 40)], p=self.mirrorJointsFrameLayout)
- self.txt_mirrorOffset = text(label=' Offset:', al='left', w=self.defaultCpntWidth-20,p=self.mirrorOffsetRCLayout)
- self.intField_mirrorOffset = intField(p=self.mirrorOffsetRCLayout)
- #text(label='Allign Joint', al='left', w=self.defaultCpntWidth,p=self.mirrorJointsFrameLayout)
- #--------------------------------------------------------------------------------------
- # Utility Tools GUI
- #--------------------------------------------------------------------------------------
- text(label='', al='left', w=self.defaultCpntWidth, p=self.myLayout)
- self.txt_NameTools = text(label=' Utility Tools', al='left', w=self.defaultCpntWidth, p=self.myLayout)
- # Rename Joints GUI
- #--------------------------------------------------------------------------------------
- self.RenameJointSpacer = columnLayout(parent=self.myLayout,w=self.defaultCpntWidth )
- self.btn_RenameJoints = button(l='Rename Tool', parent=self.RenameJointSpacer, w=self.defaultCpntWidth-1)
- self.btn_SubmitRename = button(label = 'Submit', parent=self.RenameJointSpacer, w=self.defaultCpntWidth, vis=False)
- self.renameJointsFrameLayout = frameLayout(label='Rename Tool',cll=False, w=self.defaultCpntWidth, p=self.RenameJointSpacer, vis=False, bgc=self.fr_LayoutColour)
- self.txtRenameUpdaterLayout = rowColumnLayout(nc=2, cw=[(1, 175), (2, 30)], p=self.renameJointsFrameLayout)
- self.renameJointsUpdate = button(label = 'Update Preview', p=self.txtRenameUpdaterLayout, w=160)
- self.renameJointsReset = button(label = 'x', p=self.txtRenameUpdaterLayout, w=20)
- self.txtNumNamerLayout = rowColumnLayout(nc=4, cw=[(1, 70), (2, 30), (3, 70), (4, 30)], p=self.renameJointsFrameLayout)
- self.txt_numberNameerLable = text(label=' Number:', al='left', w=self.defaultCpntWidth,p=self.txtNumNamerLayout)
- self.numberNamerToggleBox = checkBox(self.txtNumNamerLayout, l=' ')
- self.txt_numberNamerBufferLable = text(label=' Digits:', al='left', w=self.defaultCpntWidth,p=self.txtNumNamerLayout)
- self.intField_number = intField(w=20, p=self.txtNumNamerLayout)
- self.txtRenameTrimEndsCLayout = rowColumnLayout(nc=4, cw=[(1, 70), (2, 30), (3,70), (4,30)], p=self.renameJointsFrameLayout)
- self.txt_TrimStart = text(label=' Trim Start:', al='left', w=self.defaultCpntWidth,p=self.txtRenameTrimEndsCLayout)
- self.intField_TrimStart = intField(w=20, p=self.txtRenameTrimEndsCLayout)
- self.txt_TrimStart = text(label=' Trim end:', al='left', w=self.defaultCpntWidth,p=self.txtRenameTrimEndsCLayout)
- self.intField_TrimEnd = intField(w=20, p=self.txtRenameTrimEndsCLayout)
- self.txtRenamePrefixCLayout = rowColumnLayout(nc=2, cw=[(1, 40), (2, 50)], p=self.renameJointsFrameLayout)
- self.txt_RenamePrefix = text(label=' Prefix:', al='left', w=self.defaultCpntWidth,p=self.txtRenamePrefixCLayout)
- self.txtField_RenamePrefix = textField(w=self.defaultCpntWidth-43, p=self.txtRenamePrefixCLayout)
- self.txtRenameNameCLayout = rowColumnLayout(nc=2, cw=[(1, 40), (2, 50)], p=self.renameJointsFrameLayout)
- self.txt_RenameName = text(label=' Name:', al='left', w=self.defaultCpntWidth,p=self.txtRenameNameCLayout)
- self.txtField_RenameName = textField(w=self.defaultCpntWidth-43, p=self.txtRenameNameCLayout)
- self.txtRenameSuffixCLayout = rowColumnLayout(nc=2, cw=[(1, 40), (2, 50)], p=self.renameJointsFrameLayout)
- self.txt_RenameSuffix = text(label=' Suffix:', al='left', w=self.defaultCpntWidth,p=self.txtRenameSuffixCLayout)
- self.txtField_RenameSuffix = textField(w=self.defaultCpntWidth-43,p=self.txtRenameSuffixCLayout)
- self.txt_FindReplace = text(label=' Find Replace', al='left', w=self.defaultCpntWidth,p=self.renameJointsFrameLayout)
- self.txtRenameFindReplaceCLayout = rowColumnLayout(nc=2, cw=[(1, 102), (2, 102)], p=self.renameJointsFrameLayout)
- self.txtField_RenameFind = textField(w=20, p=self.txtRenameFindReplaceCLayout)
- self.txtField_RenameReplace = textField(w=20, p=self.txtRenameFindReplaceCLayout)
- self.txt_RenameJoints = text(label=' Preview', al='left', w=self.defaultCpntWidth,p=self.renameJointsFrameLayout)
- # Advanced Name GUI
- #--------------------------------------------------------------------------------------
- self.ADVNameSpacer = columnLayout(parent=self.myLayout,w=self.defaultCpntWidth )
- self.btn_ADVName = button(label = 'Advanced Name Tool', parent=self.ADVNameSpacer, w=self.defaultCpntWidth-1, en=False)
- self.btn_ADVNameSubmit = button(label = 'Submit', parent=self.ADVNameSpacer, w=self.defaultCpntWidth,vis=False)
- self.ADVNameFrameLayout = frameLayout(l='Advanced Name Tool',cll=False, w=self.defaultCpntWidth, p=self.ADVNameSpacer, vis=False, bgc=self.fr_LayoutColour)
- self.btn_ADVUpdate = button(label = 'Update Preview', p=self.ADVNameFrameLayout, w=self.defaultCpntWidth)
- self.txt_Spacer = text(label='', al='left', w=self.defaultCpntWidth,p=self.ADVNameFrameLayout)
- self.ADVNameTrimSpacer = columnLayout(parent=self.ADVNameFrameLayout,w=self.defaultCpntWidth )
- self.txt_sFormater = text(label=' String Formatter', al='left', w=self.defaultCpntWidth,p=self.ADVNameTrimSpacer)
- self.txtField_sFormater = textField(w=self.defaultCpntWidth, p=self.ADVNameTrimSpacer)
- self.txt_ADVPreview = text(label=' Preview', al='left', w=self.defaultCpntWidth,p=self.ADVNameFrameLayout)
- #--------------------------------------------------------------------------------------
- #--------------------------------------------------------------------------------------
- # Draws Window and GUI Widgets
- #--------------------------------------------------------------------------------------
- self.btn_selectParent.setCommand(self.selectParent)
- self.btn_selectChild.setCommand(self.selectChild)
- self.btn_selectHierarchy.setCommand(self.selectHierarchy)
- self.btn_CenterToScene.setCommand(self.centerToScene)
- self.btn_CenterToComp.setCommand(self.centerToComp)
- self.btn_CreateJoints.setCommand(self.createJoints)
- self.btn_DeleteJoints.setCommand(self.deleteJoints)
- self.btn_MirrorJoints.setCommand(self.jointMirror)
- self.btn_BuildIKWithPole.setCommand(self.BuildIKWithPole)
- self.renameJointsUpdate.setCommand(self.updatePreview)
- self.renameJointsReset.setCommand(self.resetPreview)
- self.btn_RenameJoints.setCommand(self.renameJoints)
- self.btn_SubmitRename.setCommand(self.renameJointsSubmit)
- self.btn_ADVName.setCommand(self.advName)
- self.btn_ADVNameSubmit.setCommand(self.advNameSubmit)
- #--------------------------------------------------------------------------------------
- self.mainWin.show()
- #--------------------------------------------------------------------------------------
- #--------------------------------------------------------------------------------------
- # Main Methods
- #--------------------------------------------------------------------------------------
- # Selection Tools
- #--------------------------------------------------------------------------------------
- # Scrolls through Parents until reaches the top of Hierarchy then Stops
- def selectParent(self,*args):
- if len(ls(sl=True)) == 0:
- print '>>>>>>>>>> Incorrect selection: Please select a bone/joint'
- else:
- self.selectHierarchy()
- select(ls(sl=True)[0])
- print '>>>>>>>>>> Current Selection is ROOT: Parent'
- def selectChild(self,*args):
- if len(ls(sl=True)) == 0:
- print '>>>>>>>>>> Incorrect selection: Please select a bone/joint'
- else:
- self.selectHierarchy()
- select( ls(sl=True)[-1:])
- print '>>>>>>>>>> Current Selection is ROOT: Child'
- # Selects the whole hierarchy no matter which joint is selected
- def selectHierarchy(self, *args):
- if len(ls(sl=True)) == 0:
- print '>>>>>>>>>> Incorrect selection: Please select a bone/joint'
- else:
- curSel = listRelatives(ls(sl=True), p=True)
- while len(curSel) > 0:
- curParent = curSel[0]
- curSel = listRelatives(curSel[0],p=True)
- select(curParent)
- select(hi=True)
- #--------------------------------------------------------------------------------------
- # Allignment Tools
- #--------------------------------------------------------------------------------------
- # This centers any object to the middle of the scene without altering the Y position
- def centerToScene(*args):
- if len(ls(sl=True)) == 0:
- print '>>>>>>>>>> Incorrect selection: Selection was empty!'
- elif len(ls(sl=True)) > 1:
- select(ls(sl=True)[0])
- xform(ls(sl=True)[0], t=(0, xform(q=True,ws=True, t=True)[1],0), ws=True )
- makeIdentity( apply=True, t=1, r=1, s=1, n=0 )
- else:
- xform(ls(sl=True)[0], t=(0, xform(q=True,ws=True, t=True)[1],0), ws=True )
- makeIdentity( apply=True, t=1, r=1, s=1, n=0 )
- # This centers any object to the center of the bounding box of a selection of components
- def centerToComp(*args):
- if len(ls(sl=True, o=True)) == 2:
- bBox = polyEvaluate(bc=True)
- centerPosition = ((bBox[0][0] + bBox[0][1]) / 2, (bBox[1][0] + bBox[1][1]) / 2, (bBox[2][0] + bBox[2][1]) / 2)
- xform(ls(sl=True, o=True)[1], ws=True, t=(centerPosition))
- select(cl=True)
- print '>>>>>>>>>> Object move complete'
- else:
- print '>>>>>>>>>> Incorrect selection: Select components then shift select the object you want moved'
- #--------------------------------------------------------------------------------------
- # Joint Tools
- #--------------------------------------------------------------------------------------
- # This Mirrors a Joint Chain
- '''
- TO-DO
- -Add toggle for local and worldspace move
- -Fix Multi Joint Selection <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- -add toggle for auto hierachy selection
- - FIX BROKEN DELETE JOINT LOGIC
- '''
- def createJoints(self, *args):
- runtime.JointTool()
- def deleteJoints(self, *args):
- jList = []
- selChain = None
- curSelJoint = ls(sl=True)
- #Selects boneChain and puts it into an array/list
- self.selectHierarchy()
- jointChain = ls(sl=True)
- select(curSelJoint)
- if len(jointChain) is not 0:
- if curSelJoint[0] == jointChain[0]:
- delete()
- elif curSelJoint[0] == jointChain[len(jointChain)-1]:
- select(curSelJoint)
- delete()
- else:
- pickWalk(d='Up')
- jList.append(ls(sl=True)[0])
- select(curSelJoint)
- jList.append(ls(sl=True)[0])
- select(curSelJoint)
- pickWalk(d='Down')
- jList.append(ls(sl=True)[0])
- select(jList[0])
- parent(jList[2])
- select(curSelJoint)
- delete()
- else:
- print('>>>>>>>>>> Incorrect selection: Please select a bone/joint')
- def jointMirror(self, *args):
- if len(ls(sl=True, type='joint')) == 0:
- print '>>>>>>>>>> Incorrect selection: Please select a bone/joint'
- else:
- self.selectHierarchy()
- selectedJoints = ls(sl=True)
- self.selectParent()
- duplicate(rc=True)
- self.selectHierarchy()
- dupedJoints = ls(sl=True)
- for i in range(len(dupedJoints)):
- currentJointPos = xform(selectedJoints[i], ws=True, translation=True, q=True)
- if self.rb_MirrorJoint_X.getSelect():
- xform(dupedJoints[i], ws=True, t=(-currentJointPos[0]+self.intField_mirrorOffset.getValue(),currentJointPos[1],currentJointPos[2]))
- elif self.rb_MirrorJoint_Y.getSelect():
- xform(dupedJoints[i], ws=True, t=(currentJointPos[0],-currentJointPos[1]+self.intField_mirrorOffset.getValue(),currentJointPos[2]))
- elif self.rb_MirrorJoint_Z.getSelect():
- xform(dupedJoints[i], ws=True, t=(currentJointPos[0],currentJointPos[1],-currentJointPos[2]+self.intField_mirrorOffset.getValue()))
- select(cl=True)
- self.intField_mirrorOffset.setValue(0)
- #--------------------------------------------------------------------------------------
- txtFieldArrayRenamer = []
- #--------------------------------------------------------------------------------------
- def BuildIKWithPole (self, *args):
- if len(ls(sl=True)) is 0:
- print '>>>>>>>>>> Nothing Selected: Please select a middle joint.'
- else:
- jointChain = []
- tempChain = []
- # Saves the first selected joint (Should be the poleVector Control joint)
- selJoint = ls(sl=True)
- #---------------------------------------------------------------------
- # Builds tempChain with the selected joint and surrounded ones
- #---------------------------------------------------------------------
- pickWalk(d='Up')
- tempChain.append(ls(sl=True)[0])
- select(selJoint)
- tempChain.append(ls(sl=True)[0])
- select(selJoint)
- pickWalk(d='Down')
- tempChain.append(ls(sl=True)[0])
- #---------------------------------------------------------------------
- for i in tempChain:
- if i not in jointChain:
- jointChain.append(i)
- if len(jointChain) != 3:
- print '>>>>>>>>>> Joint chain is not compatible. Please choose a middle joint.'
- select(cl=True)
- else:
- #---------------------------------------------------------------------
- # Builds IKRP & pole Vector
- #---------------------------------------------------------------------
- select(cl=True)
- select(jointChain[0].rotatePivot, r=True)
- select(jointChain[2].rotatePivot, add=True)
- ikHandle(sol='ikRPsolver')
- self.aimPole(selJoint)
- #---------------------------------------------------------------------
- def aimPole(self, selJointP):
- IK_Handle = ls(sl=True)[0]
- vec = IK_Handle.poleVector.get()
- myrot=[]
- xAngle=0.0
- zAngle=0.0
- xyLength=0.0
- vecLength=0.0
- xyLength=float(util.sqrt( ( (vec[0]) * (vec[0]) ) + ( (vec[1]) * (vec[1]) ) ))
- vecLength=float(util.sqrt( ( (vec[0]) * (vec[0]) ) + ( (vec[1]) * (vec[1]) ) + ( (vec[2]) * (vec[2]) ) ))
- if xyLength == 0:
- if (vec[0]) > 0:
- zAngle = util.radians( 90 )
- else:
- zAngle = util.radians( -90 )
- else:
- zAngle = float(util.acos((vec[1]) / xyLength))
- xAngle = float(util.acos(xyLength / vecLength))
- if (vec[2]) > 0:
- xAngle = xAngle
- else:
- xAngle = -xAngle
- myrot.append(util.degrees(xAngle))
- if (vec[0]) > 0:
- zAngle = -zAngle
- else:
- zAngle = zAngle
- myrot.append(util.degrees( zAngle ))
- pVec = spaceLocator(name=str(selJointP[0][:]) + '_pVec')
- xform(ro=(myrot[0], 0, myrot[1]))
- startjoint=str(ikHandle(IK_Handle,q=1,startJoint=1))
- endeffector=str(ikHandle(IK_Handle,q=1,endEffector=1))
- pointConstraint(startjoint,endeffector, pVec,name='tempconstraint')
- delete("tempconstraint")
- poleVectorConstraint(pVec,IK_Handle)
- del(pVec)
- #--------------------------------------------------------------------------------------
- # Utility Tools
- #--------------------------------------------------------------------------------------
- # This renames joints and allows the ability to add a suffix and prefix.
- def renameJoints(self, *args):
- self.intField_number.setValue(1)
- self.selChain = []
- if len(ls(sl=True)) == 0:
- print '>>>>>>>>>> Empty Selection!'
- else:
- self.selectHierarchy()
- self.selChain = ls(sl=True)
- # makes the textfields and populates them with joint names
- for i in self.selChain:
- self.txtFieldArrayRenamer.append(textField(p=self.renameJointsFrameLayout))
- self.txtFieldArrayRenamer[len(self.txtFieldArrayRenamer)-1].setText(i)
- self.renameJointsFrameLayout.setVisible(val=True)
- self.btn_RenameJoints.setVisible(False)
- self.btn_SubmitRename.setVisible(True)
- self.btn_ADVName.setVisible(False)
- def renameJointsSubmit(self, *args):
- boneItrCount = 0
- # FIX THIS BUY MAKING self.selChain copy the data from ls(sl=True instead of just pointing to it)
- if not objExists(self.selChain[0]):
- for i in self.txtFieldArrayRenamer:
- deleteUI(i)
- self.renameJointsFrameLayout.setVisible(val=False)
- self.btn_RenameJoints.setEnable(True)
- print '>>>>>>>>>> Joint Chain was deleted: Rename was not completed'
- else:
- self.renameJointsFrameLayout.setVisible(val=False)
- for i in self.txtFieldArrayRenamer:
- if len(i.getText()) == 0:
- rename(self.selChain[boneItrCount], self.selChain[boneItrCount])
- deleteUI(i)
- boneItrCount += 1
- else:
- rename(self.selChain[boneItrCount],i.getText())
- deleteUI(i)
- boneItrCount += 1
- # Resets the array and re-enables the Rename Joint button
- boneItrCount = 0
- self.txtFieldArrayRenamer[:] = []
- self.selChain[:] = []
- self.txtField_RenamePrefix.setText('')
- self.txtField_RenameSuffix.setText('')
- self.txtField_RenameName.setText('')
- self.txtField_RenameFind.setText('')
- self.txtField_RenameReplace.setText('')
- self.intField_number.setValue(1)
- self.intField_TrimStart.setValue(0)
- self.intField_TrimEnd.setValue(0)
- self.numberNamerToggleBox.setValue(False)
- self.btn_SubmitRename.setVisible(False)
- self.btn_RenameJoints.setVisible(True)
- self.btn_ADVName.setVisible(True)
- def resetPreview (self, *args):
- for i in range(len(self.txtFieldArrayRenamer)):
- self.txtFieldArrayRenamer[i].setText(self.selChain[i])
- def updatePreview (self, *args):
- counter = 1
- for i in range(len(self.txtFieldArrayRenamer)):
- if len(self.txtField_RenameName.getText()) == 0:
- if self.numberNamerToggleBox.getValue() == True:
- self.txtFieldArrayRenamer[i].setText(self.selChain[i])
- self.txtFieldArrayRenamer[i].setText(self.trimName(self.txtFieldArrayRenamer[i].getText(),self.intField_TrimStart.getValue(),self.intField_TrimEnd.getValue()))
- self.txtFieldArrayRenamer[i].setText(self.txtField_RenamePrefix.getText() + self.txtFieldArrayRenamer[i].getText() + self.txtField_RenameSuffix.getText() + '_' + str(counter).zfill(self.intField_number.getValue()+1))
- counter += 1
- elif self.numberNamerToggleBox.getValue() == False:
- self.txtFieldArrayRenamer[i].setText(self.selChain[i])
- self.txtFieldArrayRenamer[i].setText(self.trimName(self.txtFieldArrayRenamer[i].getText(),self.intField_TrimStart.getValue(),self.intField_TrimEnd.getValue()))
- self.txtFieldArrayRenamer[i].setText(self.txtField_RenamePrefix.getText() + self.txtFieldArrayRenamer[i].getText() + self.txtField_RenameSuffix.getText())
- else:
- if self.numberNamerToggleBox.getValue() == True:
- self.txtFieldArrayRenamer[i].setText(self.selChain[i])
- self.txtFieldArrayRenamer[i].setText(self.trimName(self.txtFieldArrayRenamer[i].getText(),self.intField_TrimStart.getValue(),self.intField_TrimEnd.getValue()))
- self.txtFieldArrayRenamer[i].setText(self.txtField_RenamePrefix.getText() + self.txtField_RenameName.getText() + self.txtField_RenameSuffix.getText() + '_' + str(counter).zfill(self.intField_number.getValue()+1))
- counter += 1
- elif self.numberNamerToggleBox.getValue() == False:
- self.txtFieldArrayRenamer[i].setText(self.selChain[i])
- self.txtFieldArrayRenamer[i].setText(self.trimName(self.txtFieldArrayRenamer[i].getText(),self.intField_TrimStart.getValue(),self.intField_TrimEnd.getValue()))
- self.txtFieldArrayRenamer[i].setText(self.txtField_RenamePrefix.getText() + self.txtField_RenameName.getText() + self.txtField_RenameSuffix.getText())
- # Searches and Replaces whats in the replace txtField with whats in the Find txtField
- for i in range(len(self.txtFieldArrayRenamer)):
- self.txtFieldArrayRenamer[i].setText(self.txtFieldArrayRenamer[i].getText().replace(self.txtField_RenameFind.getText(), self.txtField_RenameReplace.getText()))
- #--------------------------------------------------------------------------------------
- # This Allows you to trim the front or back off names (i.e. bad suffix/prefix's).
- def advName(self,*args):
- self.selChain = []
- if len(ls(sl=True)) == 0:
- print '>>>>>>>>>> Empty selection!'
- else:
- self.selectHierarchy()
- self.selChain = ls(sl=True)
- # makes the textfields and populates them with joint names
- for i in self.selChain:
- self.txtFieldArrayRenamer.append(textField(p=self.ADVNameFrameLayout))
- self.txtFieldArrayRenamer[len(self.txtFieldArrayRenamer)-1].setText(i)
- self.ADVNameFrameLayout.setVisible(val=True)
- self.btn_ADVName.setVisible(False)
- self.btn_ADVNameSubmit.setVisible(True)
- self.btn_RenameJoints.setVisible(False)
- def advNameSubmit(self, *args):
- boneItrCount = 0
- # FIX THIS BY MAKING self.selChain copy the data from ls(sl=True instead of just pointing to it)
- if not objExists(self.selChain[0]):
- for i in self.txtFieldArrayRenamer:
- deleteUI(i)
- self.ADVNameFrameLayout.setVisible(val=False)
- self.btn_RenameJoints.setEnable(True)
- print '>>>>>>>>>> Joint Chain was deleted: Rename was not completed'
- else:
- self.ADVNameFrameLayout.setVisible(val=False)
- for i in self.txtFieldArrayRenamer:
- if len(i.getText()) == 0:
- rename(self.selChain[boneItrCount], self.selChain[boneItrCount] + self.txtField_sFormater.getText())
- deleteUI(i)
- boneItrCount += 1
- else:
- rename(self.selChain[boneItrCount], i.getText() + self.txtField_sFormater.getText())
- deleteUI(i)
- boneItrCount += 1
- # Resets the array and re-enables the Rename Joint button
- self.txtFieldArrayRenamer[:] = []
- self.selChain[:] = []
- self.txtField_sFormater.setText('')
- self.btn_RenameJoints.setVisible(True)
- self.btn_ADVName.setVisible(True)
- self.btn_ADVNameSubmit.setVisible(False)
- def trimName(self, nameForProcess='', trimStart=0, trimEnd=0):
- if trimStart == 0 and trimEnd ==0:
- return nameForProcess
- elif trimStart == 0 and not trimEnd == 0:
- return nameForProcess[: -trimEnd]
- elif not trimStart == 0 and trimEnd == 0:
- return nameForProcess[trimStart:]
- else:
- return nameForProcess[trimStart:-trimEnd]
- #--------------------------------------------------------------------------------------
- testApp = RiggerTool()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement