コード例 #1
0
def ConnectThroughRig(src, attr, root, rigObject):
    name = src.name()
    grp = pm.group(name='%s_squash_GRP' % (name),
                   empty=True,
                   parent=src.getParent())
    grp.setTranslation(src.getTranslation(space='world'), space='world')

    for child in src.getChildren(type=pm.Transform):
        child.setParent(grp)

    md = pm.MultiplyDivide(name='%s_squashInvert_MD' % (name))
    md.input1.set(-1, -1, -1)
    for i, axis in enumerate(['X', 'Y', 'Z']):
        src.attr('%s%s' % (attr, axis)) >> md.attr('input2%s' % axis)
        md.attr('output%s' % axis) >> rigObject['inattrs'][i]

    md = pm.MultiplyDivide(name='%s_squashScaleOffset_MD' % (name))
    rigObject['outattrs'] >> md.input1
    md.input2.set(3, 3, 3)
    md.output >> grp.scale

    pm.pointConstraint(src, grp, mo=False)
    pm.orientConstraint(src, grp, mo=False)

    return {'control': src, 'root': root, 'rig': rigObject['group']}
コード例 #2
0
    def makeCamPlaneForDrawing(self):
        drawPlaneGroup = pm.createNode( "transform" );
    
        size = 1024
        planeList = pm.polyPlane( w=size,h=size, sx=1,sy=1, n="drawPlane", axis=[0,0,1] )  #print( planeList )
        planeXform = planeList[0]

        planeShape = planeXform.getShape()
        planeShape.overrideEnabled.set(1)
        planeShape.overrideShading.set(0)
        
        locatorXform = pm.spaceLocator(n="drawPlaneLocator")
        locatorShape = locatorXform.getShape()
        locatorShape.localScale.set( [128,128,128] )

        camList = pm.camera( name="drawPlaneCam" )  #print( camList )
        camXform = camList[0]
        camXform.tz.set(256)        
        
        pm.parent( planeXform, locatorXform )
        pm.parent( locatorXform, drawPlaneGroup )
        pm.parent( camXform, drawPlaneGroup )
        
        pm.orientConstraint( camXform, planeXform, ) ##aimVector=[0,1,0], upVector=[0,0,1] )
        
        ## Look through cam
        pm.select( camXform )
        panel = pm.getPanel( withFocus=True )        
        pm.mel.eval( "lookThroughSelected 0 " + panel +";")
        
        pm.makeLive( planeXform )
コード例 #3
0
    def autoOrientXKeepZ(self, obj ):
        assert isinstance(obj, pymel.core.nodetypes.Transform)
        
        unrepar = Unreparenter( obj )
        pm.makeIdentity( obj, apply=True, t=1, r=1, s=1, n=0, pn=1 )
        target = pm.createNode('joint')
        cons = [
            pm.pointConstraint( obj, target ),
            pm.orientConstraint( obj, target ),
            pm.scaleConstraint( obj, target )
        ]
        pm.delete( cons )
        
        
        unrepar.reparent()
        pm.joint( obj, edit=True,
            oj='xzy', secondaryAxisOrient='yup',
            zeroScaleOrient=True, children=False
        )
        unrepar.unparent( )
        pm.makeIdentity( obj, apply=True, t=1, r=1, s=1, n=0, pn=1 )
        
        
        self.rotateOnXToMatchZ(obj,target)

        pm.delete( target )
        
        pm.makeIdentity( obj, apply=True, t=1, r=1, s=1, n=0, pn=1 )
        unrepar.reparent(clean=True)
コード例 #4
0
 def autoOrientTipJoint(self,obj):
     ## this currently assumes that tip has no children
     par = obj.getParent()
     pm.parent( obj )
     obj.rotate.set( [0,0,0] )
     obj.jointOrient.set( [0,0,0] )
     obj.rotateAxis.set( [0,0,0] )
     con = pm.orientConstraint( par, obj )
     pm.delete( con )
