def doOptions(input_pelvis, input_hipAimAxis, input_hipFrontAxis, input_pelvisAimAxis, input_pelvisFrontAxis): """Specifies the function called when the apply or create button is clicked""" try: # validate selection selection = utils.dg.validateSelection( type='transform', msg= 'Please select your hip object and then the twist object to constrain.', exact=2) # validate pelvis pelvis = cmds.textFieldGrp(input_pelvis, q=True, tx=True) utils.dg.verifyNode(pelvis) # create the hip constraint cmds.am_hipConstraint(selection[1], pelvisObject=pelvis, hipObject=selection[0], ha=cmds.floatFieldGrp(input_hipAimAxis, q=True, v=True), hf=cmds.floatFieldGrp(input_hipFrontAxis, q=True, v=True), pa=cmds.floatFieldGrp(input_pelvisAimAxis, q=True, v=True), pf=cmds.floatFieldGrp(input_pelvisFrontAxis, q=True, v=True)) except: raise
def verifyValues(outNum, hcNode, expHa, expHf, expPa, expPf): """Print test results""" print '%s (test %i):'%(hcNode, outNum) print'\tha: %s'%(expHa == cmds.am_hipConstraint(hcNode, q=True, ha=True)) print'\thf: %s'%(expHf == cmds.am_hipConstraint(hcNode, q=True, hf=True)) print'\tpa: %s'%(expPa == cmds.am_hipConstraint(hcNode, q=True, pa=True)) print'\tpf: %s'%(expPf == cmds.am_hipConstraint(hcNode, q=True, pf=True))
def verifyObjects(outNum, hcNode, expPelvis, expHip, expTwist): """Print test results""" print '%s (test %i):' % (hcNode, outNum) print '\tpelvis: %s' % (expPelvis == cmds.am_hipConstraint( hcNode, q=True, p=True)) print '\thip: %s' % (expHip == cmds.am_hipConstraint( hcNode, q=True, h=True)) print '\ttwist: %s' % (expTwist == cmds.listConnections( '%s.rotate' % hcNode, scn=True)[0])
def verifyValues(outNum, hcNode, expHa, expHf, expPa, expPf): """Print test results""" print '%s (test %i):' % (hcNode, outNum) print '\tha: %s' % (expHa == cmds.am_hipConstraint( hcNode, q=True, ha=True)) print '\thf: %s' % (expHf == cmds.am_hipConstraint( hcNode, q=True, hf=True)) print '\tpa: %s' % (expPa == cmds.am_hipConstraint( hcNode, q=True, pa=True)) print '\tpf: %s' % (expPf == cmds.am_hipConstraint( hcNode, q=True, pf=True))
def doOptions(input_pelvis, input_hipAimAxis, input_hipFrontAxis, input_pelvisAimAxis, input_pelvisFrontAxis): """Specifies the function called when the apply or create button is clicked""" try: # validate selection selection = utils.dg.validateSelection(type='transform', msg='Please select your hip object and then the twist object to constrain.', exact=2) # validate pelvis pelvis = cmds.textFieldGrp(input_pelvis, q=True, tx=True) utils.dg.verifyNode(pelvis) # create the hip constraint cmds.am_hipConstraint( selection[1], pelvisObject = pelvis, hipObject = selection[0], ha=cmds.floatFieldGrp(input_hipAimAxis, q=True, v=True), hf=cmds.floatFieldGrp(input_hipFrontAxis, q=True, v=True), pa=cmds.floatFieldGrp(input_pelvisAimAxis, q=True, v=True), pf=cmds.floatFieldGrp(input_pelvisFrontAxis, q=True, v=True)) except: raise
def verifyObjects(outNum, hcNode, expPelvis, expHip, expTwist): """Print test results""" print '%s (test %i):'%(hcNode, outNum) print'\tpelvis: %s'%(expPelvis == cmds.am_hipConstraint(hcNode, q=True, p=True)) print'\thip: %s'%(expHip == cmds.am_hipConstraint(hcNode, q=True, h=True)) print'\ttwist: %s'%(expTwist == cmds.listConnections('%s.rotate'%hcNode, scn=True)[0])
def unitTest(): """A simple unit test for the am_hipConstraint command""" # make joints jr = 0.1 pelvis = cmds.joint(n='pelvis', p=[0,2,0], rad=jr) cmds.select(cl=True) hip = cmds.joint(n='hip', p=[0.4,2,0], rad=jr) knee = cmds.joint(n='knee', p=[0.4,1.05,0.1], rad=jr) cmds.joint(hip, e=True, oj='xzy', sao='zup') foot = cmds.joint(n='foot', p=[0.4,0.1,0], rad=jr) cmds.joint(knee, e=True, oj='xzy', sao='zup') cmds.joint(foot, e=True, o=[0,0,0]) cmds.parent(hip, pelvis) cmds.select(hip) twist = cmds.joint(n='twist', rad=jr*2) # test create mode print '---TESTING CREATE---' def verifyObjects(outNum, hcNode, expPelvis, expHip, expTwist): """Print test results""" print '%s (test %i):'%(hcNode, outNum) print'\tpelvis: %s'%(expPelvis == cmds.am_hipConstraint(hcNode, q=True, p=True)) print'\thip: %s'%(expHip == cmds.am_hipConstraint(hcNode, q=True, h=True)) print'\ttwist: %s'%(expTwist == cmds.listConnections('%s.rotate'%hcNode, scn=True)[0]) hc = cmds.am_hipConstraint([pelvis,hip,twist]) verifyObjects(0, hc, pelvis, hip, twist) cmds.delete(hc) hc = cmds.am_hipConstraint([hip,twist], pelvisObject=pelvis) verifyObjects(1, hc, pelvis, hip, twist) cmds.delete(hc) hc = cmds.am_hipConstraint([pelvis,twist], hipObject=hip) verifyObjects(2, hc, pelvis, hip, twist) # test edit mode def compareVectors(listVec, tupleVec): """Return test result comparing vectors""" return listVec[0]==tupleVec[0] and listVec[1]==tupleVec[1] and listVec[2]==tupleVec[2] def verifyValues(outNum, hcNode, expHa, expHf, expPa, expPf): """Print test results""" print '%s (test %i):'%(hcNode, outNum) print'\tha: %s'%(expHa == cmds.am_hipConstraint(hcNode, q=True, ha=True)) print'\thf: %s'%(expHf == cmds.am_hipConstraint(hcNode, q=True, hf=True)) print'\tpa: %s'%(expPa == cmds.am_hipConstraint(hcNode, q=True, pa=True)) print'\tpf: %s'%(expPf == cmds.am_hipConstraint(hcNode, q=True, pf=True)) print '---TESTING EDIT---' cmds.am_hipConstraint(hc, e=True, p=foot) verifyObjects(0, hc, foot, hip, twist) cmds.am_hipConstraint(hc, e=True, h=pelvis) verifyObjects(1, hc, foot, pelvis, twist) cmds.am_hipConstraint(hc, e=True, h=hip, p=pelvis) verifyObjects(2, hc, pelvis, hip, twist) ha = [2,0,0] hf = [0,0,2] pa = [1.5,0,0] pf = [1.2,0,0] cmds.am_hipConstraint(hc, e=True, ha=ha, hf=hf, pa=pa, pf=pf) verifyValues(0, hc, ha, hf, pa, pf) # test query mode print '---TESTING QUERY---' print 'hip: %s'%(cmds.am_hipConstraint(hc, q=True, h=True) == cmds.listConnections('%s.hip'%hc)[0]) print 'pelv: %s'%(cmds.am_hipConstraint(hc, q=True, p=True) == cmds.listConnections('%s.pelvis'%hc)[0]) print 'hAim: %s'%compareVectors(cmds.am_hipConstraint(hc, q=True, ha=True), cmds.getAttr('%s.hipAim'%hc)[0]) print 'hFor: %s'%compareVectors(cmds.am_hipConstraint(hc, q=True, hf=True), cmds.getAttr('%s.hipFront'%hc)[0]) print 'pAim: %s'%compareVectors(cmds.am_hipConstraint(hc, q=True, pa=True), cmds.getAttr('%s.pelvisAim'%hc)[0]) print 'pFor: %s'%compareVectors(cmds.am_hipConstraint(hc, q=True, pf=True), cmds.getAttr('%s.pelvisFront'%hc)[0]) cmds.select(pelvis)
def unitTest(): """A simple unit test for the am_hipConstraint command""" # make joints jr = 0.1 pelvis = cmds.joint(n='pelvis', p=[0, 2, 0], rad=jr) cmds.select(cl=True) hip = cmds.joint(n='hip', p=[0.4, 2, 0], rad=jr) knee = cmds.joint(n='knee', p=[0.4, 1.05, 0.1], rad=jr) cmds.joint(hip, e=True, oj='xzy', sao='zup') foot = cmds.joint(n='foot', p=[0.4, 0.1, 0], rad=jr) cmds.joint(knee, e=True, oj='xzy', sao='zup') cmds.joint(foot, e=True, o=[0, 0, 0]) cmds.parent(hip, pelvis) cmds.select(hip) twist = cmds.joint(n='twist', rad=jr * 2) # test create mode print '---TESTING CREATE---' def verifyObjects(outNum, hcNode, expPelvis, expHip, expTwist): """Print test results""" print '%s (test %i):' % (hcNode, outNum) print '\tpelvis: %s' % (expPelvis == cmds.am_hipConstraint( hcNode, q=True, p=True)) print '\thip: %s' % (expHip == cmds.am_hipConstraint( hcNode, q=True, h=True)) print '\ttwist: %s' % (expTwist == cmds.listConnections( '%s.rotate' % hcNode, scn=True)[0]) hc = cmds.am_hipConstraint([pelvis, hip, twist]) verifyObjects(0, hc, pelvis, hip, twist) cmds.delete(hc) hc = cmds.am_hipConstraint([hip, twist], pelvisObject=pelvis) verifyObjects(1, hc, pelvis, hip, twist) cmds.delete(hc) hc = cmds.am_hipConstraint([pelvis, twist], hipObject=hip) verifyObjects(2, hc, pelvis, hip, twist) # test edit mode def compareVectors(listVec, tupleVec): """Return test result comparing vectors""" return listVec[0] == tupleVec[0] and listVec[1] == tupleVec[ 1] and listVec[2] == tupleVec[2] def verifyValues(outNum, hcNode, expHa, expHf, expPa, expPf): """Print test results""" print '%s (test %i):' % (hcNode, outNum) print '\tha: %s' % (expHa == cmds.am_hipConstraint( hcNode, q=True, ha=True)) print '\thf: %s' % (expHf == cmds.am_hipConstraint( hcNode, q=True, hf=True)) print '\tpa: %s' % (expPa == cmds.am_hipConstraint( hcNode, q=True, pa=True)) print '\tpf: %s' % (expPf == cmds.am_hipConstraint( hcNode, q=True, pf=True)) print '---TESTING EDIT---' cmds.am_hipConstraint(hc, e=True, p=foot) verifyObjects(0, hc, foot, hip, twist) cmds.am_hipConstraint(hc, e=True, h=pelvis) verifyObjects(1, hc, foot, pelvis, twist) cmds.am_hipConstraint(hc, e=True, h=hip, p=pelvis) verifyObjects(2, hc, pelvis, hip, twist) ha = [2, 0, 0] hf = [0, 0, 2] pa = [1.5, 0, 0] pf = [1.2, 0, 0] cmds.am_hipConstraint(hc, e=True, ha=ha, hf=hf, pa=pa, pf=pf) verifyValues(0, hc, ha, hf, pa, pf) # test query mode print '---TESTING QUERY---' print 'hip: %s' % (cmds.am_hipConstraint(hc, q=True, h=True) == cmds.listConnections('%s.hip' % hc)[0]) print 'pelv: %s' % (cmds.am_hipConstraint(hc, q=True, p=True) == cmds.listConnections('%s.pelvis' % hc)[0]) print 'hAim: %s' % compareVectors( cmds.am_hipConstraint(hc, q=True, ha=True), cmds.getAttr('%s.hipAim' % hc)[0]) print 'hFor: %s' % compareVectors( cmds.am_hipConstraint(hc, q=True, hf=True), cmds.getAttr('%s.hipFront' % hc)[0]) print 'pAim: %s' % compareVectors( cmds.am_hipConstraint(hc, q=True, pa=True), cmds.getAttr('%s.pelvisAim' % hc)[0]) print 'pFor: %s' % compareVectors( cmds.am_hipConstraint(hc, q=True, pf=True), cmds.getAttr('%s.pelvisFront' % hc)[0]) cmds.select(pelvis)
def doSetup(baseName, numberTwistJoints, knee, hip, pelvis, hipAimAxis, hipFrontAxis, pelvisAimAxis, pelvisFrontAxis): """This function creates the new twist joints and returns a list of their names.""" try: # validate baseName utils.dg.validateNodeName(baseName) # validate incoming object names utils.dg.verifyNode(knee) utils.dg.verifyNode(hip) utils.dg.verifyNode(pelvis) # get the translation value for the knee kneeTranslate = cmds.getAttr('%s.translate'%knee)[0] # see if there is a side label bodySide = cmds.getAttr('%s.side'%hip) # find out what rotate order the hip is using rotateOrder = cmds.getAttr('%s.rotateOrder'%hip) # create the twist joints twistJoints = [] for i in range(numberTwistJoints): cmds.select(cl=True) newJoint = cmds.joint(name='%s%s'%(baseName, i + 1)) # set up the first joint if i == 0: newJoint = cmds.parent(newJoint, hip)[0] jointRadius = 1.0 jointOrient = [] if cmds.objectType(hip, isType='joint'): jointRadius = cmds.getAttr('%s.radius'%hip) * 0.5 cmds.setAttr('%s.radius'%newJoint, jointRadius) cmds.setAttr('%s.jointOrient'%newJoint, 0,0,0) cmds.setAttr('%s.translate'%newJoint, 0,0,0) # create the hip constraint cmds.am_hipConstraint( newJoint, pelvisObject = pelvis, hipObject = hip, ha=hipAimAxis, hf=hipFrontAxis, pa=pelvisAimAxis, pf=pelvisFrontAxis) # set up the rest of the joints else: newJoint = cmds.parent(newJoint, hip)[0] cmds.setAttr('%s.radius'%newJoint, jointRadius) cmds.setAttr('%s.jointOrient'%newJoint, 0,0,0) pct = float(i)/float(numberTwistJoints) cmds.setAttr('%s.translate'%newJoint, kneeTranslate[0]*pct, kneeTranslate[1]*pct, kneeTranslate[2]*pct) # create the orient constraint orientConstraint = cmds.orientConstraint([twistJoints[0], hip, newJoint]) targetWeights = cmds.orientConstraint(q=True, weightAliasList=True) cmds.setAttr('%s.%s'%(orientConstraint[0], targetWeights[0]), numberTwistJoints - i) cmds.setAttr('%s.%s'%(orientConstraint[0], targetWeights[1]), i) cmds.setAttr('%s.interpType'%orientConstraint[0], 1) # set label and rotate order cmds.setAttr('%s.side'%newJoint, bodySide) cmds.setAttr('%s.type'%newJoint, 18) cmds.setAttr('%s.otherType'%newJoint, 'Hip Twist %s'%(i + 1), type='string') cmds.setAttr('%s.rotateOrder'%newJoint, rotateOrder) # add the new joint to the list to return twistJoints.append(newJoint) return twistJoints except: raise