示例#1
0
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))
示例#3
0
 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])
示例#4
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)
示例#8
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 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