コード例 #5
0
 def constrainSlavesToSelected(self):
     oSel = pm.ls(sl=True)
     objs = oSel[:]
     for ctrl in objs:
         try:
             posSlaveAttr = ctrl.posSlave
             connectedAttrOfPosSlave = posSlaveAttr.inputs()[0]
             posSlave = connectedAttrOfPosSlave.node()
             pm.pointConstraint( ctrl, posSlave )
         except:
             print( traceback.format_exc()  )
             
         try:
             rotSlaveAttr = ctrl.rotSlave
             connectedAttrOfRotSlave = rotSlaveAttr.inputs()[0]
             rotSlave = connectedAttrOfRotSlave.node()
             pm.orientConstraint( ctrl, rotSlave )
         except:
             print( traceback.format_exc()  )
コード例 #6
0
def CopyJntOri(**kwargs):
    """
	    Copy orientation of one joint to another
	"""
    sel = pm.ls(selection=True)
    sel_jnts = kwargs.get("joint_selection", sel)
    print sel_jnts
    ref = sel_jnts.pop(0)
    for jnt in sel_jnts:
        ori_cnst = pm.orientConstraint(ref, jnt, maintainOffset=False)
        pm.delete(ori_cnst)
        pm.makeIdentity(apply=True, rotate=True)
    return None
コード例 #7
0
def copy_orientation():
    sel = pm.ls(selection=True)
    prnt = sel.pop(0)
    for obj in sel:
        tmp_con = pm.orientConstraint(prnt,
                                      obj,
                                      maintainOffset=False,
                                      name="tmp")
        pm.delete(tmp_con)
        pm.makeIdentity(apply=True,
                        translate=True,
                        rotate=True,
                        scale=True,
                        normal=False,
                        preserveNormals=True)
    return None
コード例 #8
0
def delCon(**kwargs):
    """
        Delete selected constraints on selected objects if exists
    """
    print "deleteCon"
    sel = pm.ls(selection=True)
    #con_typ = kwargs.get("constraint_type", None)
    prFlg = kwargs.get("pr_con", False)
    scFlg = kwargs.get("sc_con", False)
    ptFlg = kwargs.get("pt_con", False)
    orFlg = kwargs.get("or_con", False)

    for obj in sel:
        if prFlg:
            const = pm.parentConstraint(obj, query=True)
            if const:
                pm.delete(const)
            else:
                print str(obj) + " parent delete skipped"

        if orFlg:
            const = pm.orientConstraint(obj, query=True)
            if const:
                pm.delete(const)
            else:
                print str(obj) + " orient delete skipped"

        if ptFlg:
            const = pm.pointConstraint(obj, query=True)
            if const:
                pm.delete(const)
            else:
                print str(obj) + " point delete skipped"
        #if con_typ == "aim":
        #	const = pm.aimConstraint(obj, query=True)
        #	if const:
        #		pm.delete(const)

        if scFlg:
            const = pm.scaleConstraint(obj, query=True)
            if const:
                pm.delete(const)
            else:
                print str(obj) + " scale delete skipped"
    return None
コード例 #9
0
def createTwistJointToSelectedChild():
    objs = pm.ls(selection=True)

    ## Make an empty list to store joints in
    newJoints = []

    for obj in objs:
        pm.select( clear=True )
        child = obj
        parentJnt = obj.getParent()
        jnt = pm.joint(position=[0,0,0])


        pc = pm.pointConstraint( [parentJnt, child] , jnt )
        oc = pm.orientConstraint( parentJnt, jnt )
        pm.delete( pc )
        pm.delete( oc )
        pm.parent( jnt, parentJnt )
        ## Put out new joint in the list!
        newJoints.append( jnt )
