def ctrlBindSkinBtnCmd(self, *args):
     """Function to execute when Create button is pressed"""
     print('给控制器蒙皮(ikspline)')
     b_curve = cmds.ls('curve1')
     obj_ls = self.c_jnts + b_curve
     print(obj_ls)
     cmds.select(obj_ls)
     cmds.SmoothBindSkin(tsb=True)
Example #2
0
def create_JNT_separate_CT():
    sepaJNT_selPLY_CT = cmds.ls(sl=1)
    for b in sepaJNT_selPLY_CT:
        # Bounding Box : centerPivot
        sepaJNT_selPLY_bbInfo_CT = cmds.xform(b,
                                              worldSpace=1,
                                              query=1,
                                              boundingBox=1)
        sepaJNT_bbCT_X_CT = (sepaJNT_selPLY_bbInfo_CT[0] +
                             sepaJNT_selPLY_bbInfo_CT[3]) / 2.0
        sepaJNT_bbCT_Y_CT = (sepaJNT_selPLY_bbInfo_CT[1] +
                             sepaJNT_selPLY_bbInfo_CT[4]) / 2.0
        sepaJNT_bbCT_Z_CT = (sepaJNT_selPLY_bbInfo_CT[2] +
                             sepaJNT_selPLY_bbInfo_CT[5]) / 2.0
        cmds.select(deselect=1)
        # create joint
        sepaJNT_CT = cmds.joint(p=(sepaJNT_bbCT_X_CT, sepaJNT_bbCT_X_CT,
                                   sepaJNT_bbCT_X_CT),
                                n=b.replace('PLY', 'JNT'))
        cmds.joint(sepaJNT_CT, edit=True, radius=0.5)
        sepaJNT_rename_CT = cmds.rename('C_Skin_%s' % sepaJNT_CT)
        # skinBind
        cmds.select(b, replace=1)
        cmds.select(sepaJNT_rename_CT, add=1)
        cmds.SmoothBindSkin(toSelectedBones=1)
        # Bounding Box : Size
        sepaJNT_bbsX_CT = cmds.getAttr("%s.boundingBoxSizeX" % b) / 1.5
        sepaJNT_bbsY_CT = cmds.getAttr("%s.boundingBoxSizeY" % b) / 1.5
        sepaJNT_bbsZ_CT = cmds.getAttr("%s.boundingBoxSizeZ" % b) / 1.5
        cmds.select(deselect=1)
        # CON
        sepaJNT_CON_CT = cmds.curve(degree=1,
                                    p=[(-1, 1, -1), (1, 1, -1), (1, 1, 1),
                                       (-1, 1, 1), (-1, -1, 1), (-1, -1, -1),
                                       (-1, 1, -1), (-1, 1, 1), (-1, -1, 1),
                                       (1, -1, 1), (1, 1, 1), (1, 1, -1),
                                       (1, -1, -1), (1, -1, 1), (1, -1, -1),
                                       (-1, -1, -1)])
        sepaJNT_CON_rename_CT = cmds.rename(b.replace('PLY', 'CON'))
        CL.con_overrideColor_SET()
        sepaJNT_NUL_CT = cmds.group(em=1, n=b.replace('PLY', 'NUL'))
        cmds.parent(sepaJNT_CON_rename_CT, sepaJNT_NUL_CT)
        cmds.scale(sepaJNT_bbsX_CT, sepaJNT_bbsY_CT, sepaJNT_bbsZ_CT,
                   sepaJNT_NUL_CT)
        cmds.move(sepaJNT_bbCT_X_CT, sepaJNT_bbCT_Y_CT, sepaJNT_bbCT_Z_CT,
                  sepaJNT_NUL_CT)
        cmds.move(0, 0, 0, "%s.scalePivot" % sepaJNT_NUL_CT,
                  "%s.rotatePivot" % sepaJNT_NUL_CT)
        cmds.move(0, 0, 0, "%s.scalePivot" % sepaJNT_CON_rename_CT,
                  "%s.rotatePivot" % sepaJNT_CON_rename_CT)
        cmds.makeIdentity(sepaJNT_NUL_CT, apply=1)
        cmds.parentConstraint(sepaJNT_CON_rename_CT, sepaJNT_rename_CT, mo=1)
        cmds.parent(sepaJNT_rename_CT, 'joint_GRP')
        cmds.setAttr('joint_GRP.visibility', 0)
        cmds.parent(sepaJNT_NUL_CT, 'control_GRP')

    con_ChannelBox()
    cmds.select(deselect=1)
