コード例 #1
0
ファイル: FootRig.py プロジェクト: jaredauty/Rigging
 def connectBind(self):
     #Create opposite node to blend
     blendOpposite = rc.create1MinusNode(
         "%s.%s" %(self.m_blendControl, self.m_blendAttr),
         "%s_IKFKBlendOpp_CTRL" %(self.m_name)
         )
     for i in range(len(self.m_bindJoints)):
         const1 = cmds.parentConstraint(
             self.m_ikJoints[i],
             self.m_bindJoints[i],
             st = ["x", "y", "z"]
             )[0]
         const2 = cmds.parentConstraint(
             self.m_fkJoints[i],
             self.m_bindJoints[i],
             st = ["x", "y", "z"]
             )[0]
         cmds.connectAttr(
             blendOpposite,
             "%s.blendParent2" %(self.m_bindJoints[i])
             )
         # Change to quarternion
         pairBlend = cmds.listConnections(
             "%s.constraintRotateX" %(const1),
             d=1
             )[0]
         cmds.setAttr("%s.rotInterpolation" %(pairBlend), 1)
コード例 #2
0
ファイル: ArmRig.py プロジェクト: jaredauty/Rigging
    def connectIKFK(self):
        blendAttrName = "IK_FK_Blend"
        self.m_blendAttr = self.m_blendControl + "." + blendAttrName
        try:
            cmds.setAttr(self.m_blendAttr, 0)
            print "WARNING, IK_FK_Blend attribute already exsits"
        except:
            cmds.addAttr(
                self.m_blendControl, 
                ln=blendAttrName, 
                min = 0, 
                max = 1, 
                k = 1
                )
        self.m_blendAttr = self.m_blendControl + "." + blendAttrName
        self.m_blendOppAttr = rc.create1MinusNode(
            self.m_blendAttr, 
            self.m_name+"_IKFKBlendOpp_CTRL"
            )
        # Attach each joint to BIND
        bindJoints = self.m_bindRig.m_joints
        ikJoints = self.m_ikRig.m_joints
        fkJoints = self.m_fkRig.m_joints
        for i in range(0, len(bindJoints) - 1):
            #Orientation
            const1 = cmds.parentConstraint(
                ikJoints[i], 
                bindJoints[i],
                st = ["x", "y", "z"]
                )
            const1 = const1[0]
            const2 = cmds.parentConstraint(
                fkJoints[i], 
                bindJoints[i],
                st = ["x", "y", "z"]
                )
            const2 = const2[0]
            cmds.connectAttr(
                self.m_blendOppAttr, 
                "%s.blendParent2" %(bindJoints[i])
                )
            # Set rotation method to quarternion
            #   get pair blend node
            pairBlend = cmds.listConnections(
                "%s.constraintRotateX" %(const1), 
                d=True
                )
            pairBlend = pairBlend[0]
            cmds.setAttr("%s.rotInterpolation" %(pairBlend), 1)

        for i in range(1, len(bindJoints)):
            # Connect up blended lengths
            blendedAttr = self.createBlendAttr(
                rg.stripMiddle(ikJoints[i], 0, 1), 
                ikJoints[i] + ".translateX", 
                fkJoints[i] + ".translateX", 
                self.m_blendAttr, self.m_blendOppAttr
                )
            cmds.connectAttr(blendedAttr, bindJoints[i] + ".translateX")

        # Fix wrist rotations
        self.m_bindRig.aimWrist(self.m_ikRig.getIKControl(), [self.m_blendAttr, self.m_blendOppAttr])