コード例 #10
0
    def fixJointComplexXforms( self, obj ):
        assert isinstance(obj, pymel.core.nodetypes.Transform)
        
        unrepar = Unreparenter( obj )
        
        pm.makeIdentity( obj, apply=True, t=1, r=1, s=1, n=0, pn=1 )
        tmp = pm.createNode('joint')
        cons = [
            pm.pointConstraint( obj, tmp ),
            pm.orientConstraint( obj, tmp ),
            pm.scaleConstraint( obj, tmp )
        ]
        pm.delete( cons )
        
        helperZ = pm.createNode('transform')
        helperX = pm.createNode('transform')
        pm.parent( helperX, tmp )
        pm.parent( helperZ, tmp )
        
        helperX.translate.set( [1,0,0] )    
        helperZ.translate.set( [0,0,1] )    

        obj.jointOrient.set( 0,0,0 )
        obj.rotateAxis.set( 0,0,0 )
        con = pm.aimConstraint( helperX, obj,
            worldUpType='object',
            worldUpObject=helperZ,
            aimVector=[1,0,0],
            upVector=[0,0,1],
        )
        pm.delete( con )   
        pm.delete( [helperX, helperZ] )
        
        pm.delete( tmp )
        
        pm.makeIdentity( obj, apply=True, t=1, r=1, s=1, n=0, pn=1 )
        unrepar.reparent( )
コード例 #11
0
    def makeAnimCtrlAndZero(self, doConnectPosSlave=True, doConnectRotSlave=True):
        ctrls = []
        objs = pm.ls(selection=True)
        for obj in objs:
            
            ## really, you have to find the first occurance of the numbered name
            ## that didn't exist in the scene as either a zero or a control
            goodNumber = None
            iter = 0
            while goodNumber == None   and   iter < 99:
                iter+=1
                if iter==0:
                    foundZ = pm.ls( obj.name() + "_zero" )
                    foundC = pm.ls( obj.name() + "_ctrl" )
                    if len(foundZ)==0  and  len( foundC )==0:
                        goodNumber = 0
                else:
                    foundZ = pm.ls( obj.name() + str(iter) + "_zero" )  ## could use .zfill(2)
                    foundC = pm.ls( obj.name() + str(iter) + "_ctrl" )
                    if len(foundZ)==0  and  len( foundC )==0:
                        goodNumber = iter
        
            if goodNumber == 0:
                basename = obj.name()
            else:
                basename = obj.name() + str(goodNumber)
            
            
            try:
                jointRadius=obj.radius.get()
            except:
                print( traceback.format_exc()  )
                jointRadius=16
            
            radiusToUse = self.ctrlSizeFloatField.getValue()
            if radiusToUse <= 0.0:
                radiusToUse = 8*jointRadius
            ctrlList = pm.circle(normal=[1,0,0], radius=radiusToUse, ch=False)
            #ctrlCircle = ctrlList[1]
            ctrl = ctrlList[0]
            pm.rename( ctrl, basename + "_ctrl" )
            pCon = pm.pointConstraint(
               obj, ctrl
            )
            oCon = pm.orientConstraint(
               obj, ctrl
            )
            ## beware, pymel returns constraints back directly, not in list
            pm.delete( [pCon, oCon] ) ## delte constraints  
        
            zeroList = pm.duplicate( ctrl )
            zero = zeroList[0]
            
            pm.rename( zero, basename + "_zero")
        
        
                
                
        
            pm.delete( zero.getShape() )
            
            pm.parent( ctrl, zero )
            #pCon = pm.pointConstraint( ctrl, obj )
            #oCon = pm.orientConstraint( ctrl, obj ) 

            pm.addAttr( ctrl, ln='posSlave', at='message' )
            pm.addAttr( ctrl, ln='rotSlave', at='message' )
            if doConnectPosSlave==True:
                obj.message >> ctrl.posSlave
            if doConnectRotSlave==True:
                obj.message >> ctrl.rotSlave
                
            ctrls.append( ctrl )
            
        pm.select( ctrls )
コード例 #12
0
import pymel.all as pm

