def setupTeeth(self): allCons = [] conGrps = [] ConObj = CreateControler( 13, (0.1 * self.scale, 0.1 * self.scale, 0.1 * self.scale)) ConObj.signValue = 54861 for i, jnt in enumerate(self.jnts): jntMat = rig.getAttr(jnt + '.worldMatrix') con = ConObj.SK_b08(jnt.split('_')[0] + '_M') allCons.append(con) rig.xform(con, ro=(90, 0, 0), wd=True) rig.makeIdentity(apply=True, r=True) rig.xform(con, m=jntMat) conGrp = CA.addGrp().grp(con, 'Freeze') conGrps.append(conGrp) rig.parentConstraint(con, jnt, mo=True) rig.scaleConstraint(con, jnt, mo=True) self.Connect.connect(self.grp, allCons) #连接控制器属性 newGrp = rig.group(conGrps, n=self.grp + '_CTRLGrp') rig.parent(newGrp, self.grp) #连接visibility属性 Connect = CA.connectAttribute() Connect.sourceAttr = 'conVis' Connect.targetAttr = 'visibility' Connect.connect(self.grp, [rig.listRelatives(con, p=True)[0] for con in allCons])
def startSkin(self): print self.checkBoxDict print self.textFieldDict print self.relativeDict for CB in self.checkBoxDict: if self.checkBoxDict[CB]: bts = self.relativeDict[CB] if 0 == len(bts): pass if 1 == len(bts): obj = self.textFieldDict[bts[0]] newObj = obj[2:-1] objs = newObj.split("', u'") if self.bts[bts[0]] and objs[0] != '': infs = rig.sets(self.bts[bts[0]], q=True) CA.skinClusterObj().skinClusters(infs, objs) if 1 < len(bts): for bt in bts: obj = self.textFieldDict[bt] newObj = obj[2:-1] objs = newObj.split("', u'") if self.bts[bt] and objs[0] != '': infs = rig.sets(self.bts[bt], q=True) CA.skinClusterObj().skinClusters(infs, objs)
def restoryTemplate(self): #获得控制器形状 ShpaeIE = InportExport.SK_ImportExportUI() cons = [] if rig.objExists('face_controls_Sets'): cons = WDBase.getSetElements().getEle() ShpaeIE.allCons = cons ShpaeIE.relativesSet = False # ShpaeIE.conSpace = True ShapeInfo = ShpaeIE.SK_getCurveShape() parameter = WDBase.convertData().getAttrData( 'Head_FaceRig_Control_GRP.parameter') templateInfo = WDBase.convertData().getAttrData( 'Head_FaceRig_Control_GRP.templateInfo') rig.file(f=True, new=True) WDTemplate.WD_buildPostion(parameter[0], parameter[1], parameter[2], parameter[3], parameter[4], parameter[5], parameter[6], parameter[7], parameter[8], parameter[9]) BD.backupData([], [], [], parameter).done() #备份数据 self.setWindowInfo() positinIE = InportExport.SK_ImportExportUI() positinIE.relativesSet = False positinIE.shapeSign = False positinIE.conSpace = False positinIE.SK_setCurveShape(templateInfo) ShpaeIE.SK_setCurveShape(ShapeInfo)
def getData(self): self.jnts = [con for con in rig.listConnections(self.grp+'.CTRLJoint', s = False, d = True)] self.jnts = CA.order().startOrder(self.jnts)#对数组进行排序 self.scale = CA.distance().getScale(self.jnts[0], self.jnts[-1], 1.24976436649) self.Connect = CA.connectAttribute() self.Connect.attrType = 'long' self.Connect.sourceAttr = 'CTRLCurve' self.Connect.targetAttr = 'CTRLCurve'
def startBackupData(self): CA.convertData().setAttrData(self.grp + '.parameter', self.parameter) CA.convertData().setAttrData(self.grp + '.checkBoxDict', self.checkBoxDict) CA.convertData().setAttrData(self.grp + '.textFieldDict', self.textFieldDict) CA.convertData().setAttrData(self.grp + '.relativeDict', self.relativeDict) CA.convertData().setAttrData(self.grp + '.templateInfo', self.getTemplateInfo())
def getData(self): self.jnts = [ con for con in rig.listConnections( self.grp + '.CTRLJoint', s=False, d=True) ] self.scale = CA.distance().getScale(self.jnts[0], self.jnts[-1], 0.35) self.Connect = CA.connectAttribute() self.Connect.attrType = 'long' self.Connect.sourceAttr = 'CTRLCurve' self.Connect.targetAttr = 'CTRLCurve'
def __init__(self, checkBoxDict, textFieldDict, relativeDict, parameter): self.checkBoxDict = checkBoxDict self.textFieldDict = textFieldDict self.relativeDict = relativeDict self.parameter = parameter self.grp = CA.getRigGrp().createGrp()
def skinSet(self): infs = rig.listConnections(self.grp + '.CTRLJoint', s=False, d=True) InfSets = CA.addSets() InfSets.componentSets = 'Face_UpTeeth_Sets' InfSets.startAdd(infs[0]) InfSets.componentSets = 'Face_DnTeeth_Sets' InfSets.startAdd(infs[1])
def buildPosController(self): self.getWindowInfo() parameter = WDBase.convertData().getAttrData( 'Head_FaceRig_Control_GRP.parameter') WDTemplate.WD_buildPostion(parameter[0], parameter[1], parameter[2], parameter[3], parameter[4], parameter[5], parameter[6], parameter[7], parameter[8], parameter[9])
def Groups(self): rig.parent(self.aimLoctorGrp, self.eye) #连接visibility属性 Connect = CA.connectAttribute() Connect.sourceAttr = 'conVis' Connect.targetAttr = 'visibility' Connect.connect(self.eye, [rig.listRelatives(con, p = True)[0] for con in self.allCons])
def __init__(self): self.main = 'Main_Control_GRP' self.head = 'Head_Control_GRP' self.tempCurve = [] #临时曲线 self.tempJoint = [] #临时骨骼 self.deformerGrp = CA.getRigGrp() self.deformerGrp.grp = 'Head_FaceDeformers_GRP'
def eyeLid(self): self.newAddJnts = [] for lip in self.lips: rig.select(cl = True) pos = rig.xform(lip, q = True, t = True, ws = True) Njnt = rig.joint(p = pos, n = lip+'_Joint') # self.newAddJnts.append(Njnt) rig.hide(Njnt) NjntGrp = rig.group(Njnt, n = Njnt+'_GRP') jntTemp = re.compile('_UpLid_|_DnLid_').sub('_Eye_',lip) jnt = re.compile('M\Z').sub('Joint',jntTemp) lipGrp = rig.group(empty = True, n = lip+'_GRP') lipGrpUp = rig.group(lipGrp, n = lip+'_GRP_UP') lipGrpTop = rig.group(lipGrpUp, n = lip+'_GRP_TOP') jntParent = rig.listRelatives(jnt, p = True)[0] jntMat = rig.getAttr(jnt+'.worldMatrix') rig.xform(lipGrpTop, m = jntMat) aimNode = rig.aimConstraint(lip ,lipGrpTop, aimVector = (0, 0, 1), upVector = (0, 1, 0), worldUpType = 'object', worldUpObject = jnt+'_Loc_GRP') rig.delete(aimNode) lipCon = CA.addGrp().grp(lip,'AimRotate')#增加 组 #连接旋转和位移 rig.connectAttr(lip+'.rotateZ', lipGrp+'.rotateZ') rig.connectAttr(lip+'.scaleX', lipGrp+'.scaleX') rig.connectAttr(lip+'.scaleZ', lipGrp+'.scaleZ') translateMD = rig.createNode('multiplyDivide', n = lip +'_translate_MD', ss = True) lipRoateGrp = rig.listRelatives(lip, p = True)[0] print lipRoateGrp rig.addAttr(lipRoateGrp, at = 'float', ln = 'Move', dv = -157/self.scale, k = True) rig.connectAttr(lip+'.translateY', translateMD+'.input1X') rig.connectAttr(lipRoateGrp+'.Move', translateMD+'.input2X') rig.connectAttr(translateMD+'.outputX', lipGrpUp+'.rotateX') rig.parent(lipGrpTop, lipCon, jnt+'_CTRL_GRP') rig.parent(NjntGrp, lipGrp) jnts = [jnt for jnt in rig.listConnections(self.eye+'.CTRLJoint', s = False, d = True)]#列出眼睛控制器骨骼,注意:不包含新增加的眼皮骨骼 for jnt in jnts: con = re.compile('Joint\Z').sub('M',jnt)#得到控制器名字 lipCon = CA.addGrp().grp(con,'freeze')#增加 组
def WD_buildPostion(main, ear, eye, eyebrow, tongue, tooth, joints, eyebrowNum, mouthNum, nasolabialGrooveNum): if main: mainObject = BuildMainController(eyebrowNum, mouthNum, nasolabialGrooveNum) mainObject.done() # rig.connectAttr('LfUpLip_0M.translate', 'LfDnLip_0M.translate') # rig.connectAttr('RtUpLip_0M.translate', 'RtDnLip_0M.translate') if ear: earObject = BuildEarController() earObject.done() if eye: eyeObject = BuildEyeController() eyeObject.num = 3 eyeObject.done() if eyebrow: eyebrowObject = BuildEyebrowController() eyebrowObject.done() if tongue: tongueObject = BuildTongueController() tongueObject.num = 5 tongueObject.done() if tooth: toothObject = BuildToothController() toothObject.done() if joints: jointsObject = BuildjointsController() jointsObject.done() faceRig = CA.getRigGrp().createGrp() #生成空组Head_FaceRig_Control_GRP rig.select(cl=True) jnt = rig.joint(p=(0, 15, 0.44), n='Head_Zero_Joint') jntGrp = rig.group(jnt, n=jnt + '_GRP') rig.parent(jntGrp, faceRig) grps = [ u'Main_Control_GRP', u'Ear_Control_GRP', u'Eye_Control_GRP', u'Eyebrow_Control_GRP', u'Tongue_Control_GRP', u'Tooth_Control_GRP', u'Head_Control_GRP' ] for grp in grps: #将每个部件的组P给Head_FaceRig_Control_GRP if rig.objExists(grp): rig.parent(grp, faceRig) rig.select(faceRig) #选择Head_FaceRig_Control_GRP rig.xform(faceRig, cp=True, p=True)
def Groups(self): #整理层级 CTRLCurves = rig.listConnections(self.grpName + '.CTRLCurve', s=False, d=True) CA.freezeObj().freeze(CTRLCurves) CTRLJoints = rig.listConnections(self.grpName + '.CTRLJoint', s=False, d=True) CTRLCurveGRP = rig.group(CTRLCurves, n=self.grpName + '_CTRLCurve') CTRLJointGRP = rig.group(CTRLJoints, n=self.grpName + '_CTRLJoint') mainCons = [con for con in CTRLCurves if re.match('Eye_M', con)] secCons = [ con for con in CTRLCurves if re.match('\ALf_Eye_\d+M|\ARt_Eye_\d+M', con) ] if secCons: rig.parent(secCons, mainCons[0]) rig.parent(CTRLCurveGRP, CTRLJointGRP, self.grpName)
def extraAddLid(self): exLids = [con for con in self.allCons if re.match('.+LidMin_\d+M',con)] print exLids for lid in exLids: if re.match('Lf_', lid): LR = 'Lf_' else: LR = 'Rt_' if re.match('\w\w_Up', lid): UD = 'Up' elif re.match('\w\w_Dn', lid): UD = 'Dn' else: UD = None pos = rig.xform(lid, q = True, t = True) rig.select(cl = True) jnt = rig.joint(p = pos ,n = lid+'_Joint')#创建骨骼 rig.parent(jnt, lid) rig.hide(jnt) self.newAddJnts.append(jnt) ConGrp = CA.addGrp().grp(lid, 'Rotate') if UD: parentJnt = LR+UD+'Lid_0M_GRP_UP' mat = rig.getAttr(parentJnt+'.worldMatrix') grp = rig.group(empty = True, n = ConGrp+'_Rotate') rig.xform(grp, m = mat) rig.parent(ConGrp, grp) rig.parent(grp, LR+UD+'Lid_0M_GRP') parentLid = rig.listRelatives(lid, p = True)[0] if re.match('\w+_2M\Z', lid): v = 1 else: v = -0.3 rig.addAttr(parentLid, at = 'float', ln = 'RotateRX', k = True, dv = v) # rig.addAttr(parentLid, at = 'float', ln = 'RotateRY', k = True, dv = 1) # rig.addAttr(parentLid, at = 'float', ln = 'RotateRZ', k = True, dv = 1) RotateRoMD = rig.createNode('multiplyDivide', n = lid+'_Roate_MD') rig.connectAttr(parentJnt+'.rotate', RotateRoMD+'.input2') rig.connectAttr(parentLid+'.RotateRX', RotateRoMD+'.input1X') # rig.connectAttr(parentLid+'.RotateRY', RotateRoMD+'.input1Y') # rig.connectAttr(parentLid+'.RotateRZ', RotateRoMD+'.input1Z') rig.connectAttr(RotateRoMD+'.output', grp+'.rotate') # rig.parent(ConGrp, LR+UD+'Lid_0M_GRP') else: parentJnt = LR+'Eye_0Joint_CTRL_GRP' rig.parent(ConGrp, parentJnt)
def createJoint(self): tempCurveName = rig.curve(d=3, p=self.curve) #生成曲线 curCurveName = rig.rename(tempCurveName, self.tempCruveName) #重命名曲线 curCurveNameShape = rig.listRelatives(curCurveName, s=True)[0] #获得形节点 CurveInfo = CA.curveAverage() posInfo = CurveInfo.getInfo(curCurveNameShape, self.num)[1] #获得位置信息 rig.delete(curCurveName) #删除曲线 #生成骨骼 rig.select(cl=True) for i, pos in enumerate(posInfo): jnt = rig.joint(p=pos, n=self.name + '_' + str(i) + 'Joint') self.connectAddAttr(jnt, 'CTRLJoint') #连接属性
def importExportControlCurve(self): cons = [] if rig.objExists('face_controls_Sets'): cons = WDBase.getSetElements().getEle() TempIE = InportExport.SK_ImportExportUI() TempIE.guiName = 'IEControl_UI' TempIE.guiTitle = u'导入导出控制器' TempIE.guiImport = u'导入控制器' TempIE.guiExport = u'导出控制器' TempIE.allCons = cons TempIE.relativesSet = False TempIE.displayUI()
def mirrorCon(self, axis, direction): MirrorCon = WDBase.BlendShapeController() if rig.objExists('Main_Control_GRP'): rigging = rig.attributeQuery('rigging', node='Main_Control_GRP', ex=True) MirrorCon.grp = 'Main_Control_GRP' MirrorCon.axis = axis MirrorCon.direction = direction MirrorCon.conType = 'small' MirrorCon.select = False MirrorCon.rigging = rigging MirrorCon.Mirror() if rig.objExists('Head_Control_GRP'): rigging = rig.attributeQuery('rigging', node='Head_Control_GRP', ex=True) MirrorCon.grp = 'Head_Control_GRP' MirrorCon.axis = axis MirrorCon.direction = direction MirrorCon.conType = 'macro' MirrorCon.select = False MirrorCon.rigging = rigging MirrorCon.Mirror() if rig.objExists('Eye_Control_GRP'): rigging = rig.attributeQuery('rigging', node='Eye_Control_GRP', ex=True) MirrorCon.grp = 'Eye_Control_GRP' MirrorCon.axis = axis MirrorCon.direction = direction MirrorCon.conType = 'eye' MirrorCon.select = False MirrorCon.rigging = rigging MirrorCon.Mirror() if rig.objExists('Ear_Control_GRP'): rigging = rig.attributeQuery('rigging', node='Ear_Control_GRP', ex=True) MirrorCon.grp = 'Ear_Control_GRP' MirrorCon.axis = axis MirrorCon.direction = direction MirrorCon.conType = 'ear' MirrorCon.select = False MirrorCon.rigging = rigging MirrorCon.Mirror()
def mirrorBlendShape(self, axis, direction, Msign): if Msign: MirrorCon = WDBase.BlendShapeController() if rig.objExists('Main_Control_GRP'): MirrorCon.grp = 'Main_Control_GRP' MirrorCon.axis = axis MirrorCon.direction = direction MirrorCon.conType = 'blendShape' MirrorCon.select = False MirrorCon.Mirror() else: Mth = MTH.createBlendShape() Mth.auto = False Mth.addBlendShapeControl()
def skinSet(self): InfSets = CA.addSets() infs = rig.listConnections(self.eye+'.CTRLJoint', s = False, d = True) for inf in infs: if re.match('\ALf_', inf): InfSets.componentSets = 'Face_LfEye_Sets' InfSets.startAdd(inf) if re.match('\ARt_', inf): InfSets.componentSets = 'Face_RtEye_Sets' InfSets.startAdd(inf) InfSets.componentSets = 'Face_BsMesh_Sets' InfSets.startAdd(self.newAddJnts)
def startLockTransform(self): Trans = CA.getAllTransform() Trans.removeObj = self.conSetObj Trans.grpName = 'Head_FaceRig_Control_GRP' Head_FaceRig_Control_GRP = Trans.getTransform() Trans.grpName = 'Head_FaceDeformers_GRP' Head_FaceDeformers_GRP = Trans.getTransform() Head_FaceRig_Control_GRP.extend(Head_FaceDeformers_GRP) allTransforms = Head_FaceRig_Control_GRP for obj in allTransforms: Lock = BC.LockHideAttr(False, False, False, False) Lock.hideAndLockObj(obj)
def setWindowInfo(self): parameter = WDBase.convertData().getAttrData( 'Head_FaceRig_Control_GRP.parameter') main = rig.checkBox(self.mainCB, e=True, v=parameter[0]) ear = rig.checkBox(self.earCB, e=True, v=parameter[1]) eye = rig.checkBox(self.eyeCB, e=True, v=parameter[2]) eyebrow = rig.checkBox(self.eyebrowCB, e=True, v=parameter[3]) tongue = rig.checkBox(self.tongueCB, e=True, v=parameter[4]) tooth = rig.checkBox(self.toothCB, e=True, v=parameter[5]) joints = rig.checkBox(self.jointCB, e=True, v=parameter[6]) eyebrowNum = rig.intSliderGrp(self.eyebrowISG, e=True, v=parameter[7]) mouthNum = rig.intSliderGrp(self.mouthISG, e=True, v=parameter[8]) nasolabialGrooveNum = rig.intSliderGrp(self.cheefISG, e=True, v=parameter[9])
def linkVis(self): allCons = rig.listConnections(self.grp + '.CTRLCurve', s=False, d=True) frontGrp = [] backGrp = [] for con in allCons: grp = rig.listRelatives(con, p=True)[0] if re.match('\w+_Back_\d+M', con): backGrp.append(grp) else: frontGrp.append(grp) connectVisibility = CA.connectAttribute() connectVisibility.sourceAttr = 'smallVis' connectVisibility.connect(self.grp, frontGrp) connectVisibility.sourceAttr = 'smallBackVis' connectVisibility.connect(self.grp, backGrp)
def getData(self): GRP = CA.getRigGrp() self.rigGrp = GRP.createGrp() GRP.grp = self.eye+'_Loc' self.aimLoctorGrp = GRP.createGrp() self.allCons = [con for con in rig.listConnections(self.eye+'.CTRLCurve', s = False, d = True)] jnts = [jnt for jnt in rig.listConnections(self.eye+'.CTRLJoint', s = False, d = True)] if 1 == len(jnts): self.jnts = [jnt for jnt in jnts if not re.match('\ALf_|\ARt_',jnt)] else: self.jnts = [jnt for jnt in jnts if re.match('\ALf_|\ARt_',jnt)] self.lips = [con for con in self.allCons if re.match('.+Lid_\d+M',con)]
def changeConSize(self): size = rig.floatSliderGrp(self.sizeFSG, q=True, v=True) rig.floatSliderGrp(self.sizeFSG, e=True, v=1) Con = WDBase.changeController() objs = rig.ls(sl=True) if objs: obj = objs[0] if re.match('\ALf[A-Z]+|\ARt[A-Z]+', obj): Con.size = size Con.operate = 'changeSize' Con.selectTypes('small') elif re.match('\ALf_.+Macro_M\Z|\ARt_.+Macro_M\Z', obj): Con.size = size Con.operate = 'changeSize' Con.selectTypes('macro') elif re.match('\ALf_.+_M\Z|\ARt_.+_M\Z', obj): Con.size = size Con.operate = 'changeSize' Con.selectTypes('main')
def startSetup(self): checkBoxData = dict([(CB, rig.checkBox(self.__dict__[CB], q=True, v=True)) for CB in self.allCB]) textFieldData = dict([ (TF, rig.textField(self.__dict__[TF.replace('BT', 'TF')], q=True, tx=True)) for TF in self.allBt ]) StartSetup = WDMain.combineComponent(checkBoxData, textFieldData, self.dictData) self.getWindowInfo() parameter = WDBase.convertData().getAttrData( 'Head_FaceRig_Control_GRP.parameter') print parameter BD.backupData(checkBoxData, textFieldData, self.dictData, parameter).done() #备份数据 StartSetup.done()
def linkLimitAttr(self): attr4 = [u'+translateX', u'+translateY',u'-translateX', u'-translateY'] attr6Cons = [u'Rt_Brow_M', u'Lf_Brow_M', u'Mouth_Tip_M',u'JawMain_M',u'Lf_Cheek_M', u'Rt_Cheek_M', u'Lf_CornerLip_M', u'Rt_CornerLip_M', u'Up_Lip_M', u'Dn_Lip_M'] attr6 = [u'+translateX', u'+translateY', u'+translateZ',u'-translateX', u'-translateY', u'-translateZ'] self.RotateToTranslate = {u'limitMaxrx':u'+translateX', u'limitMinx':u'-translateX', u'limitMaxry':u'+translateY', u'limitMinry':u'-translateY', u'limitMaxrz':u'+translateZ', u'limitMinrz':u'-translateZ',} self.TranslateToRotate = dict([(self.RotateToTranslate[attr], attr )for attr in self.RotateToTranslate]) linkAttr = CA.connectAttribute() linkAttr.attrType = 'float' linkAttr.sourceAttr = 'CTRLBSRotate' linkAttr.targetAttr = 'CTRLBSRotate' subCon = [u'Nose_M'] cons = [con for con in self.CTRLBsCurves if not(con in subCon)] for con in cons: rotateLimit = rig.listAttr(con,ud = True, k = True) if rotateLimit: attrs = [] print con+'------------>' matCon = rig.getAttr(con+'.worldMatrix') conGrp = rig.group(empty = True, n = con+'_Rotation') linkAttr.connect(self.grp, [conGrp])#连接属性 rig.xform(conGrp, m = matCon) rig.parent(conGrp, con) for rl in rotateLimit:#迭代旋转属性 attrs.append(self.RotateToTranslate[rl]) grpAttr = conGrp+'.t'+rl[-1] if not rig.connectionInfo(grpAttr, isDestination=True): rig.connectAttr(con+'.'+rl[-2::], grpAttr, f = True) self.rampAndLimit(conGrp, attrs) if con in attr6Cons: self.rampAndLimit(con, attr6) else: self.rampAndLimit(con, attr4)
def setupTongue(self): #对骨骼校正轴向 oj = 'zyx' secondaryAxisOrient = 'yup' orientJoints = [jnt for jnt in self.jnts]#排除不需要校正轴向的骨骼 for jnt in orientJoints: rig.joint(jnt,e = True, oj = oj, secondaryAxisOrient = secondaryAxisOrient, ch = False, zso = True) rig.joint(self.jnts[-1],e = True, oj = 'none', ch = False, zso = True) #生成控制器并增加父子约束 allCons = [] preCon = '' ConObj = CreateControler(13, (0.1*self.scale, 0.1*self.scale, 0.1*self.scale)) ConObj.signValue = 32547 for i,jnt in enumerate(self.jnts): jntMat = rig.getAttr(jnt+'.worldMatrix') con = ConObj.SK_b08(jnt.split('_')[0]+'_'+str(i)+'M') allCons.append(con) rig.xform(con, ro = (90, 0, 0), wd = True) rig.makeIdentity(apply = True, r = True) rig.xform(con, m = jntMat) conGrp = CA.addGrp().grp(con, 'Freeze') if i != 0: rig.parent(conGrp, preCon) preCon = con rig.parentConstraint(con, jnt, mo = True) self.Connect.connect(self.grp, allCons)#连接控制器属性 #连接visibility属性 self.Connect.sourceAttr = 'conVis' self.Connect.targetAttr = 'visibility' self.Connect.connect(self.grp, [rig.listRelatives(con, p = True)[0] for con in allCons])
def startCreateSet(self): consSet = CA.addSets() consSet.faceSets = 'face_controls_Sets' for grp in self.allGroups: if rig.objExists(grp): #如果组存在 if 'Head_Control_GRP' == grp: cons = rig.listConnections(grp + '.CTRLBsCurve', s=False, d=True) MacroCons = rig.listConnections(grp + '.CTRLMacroCurve', s=False, d=True) cons.extend(MacroCons) else: cons = rig.listConnections(grp + '.CTRLCurve', s=False, d=True) if cons: consSet.componentSets = 'Face_' + grp.split( '_')[0] + '_sets' consSet.startAdd(self.exceptCons(cons))
def skinSet(self): InfSets = CA.addSets() InfSets.componentSets = 'Face_Main_Sets' infs = rig.listConnections(self.grp + '.LoftMesh', s=False, d=True) InfSets.startAdd(infs)