Example #3
0
def create_JNT_combine_CT():
    combJNT_selPLY_CT = cmds.ls(sl=True)
    combJNT_selPLY_copy_CT = cmds.duplicate(combJNT_selPLY_CT)
    combJNT_tempPLY_CT = cmds.polyUnite(combJNT_selPLY_copy_CT,
                                        mergeUVSets=1,
                                        constructionHistory=True,
                                        n=combJNT_selPLY_CT[0].replace(
                                            'PLY', 'RE'))
    cmds.delete(
        combJNT_tempPLY_CT,
        ch=1)  # like a historyDelete and delete emptyGroup, Also Node Check
    cmds.select(combJNT_tempPLY_CT[0])
    boundingBox_Info()
    cmds.select(deselect=True)
    # create joint
    combJNT_CT = cmds.joint(p=(propRig_bbX_CT[-1], propRig_bbY_CT[-1],
                               propRig_bbZ_CT[-1]),
                            n=combJNT_selPLY_CT[0].replace('PLY', 'JNT'))
    cmds.joint(combJNT_CT, edit=True, radius=0.5)
    combJNT_rename_CT = cmds.rename('C_Skin_%s' % combJNT_CT)
    # skinBind
    cmds.select(combJNT_selPLY_CT, replace=True)
    cmds.select(combJNT_rename_CT, add=True)
    cmds.SmoothBindSkin(toSelectedBones=True)
    # CON
    cmds.select(deselect=1)
    combJNT_CON_CT = cmds.curve(degree=1,
                                p=[(-1, 1, -1), (1, 1, -1), (1, 1, 1),
                                   (-1, 1, 1), (-1, -1, 1), (-1, -1, -1),
                                   (-1, 1, -1), (-1, 1, 1), (-1, -1, 1),
                                   (1, -1, 1), (1, 1, 1), (1, 1, -1),
                                   (1, -1, -1), (1, -1, 1), (1, -1, -1),
                                   (-1, -1, -1)])
    combJNT_CON_rename_CT = cmds.rename(combJNT_selPLY_CT[0].replace(
        'PLY', 'CON'))
    combJNT_CONShape_CT = cmds.listRelatives(combJNT_CON_rename_CT,
                                             shapes=True)
    CL.con_overrideColor_SET()
    combJNT_NUL_CT = cmds.group(em=True,
                                n=combJNT_selPLY_CT[0].replace('PLY', 'NUL'))
    cmds.parent(combJNT_CON_rename_CT, combJNT_NUL_CT)
    cmds.scale(propRig_bbsX[-1], propRig_bbsY[-1], propRig_bbsZ[-1],
               combJNT_NUL_CT)
    cmds.move(propRig_bbX_CT[-1], propRig_bbY_CT[-1], propRig_bbZ_CT[-1],
              combJNT_NUL_CT)
    cmds.move(0, 0, 0, "%s.scalePivot" % combJNT_NUL_CT,
              "%s.rotatePivot" % combJNT_NUL_CT)
    cmds.move(0, 0, 0, "%s.scalePivot" % combJNT_CON_rename_CT,
              "%s.rotatePivot" % combJNT_CON_rename_CT)
    cmds.makeIdentity(combJNT_NUL_CT, apply=1)
    con_ChannelBox()
    cmds.delete(combJNT_tempPLY_CT[0])
    cmds.parentConstraint(combJNT_CON_rename_CT, combJNT_rename_CT, mo=1)
    cmds.parent(combJNT_rename_CT, 'joint_GRP')
    cmds.setAttr('joint_GRP.visibility', 0)
    cmds.parent(combJNT_NUL_CT, 'control_GRP')
    cmds.select(deselect=True)