コード例 #3
0
ファイル: StretchChain.py プロジェクト: jaredauty/Rigging
    def createControls(self):
        #If no blend control is speified add one
        if not self.m_blendControl:
            self.m_blendControl = cmds.circle(n=self.m_name+"Blend_CTRL")[0]
            cmds.parent(self.m_blendControl, self.m_group)
            self.m_allControls.append(self.m_blendControl)
            rc.addToControlDict(
                self.m_allControls,
                "%s_StretchChainCtrl" %(self.m_baseName),
                self.m_blendControl
                )

        cmds.addAttr(
            self.m_blendControl,
            ln=self.m_attrHeading,
            k=True,
            at = "enum",
            en = "---------:"
            )

        if self.m_isAutoBend:
            cmds.addAttr(
                self.m_blendControl, 
                ln=self.m_blendAttrName, 
                k=1, min=0, max=1, dv=0
                )
            blendNodeAttr = self.m_blendControl+"."+self.m_blendAttrName
            oppBlendNodeAttr = rc.create1MinusNode(
                blendNodeAttr, 
                self.m_name+"OppBlend_CTRL" 
                )
        
        self.m_controls = []
        self.m_parentCtrls = []
        self.m_pointCtrls = []
        startPos = cmds.xform(self.m_parent1, q=1, t=1, ws=1)
        endPos = cmds.xform(self.m_parent2, q=1, t=1, ws=1)
        stepVec = vec.divide(
            vec.subtract(endPos, startPos), 
            self.m_numCtrls + 1
            )
        currentPos = vec.add(startPos, stepVec)
        for i in range(self.m_numCtrls):
            newCtrl = self.m_name+"_"+str(i)+"_CTRL"
            parentCtrl = self.m_name+"_"+str(i)+"_parent_CTRL"
            pointCtrl = self.m_name+"_"+str(i)+"_point_CTRL"
            
            newCtrl = cmds.spaceLocator(n=newCtrl)[0]
            self.m_controls.append(newCtrl)
            cmds.parent(newCtrl, self.m_group)
            cmds.xform(newCtrl, t=currentPos, ws=1)
            newCtrlGroups = rg.add3Groups(newCtrl, ["_SDK", "_CONST", "_0"])
            
            if self.m_isAutoBend:
                parentCtrl = cmds.duplicate(newCtrl, n=parentCtrl)[0]
                cmds.parent(parentCtrl, newCtrlGroups[2])
                #cmds.setAttr(parentCtrl+".visibility", 0)
                pointCtrl = cmds.duplicate(newCtrl, n=pointCtrl)[0]
                cmds.parent(pointCtrl, newCtrlGroups[2])
                #cmds.setAttr(pointCtrl+".visibility", 0)

                rc.addToLayer(self.m_sceneData, "hidden", [parentCtrl, pointCtrl])

                #Create blend between parent and point setups
                blendConst = cmds.pointConstraint(parentCtrl, newCtrlGroups[1])
                cmds.connectAttr(blendNodeAttr, blendConst[0]+"."+parentCtrl+"W0")
                blendConst = cmds.pointConstraint(pointCtrl, newCtrlGroups[1])
                cmds.connectAttr(oppBlendNodeAttr, blendConst[0]+"."+pointCtrl+"W1")
                
                
                self.m_parentCtrls.append(parentCtrl)
                self.m_pointCtrls.append(pointCtrl)
                
                grandParent = cmds.listRelatives(self.m_parent1, p=1)
                if grandParent == None or not self.m_isParentBend:
                    grandParent = self.m_parent1
                
                parentConst = rc.applyWeightedConstraint(
                    grandParent, 
                    parentCtrl, 
                    self.m_parent2, 
                    cmds.parentConstraint
                    )
                pointConst = rc.applyWeightedConstraint(
                    self.m_parent1, 
                    pointCtrl, 
                    self.m_parent2, 
                    cmds.pointConstraint
                    )
            cmds.aimConstraint(
                    self.m_parent2,
                    newCtrlGroups[1]
                    )
            currentPos = vec.add(currentPos, stepVec)
            #lock attrs
            cmds.setAttr(newCtrl+".rotate", l=1)
            cmds.setAttr(newCtrl+".scale", l=1)
        rc.addToLayer(self.m_sceneData, "detailCtrl", self.m_controls)
        # Add controls
        i=0
        for control in self.m_controls:
            rc.addToControlDict(self.m_allControls, "%s_%d_detail" %(self.m_baseName, i), control)
            i+=1