objs = pm.ls(selection=True)

## Make an empty list to store joints in
newJoints = []

for obj in objs:
    pm.select( clear=True )
    child = obj
    parentJnt = obj.getParent()
    jnt = pm.joint(position=[0,0,0])


    pc = pm.pointConstraint( [parentJnt, child] , jnt )
    oc = pm.orientConstraint( parentJnt, jnt )
    pm.delete( pc )
    pm.delete( oc )
    pm.parent( jnt, parentJnt )
    ## Put out new joint in the list!
    newJoints.append( jnt )

pm.select( newJoints )
コード例 #13
0
import pymel.all as pm

objs = pm.ls(selection=True)

## Make an empty list to store joints in
newJoints = []

for obj in objs:
    pm.select( clear=True )
    jnt = pm.joint(position=[0,0,0])
    children = obj.getChildren()
    child = children[0]

    pc = pm.pointConstraint( [obj, child] , jnt )
    oc = pm.orientConstraint( obj, jnt )
    pm.delete( pc )
    pm.delete( oc )
    pm.parent( jnt, obj )
    ## Put out new joint in the list!
    newJoints.append( jnt )

pm.select( newJoints )
コード例 #14
0
ファイル: rig_ikfk.py プロジェクト: kotchin/th_autorig2
	def create( self, _jointchain=None ) :
		super( IkRig, self ).create( _jointchain )

		jointchains = self.tree_children( 'jointchain' )
		if( len( jointchains ) != 1 ) :
			utils.err( 'IkRig children includes more than ONE jointchain. Not sure which to use. Skipping...' )
			return False		

		jointchain = jointchains[0]

		# create a simple joint chain
		simplejointchain = jointchain.duplicate_jointchain( self.PARTNAME, 'driver', _simple=True )
		self.add_child( simplejointchain )
		
		pm.PyNode( 'leftUpperArm_1_IKJ_DRIVER' ).hide()
		pm.PyNode( 'leftUpperArm_1_j' ).hide()

		for i in range( len( simplejointchain.rigjoints ) - 1 ) :
			# create a curve between each pair of simple rigjoints
			rigjoint1 = simplejointchain.rigjoints[i]
			rigjoint2 = simplejointchain.rigjoints[i+1]

			v1 = pm.datatypes.Vector( rigjoint1.getTranslation( space='world' ) )
			v2 = pm.datatypes.Vector( rigjoint2.getTranslation( space='world' ) )
			curvelength = float( v1.distanceTo( v2 ) )

			dirvector = [ a * b for a, b in zip( 
				( curvelength, curvelength, curvelength ),
				utils.aim_axis_to_vectors( settings.rotationorder )[0]
			) ]

			curve = pm.curve( degree=1, point=[
				( 0, 0, 0 ),
				dirvector
				# v1, v2
			], name=utils.name_from_tags( rigjoint1, 'curve' ) )

			# rebuild with numspan 2 and 3 degree
			pm.rebuildCurve( curve, degree=3, spans=2 )

			# move vtx[1] and vtx[-2] to respective ends of curve		
			curve.cv[1].setPosition( curve.cv[0].getPosition( space='world' ), space='world' )
			curve.cv[-2].setPosition( curve.cv[-1].getPosition( space='world' ), space='world' )

			ribbonlength = 0.2

			ribbon = pm.extrude(
				curve,
				polygon=0,
				useProfileNormal=1,
				extrudeType=0,
				length=ribbonlength,
				ch=False,
				name=utils.name_from_tags( rigjoint1, 'nurbs' )
			)[0]

			ribbon.setTranslation( ( 0, 0, -(ribbonlength)/2 ) )
			ribbon.setPivots( ( 0, 0, 0 ), worldSpace=True )
			pm.makeIdentity( ribbon, apply=True )
			pm.delete( ribbon, ch=True )
			pm.delete( curve )

			utils.create_zero_sdk_groups( ribbon, _replacelast=False )

			startcluster = pm.cluster( 	ribbon.cv[0:1][0:1], name=utils.name_from_tags( rigjoint1, 'start', 'cluster') )[1]
			midcluster = pm.cluster( 	ribbon.cv[2][0:1], name=utils.name_from_tags( rigjoint1, 'mid', 'cluster' ) )[1]
			endcluster = pm.cluster( 	ribbon.cv[-2:][0:1], name=utils.name_from_tags( rigjoint1, 'end', 'cluster' ) )[1]

			# parent clusters to respective rigjoints
			pm.parentConstraint( [ rigjoint1, startcluster ], mo=False )
			pm.parentConstraint( [ rigjoint2, endcluster ], mo=False )

			# group then point/parent constrain middle cluster to end clusters
			sdkgroup, zerogroup = utils.create_zero_sdk_groups( midcluster, _replacelast=False )
			zerogroup.setRotation( rigjoint1.getRotation( space='world' ), space='world' )
			pm.pointConstraint( [ rigjoint1, rigjoint2, zerogroup ], mo=False )
			pm.orientConstraint( [ rigjoint1, zerogroup ], mo=False )

			jointsToAttachToCurve = [ jointchain.rigjoints[i] ]
			jointsToAttachToCurve += jointchain.minorrigjoints[ jointsToAttachToCurve[0] ]
			jointsToAttachToCurve += [ jointchain.rigjoints[i+1] ]

	
			for rigjoint in jointsToAttachToCurve :

				p = rigjoint.getTranslation( space='world' )
				posi = pm.nodetypes.ClosestPointOnSurface()
				ribbon.worldSpace >> posi.inputSurface
				posi.inPosition.set( p )
				u = min( max( posi.u.get(), 0.001 ), 0.999 )
				v = min( max( posi.v.get(), 0.001 ), 0.999 )

				pm.delete( posi )

				follicleshape = pm.nodetypes.Follicle()
				ribbon.local >> follicleshape.inputSurface
				ribbon.worldMatrix[0] >> follicleshape.inputWorldMatrix
				follicleshape.parameterU.set( u )
				follicleshape.parameterV.set( v )
				
				follicle = follicleshape.getParent()
				follicle.rename( utils.name_from_tags( rigjoint, 'follicle' ) )
				follicleshape.rename( follicle.name() + 'Shape' )

				follicleshape.outRotate >> follicle.rotate
				follicleshape.outTranslate >> follicle.translate

				# remove any constraints already on the joint
				pm.delete( rigjoint.getChildren( type='constraint' ) )

				pm.parentConstraint( [ follicle, rigjoint ], mo=True )
				

		return True
コード例 #15
0
import pymel.all as pm

objs = pm.ls(selection=True)

## Make an empty list to store joints in
newJoints = []

for obj in objs:
    pm.select(clear=True)
    child = obj
    parentJnt = obj.getParent()
    jnt = pm.joint(position=[0, 0, 0])

    pc = pm.pointConstraint([parentJnt, child], jnt)
    oc = pm.orientConstraint(parentJnt, jnt)
    pm.delete(pc)
    pm.delete(oc)
    pm.parent(jnt, parentJnt)
    ## Put out new joint in the list!
    newJoints.append(jnt)

pm.select(newJoints)
コード例 #16
0
import pymel.all as pm

objs = pm.ls(selection=True)

## Make an empty list to store joints in
newJoints = []

for obj in objs:
    pm.select(clear=True)
    jnt = pm.joint(position=[0, 0, 0])
    children = obj.getChildren()
    child = children[0]

    pc = pm.pointConstraint([obj, child], jnt)
    oc = pm.orientConstraint(obj, jnt)
    pm.delete(pc)
    pm.delete(oc)
    pm.parent(jnt, obj)
    ## Put out new joint in the list!
    newJoints.append(jnt)

pm.select(newJoints)