Example #4
0
def create_JNT_separate():  #
    sepaJNT_selPLY = cmds.ls(sl=True)
    for a in sepaJNT_selPLY:
        # Bounding Box : centerPivot
        sepaJNT_selPLY_bbInfo = cmds.xform(a,
                                           worldSpace=True,
                                           query=True,
                                           boundingBox=True)
        sepaJNT_bbCT_X = (sepaJNT_selPLY_bbInfo[0] +
                          sepaJNT_selPLY_bbInfo[3]) / 2.0
        sepaJNT_bbCT_Y = (sepaJNT_selPLY_bbInfo[1] +
                          sepaJNT_selPLY_bbInfo[4]) / 2.0
        sepaJNT_bbCT_Z = (sepaJNT_selPLY_bbInfo[2] +
                          sepaJNT_selPLY_bbInfo[5]) / 2.0
        # create joint
        cmds.select(deselect=True)
        sepaJNT_selPLY_nameList = a.split('_')
        sepaJNT = cmds.joint(p=(sepaJNT_bbCT_X, sepaJNT_bbCT_Y,
                                sepaJNT_bbCT_Z),
                             n=a.replace('PLY', 'JNT'))
        sepaJNT_rename = cmds.rename('C_Skin_%s' % sepaJNT)
        cmds.joint(sepaJNT_rename, edit=True, radius=0.5)
        # skinBind
        cmds.select(a, replace=True)
        cmds.select(sepaJNT_rename, add=True)
        cmds.SmoothBindSkin(toSelectedBones=True)
        # Bounding Box : Size
        sepaJNT_bbsX = cmds.getAttr("%s.boundingBoxSizeX" % a) / 1.5
        sepaJNT_bbsY = cmds.getAttr("%s.boundingBoxSizeY" % a) / 1.5
        sepaJNT_bbsZ = cmds.getAttr("%s.boundingBoxSizeZ" % a) / 1.5
        # CON
        cmds.select(deselect=True)
        sepaJNT_CON = cmds.curve(degree=1,
                                 p=[(-1, 1, -1), (1, 1, -1), (1, 1, 1),
                                    (-1, 1, 1), (-1, -1, 1), (-1, -1, -1),
                                    (-1, 1, -1), (-1, 1, 1), (-1, -1, 1),
                                    (1, -1, 1), (1, 1, 1), (1, 1, -1),
                                    (1, -1, -1), (1, -1, 1), (1, -1, -1),
                                    (-1, -1, -1)])
        sepaJNT_CON_rename = cmds.rename(a.replace('PLY', 'CON'))
        CL.con_overrideColor_SET()
        sepaJNT_NUL = cmds.group(em=True, n=a.replace('PLY', 'NUL'))
        cmds.parent(sepaJNT_CON_rename, sepaJNT_NUL)
        cmds.scale(sepaJNT_bbsX, sepaJNT_bbsY, sepaJNT_bbsZ, sepaJNT_NUL)
        cmds.move(sepaJNT_bbCT_X, sepaJNT_bbCT_Y, sepaJNT_bbCT_Z, sepaJNT_NUL)
        cmds.makeIdentity(sepaJNT_NUL, apply=1, s=1)
        cmds.parentConstraint(sepaJNT_CON_rename, sepaJNT_rename, mo=1)
        cmds.parent(sepaJNT_rename, 'joint_GRP')
        cmds.setAttr('joint_GRP.visibility', 0)
        cmds.parent(sepaJNT_NUL, 'control_GRP')

    con_ChannelBox()
    cmds.select(deselect=1)
        def create_curve():

            _curve_arm_1 = pm.curve(p=[(2.2, 5, -0.05), (1.45, 5, -0.05)],
                                    k=[0, 1],
                                    d=1)
            _curve_arm_2 = pm.curve(p=[(1.45, 5, -0.05), (0.5, 5, 0)],
                                    k=[0, 1],
                                    d=1)

            _curve_arm_4 = pm.curve(p=[(-2.2, 5, -0.05), (-1.45, 5, -0.05)],
                                    k=[0, 1],
                                    d=1)
            _curve_arm_5 = pm.curve(p=[(-1.45, 5, -0.05), (-0.5, 5, 0)],
                                    k=[0, 1],
                                    d=1)

            r_leg_thigh_curve = pm.curve(p=[(-0.4, 3.2, 0.05),
                                            (-0.4, 1.75, 0.185)],
                                         k=[0, 1],
                                         d=1)
            l_leg_thigh_curve = pm.curve(p=[(0.4, 3.2, 0.05),
                                            (0.4, 1.75, 0.185)],
                                         k=[0, 1],
                                         d=1)

            r_leg_knee_curve = pm.curve(p=[(-0.4, 1.75, 0.185),
                                           (-0.4, 0.35, 0)],
                                        k=[0, 1],
                                        d=1)
            l_leg_knee_curve = pm.curve(p=[(0.4, 1.75, 0.185), (0.4, 0.35, 0)],
                                        k=[0, 1],
                                        d=1)

            all_curves = [
                _curve_arm_1, _curve_arm_2, _curve_arm_4, _curve_arm_5,
                r_leg_thigh_curve, l_leg_thigh_curve, r_leg_knee_curve,
                l_leg_knee_curve
            ]

            self.curves_grp = pm.group(em=True, n='x__curves__grp__', w=True)

            pm.select(self.all_joint, r=True)
            pm.select(all_curves, add=True)

            mc.SmoothBindSkin()

            pm.parent(_curve_arm_1, _curve_arm_2, _curve_arm_4, _curve_arm_5,
                      r_leg_thigh_curve, l_leg_thigh_curve, r_leg_knee_curve,
                      l_leg_knee_curve, self.spine_curve, cluster_grp,
                      self.curves_grp)

            return self.curves_grp
Example #6
0
    def jointsSkinCopys(self):

        # self.Shape = cmds.listRelatives( self.originMesh[0], s=True )
        # self.Cluster = cmds.listConnections( self.Shape[0] + '.inMesh' )
        self.Cluster = mel.eval('findRelatedSkinCluster ' + self.originMesh[0])
        self.joints = cmds.listConnections(self.Cluster + '.matrix')
        print self.joints

        cmds.select(cl=True)
        for x in self.joints:
            cmds.select(x, add=True)

        cmds.select(self.objects, add=True)
        cmds.SmoothBindSkin()

        for x in self.objects:
            cmds.select(self.originMesh)
            cmds.select(x, add=True)
            cmds.CopySkinWeights()
            cmds.select(cl=True)
Example #7
0
import maya.cmds as cmds

cube_ = cmds.polyCube()
cube_shape = cmds.polyCube(n='shape_cube')
cmds.select(cube_shape[0], cube_[0])

cmds.blendShape(n="Test_SHP")
cmds.delete('shape_cube')
cmds.select(cl=1)
joint_ = cmds.joint()

cmds.select(cube_, joint_)
cmds.SmoothBindSkin()

cmds.select(cube_[0])
shapes = cmds.listRelatives(cmds.ls(sl=1), s=1)[0]
blendShape = cmds.listConnections(shapes, type="blendShape")

