def connectFromDefinition(self, BSDefinition, currentBlendShape, blendShapeNode, prefix, extremeValue, objectPrefix=''): if prefix != "": Side = self.getSideFromPrefix(prefix) #print "Connecting:%s.%s To %s.%s"% (self.NameConv.RMSetFromName(BSDefinition["control"],Side,Token = "Side" ), BSDefinition['blendShapes'][currentBlendShape]["connection"], blendShapeNode, prefix +currentBlendShape) control = self.NameConv.set_from_name(BSDefinition["control"], Side, Token="Side") else: control = BSDefinition["control"] if extremeValue > 0: RMRigTools.RMConnectWithLimits( "%s.%s" % (control, BSDefinition['blendShapes'][currentBlendShape]["connection"]), "%s.%s" % (blendShapeNode, prefix + objectPrefix + currentBlendShape), [[0, 0], [extremeValue, 1]]) else: RMRigTools.RMConnectWithLimits( "%s.%s" % (control, BSDefinition['blendShapes'][currentBlendShape]["connection"]), "%s.%s" % (blendShapeNode, prefix + objectPrefix + currentBlendShape), [[extremeValue, 1], [0, 0]])
def CreateJointChainSquareRig(self, JointChain, UDaxis="Y"): if self.NameConv.is_name_in_format(JointChain[0]): if self.NameConv.get_from_name(JointChain[0], "side") == "LF": sideVariation = 1 else: sideVariation = -1 else: sideVariation = 1 if UDaxis in ["Y", "Z"]: BoxResetPoint, BoxControl = RMRigShapeControls.RMCreateBoxCtrl( JointChain[len(JointChain) - 1], ParentBaseSize=True, Xratio=.5, Yratio=.5, Zratio=.5) self.addChainParameters(BoxControl, len(JointChain) - 1) cmds.makeIdentity(BoxControl, apply=True, r=False, t=True, s=True, n=0) cmds.parentConstraint(JointChain[len(JointChain) - 1], BoxResetPoint) RMRigTools.RMLockAndHideAttributes(BoxControl, "0000000000") if UDaxis == "Y": LRaxis = "Z" elif UDaxis == "Z": LRaxis = "Y" for eachjoint in range(len(JointChain) - 1): RMRigTools.RMConnectWithLimits( BoxControl + ".UD" + str(eachjoint + 1), JointChain[eachjoint] + (".rotate%s" % UDaxis), [[-10, 100], [0, 0], [10, -100]]) RMRigTools.RMConnectWithLimits( BoxControl + ".LR" + str(eachjoint + 1), JointChain[eachjoint] + (".rotate%s" % LRaxis), [[-10, sideVariation * 100], [0, 0], [10, sideVariation * -100]]) RMRigTools.RMConnectWithLimits( BoxControl + ".Twist" + str(eachjoint + 1), JointChain[eachjoint] + ".rotateX", [[-10, sideVariation * 100], [0, 0], [10, sideVariation * -100]]) else: print "Not Valid UD Axis Provided"
def linkJointDefinition(self, Side, jointLinkDefinition): control = jointLinkDefinition['control'] if Side in ["LF", "RH"]: control = self.NameConv.set_from_name( jointLinkDefinition['control'], Side, Token='Side') if cmds.objExists(control): for eachAttribute in jointLinkDefinition['order']: jointsList = self.returnJointsByControl( eachAttribute, jointLinkDefinition['joints']) for eachJoint in jointsList: JointName = eachJoint if Side in ["LF", "RH"]: JointName = self.NameConv.set_from_name(eachJoint, Side, Token='Side') if cmds.objExists(JointName): if jointLinkDefinition['joints'][eachJoint][ 'value'] == None: cmds.connectAttr( '%s.%s' % (control, jointLinkDefinition['joints'] [eachJoint]['connection']), '%s.%s' % (JointName, jointLinkDefinition['joints'] [eachJoint]['inputPlug']), force=True) else: self.AddAttributes( control, eachAttribute, jointLinkDefinition['attributes'] [eachAttribute]['min'], jointLinkDefinition['attributes'] [eachAttribute]['max']) RMRigTools.RMConnectWithLimits( '%s.%s' % (control, jointLinkDefinition['joints'] [eachJoint]['connection']), '%s.%s' % (JointName, jointLinkDefinition['joints'] [eachJoint]['inputPlug']), jointLinkDefinition['joints'][eachJoint] ['value']) else: print "Joint object doesnt exists:%s" % JointName else: print "Control object doesnt exists:%s" % control control = self.NameConv.set_from_name( jointLinkDefinition['control'], Side, Token='Side') #if __name__=="__main__": # Manager = BSManager() # Manager.AppyBlendShapeDefinition( SkinedJoints)
def CreateFingerSquareRig(self, Finger): if self.NameConv.get_from_name(Finger[0], "side") == "L": sideVariation = 1 else: sideVariation = -1 BoxResetPoint, BoxControl = RMRigShapeControls.RMCreateBoxCtrl( Finger[len(Finger) - 1], ParentBaseSize=True, Xratio=.5, Yratio=.5, Zratio=.5) self.RMaddFinguerControls(BoxControl) pm.makeIdentity(BoxControl, apply=True, r=False, t=True, s=True, n=0) pm.parentConstraint(Finger[len(Finger) - 1], BoxResetPoint) RMRigTools.RMLockAndHideAttributes(BoxControl, "0000000000") RMRigTools.RMConnectWithLimits("%s.MidUD" % BoxControl, "%s.rotateY" % Finger[0], [[-10, 100], [0, 0], [10, -100]]) RMRigTools.RMConnectWithLimits( "%s.MidLR" % BoxControl, "%s.rotateZ" % Finger[0], [[-10, sideVariation * 120], [0, 0], [10, sideVariation * -127]]) RMRigTools.RMConnectWithLimits( "%s.MidTwist" % BoxControl, "%s.rotateX" % Finger[0], [[-10, sideVariation * 90], [0, 0], [10, sideVariation * -90]]) index = 1 for eachjoint in range(0, len(Finger) - 1): RMRigTools.RMConnectWithLimits("%s.UD%s" % (BoxControl, index), "%s.rotateY" % Finger[eachjoint], [[-10, 100], [0, 0], [10, -100]]) RMRigTools.RMConnectWithLimits("%s.LR%s" % (BoxControl, index), "%s.rotateZ" % Finger[eachjoint], [[-10, sideVariation * 120], [0, 0], [10, sideVariation * -127]]) RMRigTools.RMConnectWithLimits( "%s.Twist%s" % (BoxControl, index), "%s.rotateX" % Finger[eachjoint], [[-10, sideVariation * 90], [0, 0], [10, sideVariation * -90]]) index += 1 self.fingerControlsReset.append(BoxResetPoint) self.fingerContols.append(BoxControl)
def AddRibbon(SknJointStructure, SknParentGroup, currentTwists, ToDeleteNodes, LookAtAxis="Y"): NameConv = nameConvention.NameConvention() ObjectTransformDiclist = RMUncategorized.ObjectTransformDic(currentTwists) for i in ToDeleteNodes: if cmds.objExists(i): cmds.delete(i) RMUncategorized.SetObjectTransformDic(ObjectTransformDiclist) TJArm = RMTwistJoints.RMTwistJoints() TJArm.RMCreateTwistJoints(SknJointStructure[0], SknJointStructure[1], NumberOfTB=2, LookAtAxis=LookAtAxis) constraintTJArm = cmds.parentConstraint(SknParentGroup, TJArm.TwistControlResetPoint, mo=True)[0] constraintTJArm = NameConv.rename_based_on_base_name( SknJointStructure[1], constraintTJArm, {}) Ribbon = RMRibbon.RMRibbon() Ribbon.RibbonCreation(SknJointStructure[0], SknJointStructure[1], foliculeNumber=4) for index in range(len(currentTwists)): cmds.parentConstraint(Ribbon.jointStructure[index], currentTwists[index], mo=True) for index in range(len(Ribbon.resetControls)): cmds.parentConstraint(TJArm.TwistJoints[index], Ribbon.resetControls[index], mo=True) cmds.addAttr(Ribbon.controls[0], at="float", ln="Volume", hnv=1, hxv=1, h=0, k=1, smn=-10, smx=10) cmds.addAttr(Ribbon.controls[1], at="float", ln="VolumeUp", hnv=1, hxv=1, h=0, k=1, smn=-10, smx=10) cmds.addAttr(Ribbon.controls[1], at="float", ln="VolumeLow", hnv=1, hxv=1, h=0, k=1, smn=-10, smx=10) cmds.addAttr(Ribbon.controls[2], at="float", ln="Volume", hnv=1, hxv=1, h=0, k=1, smn=-10, smx=10) RMRigTools.RMConnectWithLimits('%s.Volume' % Ribbon.controls[0], '%s.scaleY' % currentTwists[0], [[-10, 0], [0, 1], [10, 4]]) RMRigTools.RMConnectWithLimits('%s.Volume' % Ribbon.controls[0], '%s.scaleZ' % currentTwists[0], [[-10, 0], [0, 1], [10, 4]]) RMRigTools.RMConnectWithLimits('%s.VolumeUp' % Ribbon.controls[1], '%s.scaleY' % currentTwists[1], [[-10, 0], [0, 1], [10, 4]]) RMRigTools.RMConnectWithLimits('%s.VolumeUp' % Ribbon.controls[1], '%s.scaleZ' % currentTwists[1], [[-10, 0], [0, 1], [10, 4]]) RMRigTools.RMConnectWithLimits('%s.VolumeLow' % Ribbon.controls[1], '%s.scaleY' % currentTwists[2], [[-10, 0], [0, 1], [10, 4]]) RMRigTools.RMConnectWithLimits('%s.VolumeLow' % Ribbon.controls[1], '%s.scaleZ' % currentTwists[2], [[-10, 0], [0, 1], [10, 4]]) RMRigTools.RMConnectWithLimits('%s.Volume' % Ribbon.controls[2], '%s.scaleY' % currentTwists[3], [[-10, 0], [0, 1], [10, 4]]) RMRigTools.RMConnectWithLimits('%s.Volume' % Ribbon.controls[2], '%s.scaleZ' % currentTwists[3], [[-10, 0], [0, 1], [10, 4]])
def CreatePalmRig(self, PalmControl=None): if self.NameConv.get_from_name(self.GHS.palmJoint, "side") == "L": sideVariation = -1 else: sideVariation = 1 self.CreatePalmReferencePoints() if PalmControl == None: palmResetPoint, PalmControl = RMRigShapeControls.RMCircularControl( self.GHS.palmJoint) else: palmResetPoint = pm.group(empty=True, name="palmControl") self.NameConv.rename_based_on_base_name(self.GHS.palmJoint, palmResetPoint, name=palmResetPoint) RMRigTools.RMAlign(self.GHS.palmJoint, palmResetPoint, 3) self.PalmControl = PalmControl self.PalmResetPoint = palmResetPoint self.MainControl = palmResetPoint # palmResetPoint = self.NameConv.RMRenameSetFromName(palmResetPoint,"palmControls","Name") self.RMaddPalmControls(self.PalmControl) RMRigTools.RMLockAndHideAttributes(self.PalmControl, "0000000000") pinky = self.GHS.fingerJointsByName("pinky") if pinky: self.PalmFingerControlGrp[ "pinky"] = self.name_conv.RMCreateGroupOnObj(pinky[0]) RMRigTools.RMChangeRotateOrder(pinky, "yxz") RMRigTools.RMConnectWithLimits( "%s.Spread" % self.PalmControl, '%s.rotateZ' % self.PalmFingerControlGrp["pinky"], [[-10, sideVariation * 10], [0, 0], [10, sideVariation * -60]]) ring = self.GHS.fingerJointsByName("ring") if ring: self.PalmFingerControlGrp[ "ring"] = self.name_conv.RMCreateGroupOnObj(ring[0]) RMRigTools.RMChangeRotateOrder(ring, "yxz") RMRigTools.RMConnectWithLimits( "%s.Spread" % self.PalmControl, '%s.rotateZ' % self.PalmFingerControlGrp["ring"], [[-10, sideVariation * 5], [0, 0], [10, sideVariation * -30]]) middle = self.GHS.fingerJointsByName("middle") if middle: self.PalmFingerControlGrp[ "middle"] = self.name_conv.RMCreateGroupOnObj(middle[0]) RMRigTools.RMChangeRotateOrder(middle, "yxz") RMRigTools.RMConnectWithLimits( "%s.Spread" % self.PalmControl, '%s.rotateZ' % self.PalmFingerControlGrp["middle"], [[-10, 0], [0, 0], [10, sideVariation * -5]]) index = self.GHS.fingerJointsByName("index") if index: self.PalmFingerControlGrp[ "index"] = self.name_conv.RMCreateGroupOnObj(index[0]) RMRigTools.RMChangeRotateOrder(index, "yxz") RMRigTools.RMConnectWithLimits( "%s.Spread" % self.PalmControl, '%s.rotateZ' % self.PalmFingerControlGrp["index"], [[-10, sideVariation * -5], [0, 0], [10, sideVariation * 30]]) thumb = self.GHS.fingerJointsByName("thumb") if thumb: self.PalmFingerControlGrp[ "thumb"] = self.name_conv.RMCreateGroupOnObj(thumb[0]) RMRigTools.RMChangeRotateOrder(thumb, "yxz") RMRigTools.RMConnectWithLimits( "%s.Spread" % self.PalmControl, '%s.rotateZ' % self.PalmFingerControlGrp["thumb"], [[-10, sideVariation * -10], [0, 0], [10, sideVariation * 60]]) for eachFingerName in self.fingerRoot: if eachFingerName != 'thumb': RMRigTools.RMConnectWithLimits( "%s.PalmBend" % self.PalmControl, '%s.rotateY' % self.PalmFingerControlGrp[eachFingerName], [[-10, 90], [0, 0], [10, -90]]) RMRigTools.RMConnectWithLimits( "%s.Twist" % self.PalmControl, '%s.rotateX' % self.PalmReferencePoints[eachFingerName], [[-10, sideVariation * 45], [0, 0], [10, sideVariation * -45]]) RMRigTools.RMConnectWithLimits( "%s.PalmCup" % self.PalmControl, '%s.rotateX' % self.PalmReferencePoints["pinky"], [[0, 0], [10, sideVariation * 50]]) RMRigTools.RMConnectWithLimits( "%s.PalmCup" % self.PalmControl, '%s.rotateX' % self.PalmReferencePoints["ring"], [[0, 0], [10, sideVariation * 25]]) RMRigTools.RMConnectWithLimits( "%s.PalmCup" % self.PalmControl, '%s.rotateX' % self.PalmReferencePoints["middle"], [[0, 0], [10, sideVariation * 5]]) RMRigTools.RMConnectWithLimits( "%s.PalmCup" % self.PalmControl, '%s.rotateX' % self.PalmReferencePoints["index"], [[0, 0], [10, sideVariation * -30]]) RMRigTools.RMConnectWithLimits( "%s.PalmCup" % self.PalmControl, '%s.rotateX' % self.PalmReferencePoints["thumb"], [[0, 0], [10, sideVariation * -60]])
def StandardFeetIKRig(self, StandarFeetPointsDic, FeetControl=None): self.StandardFeetPointsDic = StandarFeetPointsDic Side = self.NameConv.get_from_name( self.StandardFeetPointsDic["feet"][0], "side") self.rootIKJoints, StandardFeetIKJoints = self.StandardReverseFeetJointStructure( StandarFeetPointsDic) self.NameConv.rename_set_from_name(StandardFeetIKJoints, "IK", "name", mode="add") FootIn = self.StandardFeetPointsDic["limitIn"] FootOut = self.StandardFeetPointsDic["limitOut"] FootBK = self.StandardFeetPointsDic["limitBack"] Length = RMRigTools.RMPointDistance( self.StandardFeetPointsDic["feet"][2], FootBK) Width = RMRigTools.RMPointDistance(FootIn, FootOut) BallGrp = pm.group(empty=True, name=self.NameConv.set_name_in_format(name="Ball", side=Side)) BallLift = pm.group(empty=True, name=self.NameConv.set_name_in_format( name="BallLift", side=Side)) TapGrp = pm.group(empty=True, name=self.NameConv.set_name_in_format(name="TapGrp", side=Side)) TipGrp = pm.group(empty=True, name=self.NameConv.set_name_in_format(name="TipGrp", side=Side)) SideInGrp = pm.group(empty=True, name=self.NameConv.set_name_in_format( name="SideInGrp", side=Side)) SideOutGrp = pm.group(empty=True, name=self.NameConv.set_name_in_format( name="SideOutGrp", side=Side)) FeetOrient = pm.group(empty=True, name=self.NameConv.set_name_in_format( name="FeetOrient", side=Side)) FeetPalmOrient = pm.group(empty=True, name=self.NameConv.set_name_in_format( name="FeetPalmOrient", side=Side)) RMRigTools.RMAlign(StandardFeetIKJoints[1], BallGrp, 3) RMRigTools.RMAlign(StandardFeetIKJoints[1], BallLift, 3) RMRigTools.RMAlign(StandardFeetIKJoints[1], TipGrp, 3) RMRigTools.RMAlign(StandardFeetIKJoints[2], TipGrp, 1) RMRigTools.RMAlign(StandardFeetIKJoints[1], TapGrp, 3) RMRigTools.RMAlign(FootIn, SideInGrp, 3) RMRigTools.RMAlign(FootOut, SideOutGrp, 3) RMRigTools.RMAlign(FootBK, TapGrp, 3) RMRigTools.RMAlign(BallGrp, FeetPalmOrient, 3) RMRigTools.RMAlign(StandardFeetIKJoints[0], FeetOrient, 3) pm.xform(FeetOrient, objectSpace=True, relative=True, t=[0, 0, Width]) pm.xform(FeetPalmOrient, objectSpace=True, relative=True, t=[0, 0, Width]) BallIK, BallIkEffector = pm.ikHandle( sj=StandardFeetIKJoints[0], ee=StandardFeetIKJoints[1], name="BallIK") # solver="ikRPsolver", TipIK, TipIkEffector = pm.ikHandle( sj=StandardFeetIKJoints[1], ee=StandardFeetIKJoints[2], name="TipIK") # solver="ikRPsolver", self.NameConv.rename_name_in_format(BallIK, side=Side) self.NameConv.rename_name_in_format(TipIK, side=Side) self.NameConv.rename_name_in_format(BallIkEffector, side=Side) self.NameConv.rename_name_in_format(TipIkEffector, side=Side) # pm.poleVectorConstraint (FeetOrient, BallIK) # pm.poleVectorConstraint (FeetPalmOrient, TipIK) pm.parent(BallIK, BallLift) pm.parent(TipIK, BallLift) pm.parent(BallLift, SideInGrp) pm.parent(BallGrp, SideInGrp) pm.parent(SideInGrp, SideOutGrp) pm.parent(SideOutGrp, TapGrp) pm.parent(TapGrp, TipGrp) pm.parent(FeetOrient, BallGrp) pm.parent(FeetPalmOrient, BallLift) TipData = self.rig_tools.RMCreateGroupOnObj(TipGrp) MainFeet = self.rig_tools.RMCreateGroupOnObj(TipData) self.NameConv.rename_set_from_name(MainFeet, "MainFeet", "name") if not FeetControl: fetControlReset, FeetControl = RMRigShapeControls.RMCreateBoxCtrl( StandarFeetPointsDic["feet"][0], customSize=Length, Yratio=.6, Zratio=.3, name="FeetControl") self.fetControlReset = fetControlReset # self.feetMainMoveIK = TipData pm.parentConstraint(FeetControl, TipData, mo=True) self.RMStandardRigAttributes(FeetControl) pm.makeIdentity(BallGrp, apply=True, t=1, r=1, s=1, n=0) pm.makeIdentity(BallLift, apply=True, t=1, r=1, s=1, n=0) pm.makeIdentity(TapGrp, apply=True, t=1, r=1, s=1, n=0) pm.makeIdentity(TipGrp, apply=True, t=1, r=1, s=1, n=0) pm.makeIdentity(SideInGrp, apply=True, t=1, r=1, s=1, n=0) pm.makeIdentity(SideOutGrp, apply=True, t=1, r=1, s=1, n=0) pm.makeIdentity(FeetOrient, apply=True, t=1, r=1, s=1, n=0) pm.makeIdentity(FeetPalmOrient, apply=True, t=1, r=1, s=1, n=0) # pm.parent (self.rootIKJoints, BallGrp) RMRigTools.RMConnectWithLimits("%s.ToeLift" % FeetControl, "%s.rotateZ" % BallLift, [[-10, -70], [0, 0], [10, 70]]) RMRigTools.RMConnectWithLimits("%s.BallPivot" % FeetControl, "%s.rotateZ" % BallGrp, [[-10, 70], [0, 0], [10, -70]]) RMRigTools.RMConnectWithLimits("%s.HeelPivot" % FeetControl, "%s.rotateZ" % TapGrp, [[-10, -70], [0, 0], [10, 70]]) RMRigTools.RMConnectWithLimits("%s.ToePivot" % FeetControl, "%s.rotateZ" % TipGrp, [[-10, 70], [0, 0], [10, -70]]) if (Side == "L"): RMRigTools.RMConnectWithLimits("%s.Tilt" % FeetControl, "%s.rotateX" % SideInGrp, [[-10, 70], [0, 0]]) RMRigTools.RMConnectWithLimits("%s.Tilt" % FeetControl, "%s.rotateX" % SideOutGrp, [[0, 0], [10, -70]]) RMRigTools.RMConnectWithLimits("%s.ToePivotSide" % FeetControl, "%s.rotateY" % TipGrp, [[-10, 70], [0, 0], [10, -70]]) # RMRigTools.RMConnectWithLimits( "%s.ToePivot" , TipGrp + ".rotateZ", [[-10,-70],[0,0],[10,70]]) else: RMRigTools.RMConnectWithLimits("%s.Tilt" % FeetControl, "%s.rotateX" % SideInGrp, [[-10, -70], [0, 0]]) RMRigTools.RMConnectWithLimits("%s.Tilt" % FeetControl, "%s.rotateX" % SideOutGrp, [[0, 0], [10, 70]]) RMRigTools.RMConnectWithLimits("%s.ToePivotSide" % FeetControl, "%s.rotateY" % TipGrp, [[-10, -70], [0, 0], [10, 70]]) # RMRigTools.RMCreateGroupOnObj( FeetControl) pm.scaleConstraint(FeetControl, MainFeet) self.MainFeetKinematics = MainFeet self.IKAttachPoint = BallGrp self.StandardFeetIKJoints = StandardFeetIKJoints