print blendShape
Example #8
0
    def Rig_Generate(self):

        ##############################################
        ##########     检查物体是否存在    ############
        ##############################################

        if self.Rig_Obj_Check():
            return

        # 开启还原按钮
        self.Rig_Back_Btn.setEnabled(True)

        ##############################################
        #############      获取变量     ###############
        ##############################################

        # 获取数值
        Main_JNT_Num = int(
            self.Main_JNT_Num.text()) if self.Main_JNT_Num.text() != "" else 20
        IK_JNT_Num = int(
            self.IK_JNT_Num.text()) if self.IK_JNT_Num.text() != "" else 20
        Curve_Span_Num = int(self.Curve_Span_Num.text()
                             ) if self.Curve_Span_Num.text() != "" else 20

        # 获取命名
        Geo_Name_Text = self.Geo_Name_Text.text(
        ) if self.Geo_Name_Text.text() != "" else "TengMan"
        Main_JNT_Name_Text = self.Main_JNT_Name_Text.text(
        ) if self.Main_JNT_Name_Text.text() != "" else "gan_joint"
        IK_JNT_Name_Text = self.IK_JNT_Name_Text.text(
        ) if self.IK_JNT_Name_Text.text() != "" else "ganJoint"
        Curve_Name_Text = self.Curve_Name_Text.text(
        ) if self.Curve_Name_Text.text() != "" else "gan"
        IK_CTRL_Name_Text = self.IK_CTRL_Name_Text.text(
        ) if self.IK_CTRL_Name_Text.text() != "" else "gan_ctrl"
        Start_Ctrl_Text = self.Start_Ctrl_Text.text(
        ) if self.Start_Ctrl_Text.text() != "" else "main2"
        End_IK_Text = self.End_IK_Text.text(
        ) if self.End_IK_Text.text() != "" else "main"
        Character_Ctrl_Text = self.Character_Ctrl_Text.text(
        ) if self.Character_Ctrl_Text.text() != "" else "Character"

        # 获取按钮颜色
        styleSheet = self.IK_CTRL_ColorBtn.styleSheet().split("(")[1].split(
            ",")
        r = float(styleSheet[0]) / 255
        g = float(styleSheet[1]) / 255
        b = float(styleSheet[2].split(")")[0]) / 255
        IK_CTRL_ColorBtn = (r, g, b)

        styleSheet = self.Start_Ctrl_ColorBtn.styleSheet().split("(")[1].split(
            ",")
        r = float(styleSheet[0]) / 255
        g = float(styleSheet[1]) / 255
        b = float(styleSheet[2].split(")")[0]) / 255
        Start_Ctrl_ColorBtn = (r, g, b)

        styleSheet = self.End_IK_ColorBtn.styleSheet().split("(")[1].split(",")
        r = float(styleSheet[0]) / 255
        g = float(styleSheet[1]) / 255
        b = float(styleSheet[2].split(")")[0]) / 255
        End_IK_ColorBtn = (r, g, b)

        styleSheet = self.Character_Ctrl_ColorBtn.styleSheet().split(
            "(")[1].split(",")
        r = float(styleSheet[0]) / 255
        g = float(styleSheet[1]) / 255
        b = float(styleSheet[2].split(")")[0]) / 255
        Character_Ctrl_ColorBtn = (r, g, b)

        ##############################################
        ###############      绑定      ###############
        ##############################################

        # 获取起始节点和结束节点坐标

        cmds.select(self.Start_JNT)
        Start_JNT_Coordinate = cmds.xform(q=True, a=True, ws=True, piv=True)

        cmds.select(self.End_JNT)

        End_JNT_Coordinate = cmds.xform(q=True, a=True, ws=True, piv=True)
        cmds.select(cl=True)

        # 批量生成主关节
        Xdistance = End_JNT_Coordinate[0] - Start_JNT_Coordinate[0]
        Ydistance = End_JNT_Coordinate[1] - Start_JNT_Coordinate[1]
        Zdistance = End_JNT_Coordinate[2] - Start_JNT_Coordinate[2]

        # 主控制器
        cmds.circle(nr=(Xdistance, Ydistance, Zdistance),
                    c=(End_JNT_Coordinate[0], End_JNT_Coordinate[1],
                       End_JNT_Coordinate[2]),
                    n=End_IK_Text,
                    r=1)
        Main_Ctrl = cmds.ls(sl=True)[0]
        cmds.setAttr(Main_Ctrl + ".overrideEnabled", 1)

        if mel.eval("getApplicationVersionAsFloat;") >= 2017:
            cmds.setAttr(Main_Ctrl + ".overrideRGBColors", 1)
            cmds.setAttr(Main_Ctrl + ".overrideColorRGB", End_IK_ColorBtn[0],
                         End_IK_ColorBtn[1], End_IK_ColorBtn[2])
        else:
            cmds.setAttr(Main_Ctrl + ".overrideRGBColors", 0)
            cmds.setAttr(Main_Ctrl + ".overrideColor",
                         self.End_IK_ColorSlider.value())

        cmds.setAttr(Main_Ctrl + ".visibility",
                     lock=True,
                     keyable=False,
                     channelBox=False)
        cmds.setAttr(Main_Ctrl + ".sx",
                     lock=True,
                     keyable=False,
                     channelBox=False)
        cmds.setAttr(Main_Ctrl + ".sy",
                     lock=True,
                     keyable=False,
                     channelBox=False)
        cmds.setAttr(Main_Ctrl + ".sz",
                     lock=True,
                     keyable=False,
                     channelBox=False)
        cmds.addAttr(ln="show_mod", at="double", min=0, max=1, dv=1)
        cmds.setAttr(Main_Ctrl + ".show_mod", edit=True, keyable=True)
        cmds.addAttr(ln="grow", at="double", min=0, max=10, dv=10)

        for Main_JNT in range(Main_JNT_Num):
            x = Xdistance * Main_JNT / (Main_JNT_Num -
                                        1) + Start_JNT_Coordinate[0]
            y = Ydistance * Main_JNT / (Main_JNT_Num -
                                        1) + Start_JNT_Coordinate[1]
            z = Zdistance * Main_JNT / (Main_JNT_Num -
                                        1) + Start_JNT_Coordinate[2]
            JNT = cmds.joint(p=(x, y, z),
                             n=Main_JNT_Name_Text + str(Main_JNT + 1))
            cmds.setAttr(JNT + ".tx", k=False, cb=True)
            cmds.setAttr(JNT + ".ty", k=False, cb=True)
            cmds.setAttr(JNT + ".tz", k=False, cb=True)
            cmds.setAttr(JNT + ".rx", k=False, cb=True)
            cmds.setAttr(JNT + ".ry", k=False, cb=True)
            cmds.setAttr(JNT + ".rz", k=False, cb=True)
            cmds.setAttr(JNT + ".sx", k=False, cb=True)
            cmds.setAttr(JNT + ".sy", k=False, cb=True)
            cmds.setAttr(JNT + ".sz", k=False, cb=True)
            cmds.setAttr(JNT + ".visibility", k=False, cb=True)
            cmds.expression(s=JNT + ".sx = " + Main_Ctrl + ".grow/10/" +
                            str(Main_JNT + 1))
            cmds.expression(s=JNT + ".sy = " + Main_Ctrl + ".grow/10/" +
                            str(Main_JNT + 1))
            cmds.expression(s=JNT + ".sz = " + Main_Ctrl + ".grow/10/" +
                            str(Main_JNT + 1))
            if Main_JNT == 0:
                Start_Main_JNT = cmds.ls(sl=True)[0]

        # 生成IK控制器
        End_Main_JNT = cmds.ls(sl=True)
        cmds.select(Start_Main_JNT)
        cmds.select(End_Main_JNT, tgl=True)
        ikList = cmds.ikHandle(sol="ikSplineSolver")

        # 生成控制器
        cmds.select(cl=True)
        CtrlList = []
        for IK_JNT in range(IK_JNT_Num):
            x = Xdistance * IK_JNT / (IK_JNT_Num - 1) + Start_JNT_Coordinate[0]
            y = Ydistance * IK_JNT / (IK_JNT_Num - 1) + Start_JNT_Coordinate[1]
            z = Zdistance * IK_JNT / (IK_JNT_Num - 1) + Start_JNT_Coordinate[2]
            cmds.joint(p=(x, y, z), n=IK_JNT_Name_Text + str(IK_JNT + 1))

            Curent_JNT = cmds.ls(sl=True)[0]

            IK_JNT_Coordinate = cmds.xform(q=True, ws=True, t=True)

            cmds.circle(nr=(Xdistance, Ydistance, Zdistance),
                        c=(IK_JNT_Coordinate[0], IK_JNT_Coordinate[1],
                           IK_JNT_Coordinate[2]),
                        n=IK_CTRL_Name_Text + str(IK_JNT + 1),
                        r=0.4)

            IK_Ctrl = cmds.ls(sl=True)[0]

            cmds.setAttr(IK_Ctrl + ".overrideEnabled", 1)

            if mel.eval("getApplicationVersionAsFloat;") >= 2017:
                cmds.setAttr(IK_Ctrl + ".overrideRGBColors", 1)
                cmds.setAttr(IK_Ctrl + ".overrideColorRGB",
                             IK_CTRL_ColorBtn[0], IK_CTRL_ColorBtn[1],
                             IK_CTRL_ColorBtn[2])
            else:
                cmds.setAttr(IK_Ctrl + ".overrideRGBColors", 0)
                cmds.setAttr(IK_Ctrl + ".overrideColor",
                             self.IK_CTRL_ColorSlider.value())

            cmds.CenterPivot()
            # 冻结变换
            cmds.makeIdentity(apply=True, t=1, r=1, s=1, n=2)

            CtrlList.append(cmds.ls(sl=True)[0])

            cmds.parentConstraint(CtrlList[IK_JNT], Curent_JNT)

            cmds.select(Curent_JNT)
            cmds.setAttr(Curent_JNT + ".tx", k=False, cb=True)
            cmds.setAttr(Curent_JNT + ".ty", k=False, cb=True)
            cmds.setAttr(Curent_JNT + ".tz", k=False, cb=True)
            cmds.setAttr(Curent_JNT + ".rx", k=False, cb=True)
            cmds.setAttr(Curent_JNT + ".ry", k=False, cb=True)
            cmds.setAttr(Curent_JNT + ".rz", k=False, cb=True)
            cmds.setAttr(Curent_JNT + ".sx", k=False, cb=True)
            cmds.setAttr(Curent_JNT + ".sy", k=False, cb=True)
            cmds.setAttr(Curent_JNT + ".sz", k=False, cb=True)
            cmds.setAttr(Curent_JNT + ".visibility", k=False, cb=True)

            if IK_JNT == 0:
                Start_IK_JNT = cmds.ls(sl=True)[0]

        # 将IK关节蒙皮到曲线上
        cmds.select(ikList[2])
        cmds.rebuildCurve(rt=0, s=Curve_Span_Num)
        cmds.select(Start_IK_JNT, hi=True)
        cmds.select(ikList[2], tgl=True)
        # 绑定设置
        cmds.optionVar(iv=('bindTo', 2))
        cmds.optionVar(iv=('skinMethod', 1))
        cmds.optionVar(iv=('multipleBindPosesOpt', 1))
        cmds.optionVar(iv=('bindMethod', 1))
        cmds.optionVar(iv=('removeUnusedInfluences', 0))
        cmds.optionVar(iv=('colorizeSkeleton', 0))
        cmds.optionVar(iv=('maxInfl', 3))
        cmds.optionVar(iv=('normalizeWeights', 2))
        cmds.optionVar(iv=('obeyMaxInfl', 2))

        cmds.SmoothBindSkin()

        # 绑定主物体
        cmds.select(Start_Main_JNT, hi=True)
        cmds.select(self.Rig_Obj, tgl=True)
        cmds.SmoothBindSkin()

        ##############################################
        #############      管理层级     ###############
        ##############################################
        # 删除参考
        if self.Delete_CheckBox.isChecked():
            cmds.delete(self.Start_JNT)
            cmds.delete(self.End_JNT)

        # 模型打组
        cmds.select(self.Rig_Obj)
        Geo_Grp = cmds.group(n=Geo_Name_Text + "_geo")

        # 控制器打组
        CtrlList = list(reversed(CtrlList))
        Grp = ""
        for Ctrl in CtrlList:
            cmds.select(Ctrl)
            cmds.group(n=Ctrl + "_C")
            IKFKC_Grp = cmds.group(n=Ctrl + "_IKFKC")
            if Grp != "":
                cmds.parent(Grp, IKFKC_Grp)
            cmds.select(IKFKC_Grp)
            Grp = cmds.group(n=Ctrl + "_G")

        # MotionSystem 打组
        cmds.select(Start_IK_JNT)
        temp = cmds.group(n=Start_IK_JNT + "_G")
        cmds.setAttr(temp + ".visibility", 0)
        cmds.setAttr(temp + ".visibility", lock=True)
        cmds.setAttr(temp + ".tx", lock=True)
        cmds.setAttr(temp + ".ty", lock=True)
        cmds.setAttr(temp + ".tz", lock=True)
        cmds.setAttr(temp + ".rx", lock=True)
        cmds.setAttr(temp + ".ry", lock=True)
        cmds.setAttr(temp + ".rz", lock=True)
        cmds.setAttr(temp + ".sx", lock=True)
        cmds.setAttr(temp + ".sy", lock=True)
        cmds.setAttr(temp + ".sz", lock=True)
        cmds.select(Grp, tgl=True)
        MotionSystem_Grp = cmds.group(n="MotionSystem")

        # DeformationSystem 打组
        cmds.select(Start_Main_JNT)
        Start_Main_JNT_Grp = cmds.group(n=Start_Main_JNT + "_G")
        cmds.setAttr(Start_Main_JNT_Grp + ".visibility", 0)
        cmds.setAttr(Start_Main_JNT_Grp + ".visibility", lock=True)
        cmds.setAttr(Start_Main_JNT_Grp + ".tx", lock=True)
        cmds.setAttr(Start_Main_JNT_Grp + ".ty", lock=True)
        cmds.setAttr(Start_Main_JNT_Grp + ".tz", lock=True)
        cmds.setAttr(Start_Main_JNT_Grp + ".rx", lock=True)
        cmds.setAttr(Start_Main_JNT_Grp + ".ry", lock=True)
        cmds.setAttr(Start_Main_JNT_Grp + ".rz", lock=True)
        cmds.setAttr(Start_Main_JNT_Grp + ".sx", lock=True)
        cmds.setAttr(Start_Main_JNT_Grp + ".sy", lock=True)
        cmds.setAttr(Start_Main_JNT_Grp + ".sz", lock=True)
        DeformationSystem_Grp = cmds.group(n="DeformationSystem")

        # 主控制器打组
        cmds.circle(nr=(Xdistance, Ydistance, Zdistance),
                    c=(Start_JNT_Coordinate[0], Start_JNT_Coordinate[1],
                       Start_JNT_Coordinate[2]),
                    n=Start_Ctrl_Text,
                    r=1)

        Main2_Ctrl = cmds.ls(sl=True)[0]

        cmds.setAttr(Main2_Ctrl + ".overrideEnabled", 1)
        if mel.eval("getApplicationVersionAsFloat;") >= 2017:
            cmds.setAttr(Main2_Ctrl + ".overrideRGBColors", 1)
            cmds.setAttr(Main2_Ctrl + ".overrideColorRGB",
                         Start_Ctrl_ColorBtn[0], Start_Ctrl_ColorBtn[1],
                         Start_Ctrl_ColorBtn[2])
        else:
            cmds.setAttr(Main2_Ctrl + ".overrideRGBColors", 0)
            cmds.setAttr(Main2_Ctrl + ".overrideColor",
                         self.Start_Ctrl_ColorSlider.value())

        cmds.setAttr(Main2_Ctrl + ".visibility",
                     lock=True,
                     keyable=False,
                     channelBox=False)
        cmds.setAttr(Main2_Ctrl + ".sx",
                     lock=True,
                     keyable=False,
                     channelBox=False)
        cmds.setAttr(Main2_Ctrl + ".sy",
                     lock=True,
                     keyable=False,
                     channelBox=False)
        cmds.setAttr(Main2_Ctrl + ".sz",
                     lock=True,
                     keyable=False,
                     channelBox=False)

        cmds.select(DeformationSystem_Grp)
        cmds.select(MotionSystem_Grp, tgl=True)
        cmds.select(Main2_Ctrl, tgl=True)
        cmds.parent()

        cmds.pickWalk(direction='up')
        Main2_Ctrl = cmds.ls(sl=True)[0]
        Main2_Ctrl_C = cmds.group(n=Main2_Ctrl + "_C")
        Main2_Ctrl_G = cmds.group(n=Main2_Ctrl + "_G")
        Main2_Ctrl = cmds.ls(sl=True)[0]

        cmds.setAttr(Main_Ctrl + ".grow", edit=True, keyable=True)
        cmds.connectAttr(Main_Ctrl + ".show_mod", Geo_Grp + ".visibility")
        cmds.parent(Main2_Ctrl, Main_Ctrl)
        cmds.pickWalk(direction='up')
        cmds.group(n=Main_Ctrl + "_C")
        cmds.group(n=Main_Ctrl + "_G")

        Main_Ctrl_G = cmds.ls(sl=True)[0]

        cmds.curve(d=1,
                   p=[(-1, 0, -1), (-1, 0, 1), (1, 0, 1), (1, 0, -1),
                      (-1, 0, -1)],
                   k=[0, 1, 2, 3, 4],
                   n=Character_Ctrl_Text)

        Character = cmds.ls(sl=True)[0]
        cmds.setAttr(Character + ".overrideEnabled", 1)

        if mel.eval("getApplicationVersionAsFloat;") >= 2017:
            cmds.setAttr(Character + ".overrideRGBColors", 1)
            cmds.setAttr(Character + ".overrideColorRGB",
                         Character_Ctrl_ColorBtn[0],
                         Character_Ctrl_ColorBtn[1],
                         Character_Ctrl_ColorBtn[2])
        else:
            cmds.setAttr(Character + ".overrideRGBColors", 0)
            cmds.setAttr(Character + ".overrideColor",
                         self.Character_Ctrl_ColorSlider.value())

        cmds.setAttr(Character + ".visibility",
                     lock=True,
                     keyable=False,
                     channelBox=False)
        cmds.xform(a=True,
                   ws=True,
                   t=(End_JNT_Coordinate[0], End_JNT_Coordinate[1],
                      End_JNT_Coordinate[2]))
        cmds.parent(Main_Ctrl_G, Character)
        cmds.pickWalk(direction='up')
        cmds.group(n=Character + "_C")
        cmds.group(n=Character + "_G")
        Grp = cmds.group(n=Geo_Name_Text + "_rig")

        # 设置 other_G 中的属性
        cmds.setAttr(ikList[2] + ".visibility", 0)
        cmds.setAttr(ikList[2] + ".visibility",
                     lock=True,
                     keyable=False,
                     channelBox=False)
        cmds.setAttr(ikList[0] + ".visibility", 0)
        cmds.setAttr(ikList[0] + ".visibility", lock=True)
        cmds.setAttr(ikList[0] + ".tx", lock=True)
        cmds.setAttr(ikList[0] + ".ty", lock=True)
        cmds.setAttr(ikList[0] + ".tz", lock=True)
        cmds.setAttr(ikList[0] + ".rx", lock=True)
        cmds.setAttr(ikList[0] + ".ry", lock=True)
        cmds.setAttr(ikList[0] + ".rz", lock=True)
        cmds.setAttr(ikList[0] + ".sx", lock=True)
        cmds.setAttr(ikList[0] + ".sy", lock=True)
        cmds.setAttr(ikList[0] + ".sz", lock=True)
        cmds.setAttr(ikList[0] + ".poleVectorX", lock=True)
        cmds.setAttr(ikList[0] + ".poleVectorY", lock=True)
        cmds.setAttr(ikList[0] + ".poleVectorZ", lock=True)
        cmds.setAttr(ikList[0] + ".offset", lock=True)
        cmds.setAttr(ikList[0] + ".roll", lock=True)
        cmds.setAttr(ikList[0] + ".twist", lock=True)
        cmds.setAttr(ikList[0] + ".ikBlend", lock=True)

        # 重命名曲线
        cmds.rename(ikList[2], Curve_Name_Text)
        # other_G 打组
        cmds.select(ikList[0])
        cmds.select(Curve_Name_Text, tgl=True)
        cmds.group(n="IK_G")
        cmds.group(n="other_G")
        cmds.pickWalk(direction='up')
        cmds.select(Grp, tgl=True)
        cmds.parent()
        Other_Grp = cmds.pickWalk(direction='up')

        cmds.select(Geo_Grp)
        self.Main_Grp = cmds.group(n=Geo_Name_Text + "_all")
        cmds.select(Other_Grp)
        cmds.select(self.Main_Grp, tgl=True)
        cmds.parent()
Example #9
0
def rig(*args):
    if (jointsMirrored):
        unParentJoints()

        #adds Ik Spline to spine joints
        cmds.select(ikHipJoint)
        cmds.select("spine_6", add=True)
        cmds.ikHandle(n="Spine_IkSolver", sol='ikSplineSolver')
        cmds.rename("curve1", "spine_Curve")
        cmds.rename("effector1", "spine_Effector")
        #binds ik curve to two duplicated joints
        #this part duplicates and cleans the joints

        cmds.select("spine_6")
        cmds.duplicate(n="shoulder_bind_joint")
        cmds.parent("shoulder_bind_joint", w=True)
        cmds.select("shoulder_bind_joint")
        cmds.rotate(0, -90, 0, r=True)

        cmds.select(ikHipJoint)
        cmds.duplicate(n="hip_bind_joint")
        cmds.select("hip_bind_joint")
        if (ikHipJoint != 'root'):
            cmds.parent("hip_bind_joint", w=True)
        cmds.pickWalk(d='down')
        cmds.delete()

        #this binds the curve to the control joints
        cmds.select("shoulder_bind_joint")
        cmds.select("hip_bind_joint", add=True)
        cmds.select("spine_Curve", add=True)
        cmds.SmoothBindSkin(
        )  # this should be binded to the selected joints with a ma influence of 2 but it still works like this
        #this creates the control curves and snaps them in placed
        #hip control curve
        maya.mel.eval(
            'curve -d 1 -p -8.586044 2.072055 8.586044 -p -12.879065 -2.072055 9.948048 -p 12.879065 -2.072055 9.948048 -p 8.586044 2.072055 8.586044 -p -8.586044 2.072055 8.586044 -p -8.586044 2.072055 -8.586044 -p -12.879065 -2.072055 -9.948048 -p -12.879065 -2.072055 9.948048 -p -12.879065 -2.072055 -9.948048 -p 12.879065 -2.072055 -9.948048 -p 8.586044 2.072055 -8.586044 -p -8.586044 2.072055 -8.586044 -p 8.586044 2.072055 -8.586044 -p 8.586044 2.072055 8.586044 -p 12.879065 -2.072055 9.948048 -p 12.879065 -2.072055 -9.948048 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15;'
        )
        cmds.rename('curve1', 'hip_Cotrol')
        cmds.select(ikHipJoint)
        cmds.select('hip_Cotrol', add=True)
        cmds.pointConstraint(offset=[0, 0, 0], weight=1)
        cmds.select('hip_Cotrol_pointConstraint1')
        cmds.Delete()

        #shoulder control curve
        cmds.duplicate('hip_Cotrol', n='shoulder_Control')
        cmds.select('shoulder_bind_joint')
        cmds.select('shoulder_Control', add=True)
        cmds.pointConstraint(offset=[0, 0, 0], weight=1)
        cmds.select('shoulder_Control_pointConstraint1')
        cmds.Delete()
        cmds.select('shoulder_Control')
        cmds.scale(0.650436, -1, 0.650436, r=True)

        # this was not part of the tutorial
        #
        cmds.select('shoulder_Control')
        cmds.select('hip_Cotrol', add=True)
        cmds.FreezeTransformations()
        #
        #

        #changes rotate order to zxy on hip control
        cmds.setAttr("hip_Cotrol.rotateOrder", 2)
        cmds.setAttr("shoulder_Control.rotateOrder", 2)
        cmds.setAttr("hip_bind_joint.rotateOrder", 2)
        #cmds.setAttr("shoulder_bind_joint_parentConstraint1.rotateOrder" , 2)#not sure about this one either
        #cmds.setAttr("hip_bind_joint_parentConstraint1.rotateOrder", 2)# not sure about this one
        cmds.setAttr("shoulder_bind_joint.rotateOrder", 2)

        # parents the control joints to the control curves (hips and shoulders)
        cmds.select('shoulder_Control')
        cmds.select('shoulder_bind_joint', add=True)
        cmds.parentConstraint(mo=True, weight=1)
        cmds.select(cl=True)
        cmds.select('hip_Cotrol')
        cmds.select('hip_bind_joint', add=True)
        cmds.parentConstraint(mo=True, weight=1)
        #adding twist
        cmds.setAttr("Spine_IkSolver.dTwistControlEnable", 1)
        cmds.setAttr("Spine_IkSolver.dWorldUpType", 4)
        #adds the world up objects
        maya.mel.eval(
            'connectAttr -f hip_bind_joint.worldMatrix[0] Spine_IkSolver.dWorldUpMatrix;'
        )
        maya.mel.eval(
            'connectAttr -f shoulder_bind_joint.worldMatrix[0] Spine_IkSolver.dWorldUpMatrixEnd;'
        )

        maya.mel.eval('setAttr "Spine_IkSolver.dWorldUpAxis" 1;')
        maya.mel.eval('setAttr "Spine_IkSolver.dWorldUpVectorY" -1;')
        maya.mel.eval('setAttr "Spine_IkSolver.dWorldUpVectorEndY" 0;')
        maya.mel.eval('setAttr "Spine_IkSolver.dWorldUpVectorEndZ" -1;')

        #
        #
        #               I added a rotation to the spine top joint to compensate, this fixed the issue but it's not on the steps (lines 196, 197)
        #               part 3 in the tutorial at the end:
        #               https://www.youtube.com/watch?v=ahgIOJysSHg
        #
        #               BELOW IS FK PART 4 OF TUTORIAL

        # this arrays are used to create secondary joints for spine FK
        cmds.select(cl=True)
        spinesForFkSpine = ['root', 'spine_2', 'spine_4', 'spine_6']
        spinesForFkSpine = ['root', 'spine_2', 'spine_4', 'spine_6']
        namesForFkSpine = [
            'spineFKContro1', 'spineFKContro2', 'spineFKContro3',
            'spineFKContro4'
        ]
        # creating secondary joints for spine FK
        for i in range(0, 4):
            cmds.joint(position=[0, 0, 0], n=namesForFkSpine[i])

        for j in range(0, 4):
            cmds.select(spinesForFkSpine[j])
            cmds.select(namesForFkSpine[j], add=True)
            cmds.pointConstraint(offset=[0, 0, 0], weight=1, n='temp')
            cmds.select('temp')
            cmds.Delete()

        ParentJoints()
    else:
        print("All joints must be placed before control rig is added.")