Exemple #1
0
    def connect_standardWithIkRef(self):
        self.parent.AddChild(self.root)

        cns = aop.poseCns(self.head_cns, self.fk_ctl[-1], True, True, True,
                          False)

        # Set the Head Reference
        if self.settings["headrefarray"]:
            ref_names = self.settings["headrefarray"].split(",")
            for i, ref_name in enumerate(ref_names):
                ref = self.rig.findChild(ref_name)
                cns = aop.poseCns(self.head_cns, ref, True, False, True, False)
                par.addExpression(cns.Parameters("active"),
                                  self.pHeadRef.FullName + " == " + str(i + 1))

        # Set the Ik Reference
        if self.settings["ikrefarray"]:
            ref_names = self.settings["ikrefarray"].split(",")
            if len(ref_names) == 1:
                ref = self.rig.findChild(ref_names[0])
                ref.AddChild(self.ik_cns)
            else:
                for i, ref_name in enumerate(ref_names):
                    ref = self.rig.findChild(ref_name)
                    cns = self.ik_cns.Kinematics.AddConstraint(
                        "Pose", ref, True)
                    par.addExpression(cns.Parameters("active"),
                                      self.pIkRef.FullName + " == " + str(i))
Exemple #2
0
    def addOperators(self):

        # Intermediate position ---------------------------
        for i, loc in enumerate(self.loc):

            u = (i+1.0) / (len(self.loc)+1.0)

            cnsA = aop.poseCns(loc, self.start_ctl, True, True, True, True)
            cnsB = aop.poseCns(loc, self.end_ctl, True, True, True, True)
            cnsB.Parameters("blendweight").Value = u

            cnsA.Parameters("affbyori").Value = False
            cnsA.Parameters("affbyscl").Value = False
            cnsB.Parameters("affbyori").Value = False
            cnsB.Parameters("affbyscl").Value = False
Exemple #3
0
    def addOperators(self):

        # Intermediate position ---------------------------
        for i, loc in enumerate(self.loc):

            u = (i + 1.0) / (len(self.loc) + 1.0)

            cnsA = aop.poseCns(loc, self.start_ctl, True, True, True, True)
            cnsB = aop.poseCns(loc, self.end_ctl, True, True, True, True)
            cnsB.Parameters("blendweight").Value = u

            cnsA.Parameters("affbyori").Value = False
            cnsA.Parameters("affbyscl").Value = False
            cnsB.Parameters("affbyori").Value = False
            cnsB.Parameters("affbyscl").Value = False
Exemple #4
0
    def connect_standardWithIkRef(self):
        self.parent.AddChild(self.root)

        cns = aop.poseCns(self.head_cns, self.fk_ctl[-1], True, True, True, False)
        
        # Set the Head Reference
        '''
        if self.settings["headrefarray"]:
            ref_names = self.settings["headrefarray"].split(",")
            for i, ref_name in enumerate(ref_names):
                ref = self.rig.findChild(ref_name)
                cns = self.head_cns.Kinematics.AddConstraint("Pose", ref, True)
                par.addExpression(cns.Parameters("active"), self.pHeadRef.FullName+" == "+str(i+1))
        '''

        # Set the Ik Reference
        if self.settings["ikrefarray"]:
            ref_names = self.settings["ikrefarray"].split(",")
            if len(ref_names) == 1:
                ref = self.rig.findChild(ref_names[0])
                ref.AddChild(self.ik_cns)
            else:
                for i, ref_name in enumerate(ref_names):
                    ref = self.rig.findChild(ref_name)
                    cns = self.ik_cns.Kinematics.AddConstraint("Pose", ref, True)
                    par.addExpression(cns.Parameters("active"), self.pIkRef.FullName+" == "+str(i))
Exemple #5
0
    def connect_standardWithIkRef(self):
        
        self.parent.AddChild(self.root)
        
        if self.settings["cornerARefArray"]:
            ref_names = self.settings["cornerARefArray"].split(",")
            for i, ref_name in enumerate(ref_names):
                ref = self.rig.findChild(ref_name)
                cns = aop.poseCns(self.cornerA, ref, True, True, True, False)
               
                par.addExpression(cns.Parameters("active"), self.pCornerARef.FullName+" == "+str(i+1))

        if self.settings["cornerBRefArray"]:
            ref_names = self.settings["cornerBRefArray"].split(",")
            for i, ref_name in enumerate(ref_names):
                ref = self.rig.findChild(ref_name)
                cns = aop.poseCns(self.cornerB, ref, True, True, True, False)
         
                par.addExpression(cns.Parameters("active"), self.pCornerBRef.FullName+" == "+str(i+1))
                    
Exemple #6
0
    def connect_standardWithIkRef(self):

        self.parent.AddChild(self.root)

        if self.settings["cornerARefArray"]:
            ref_names = self.settings["cornerARefArray"].split(",")
            for i, ref_name in enumerate(ref_names):
                ref = self.rig.findChild(ref_name)
                cns = aop.poseCns(self.cornerA, ref, True, True, True, False)

                par.addExpression(
                    cns.Parameters("active"),
                    self.pCornerARef.FullName + " == " + str(i + 1))

        if self.settings["cornerBRefArray"]:
            ref_names = self.settings["cornerBRefArray"].split(",")
            for i, ref_name in enumerate(ref_names):
                ref = self.rig.findChild(ref_name)
                cns = aop.poseCns(self.cornerB, ref, True, True, True, False)

                par.addExpression(
                    cns.Parameters("active"),
                    self.pCornerBRef.FullName + " == " + str(i + 1))
Exemple #7
0
    def addOperators(self):

        # Visibilities -------------------------------------
        par.addExpression(self.fk0_ctl.Properties("visibility").Parameters("viewvis"), "1 - "+self.pBlend.FullName)
        par.addExpression(self.fk1_ctl.Properties("visibility").Parameters("viewvis"), "1 - "+self.pBlend.FullName)
        par.addExpression(self.fk2_ctl.Properties("visibility").Parameters("viewvis"), "1 - "+self.pBlend.FullName)

        par.addExpression(self.upv_ctl.Properties("visibility").Parameters("viewvis"), self.pBlend.FullName)
        par.addExpression(self.ikcns_ctl.Properties("visibility").Parameters("viewvis"), self.pBlend.FullName +" * "+ self.pIkCns.FullName)
        par.addExpression(self.ik_ctl.Properties("visibility").Parameters("viewvis"), self.pBlend.FullName)

        # Leash --------------------------------------------
        aop.clsCtrOp(self.upv_ctl, self.mid_ctl, [0])

        # IK Solver-----------------------------------------
        out = [self.bone0, self.bone1, None, self.eff_loc]
        op = aop.sn_ikfk2bone_op(out, self.root, self.ik_ctl, self.upv_ctl, self.fk0_ctl, self.fk1_ctl, self.fk2_ctl, self.length0, self.length1, self.negate)

        par.addExpression(op.Parameters("blend"), self.pBlend.FullName)
        par.addExpression(op.Parameters("roll"), self.pIkRoll.FullName)
        par.addExpression(op.Parameters("scaleA"), self.pScale.FullName)
        par.addExpression(op.Parameters("scaleB"), self.pScale.FullName)
        par.addExpression(op.Parameters("maxstretch"), self.pMaxStretch.FullName)
        par.addExpression(op.Parameters("softness"), self.pSoftness.FullName)
        par.addExpression(op.Parameters("slide"), self.pSlide.FullName)
        par.addExpression(op.Parameters("reverse"), self.pReverse.FullName)

        # I'm not using the output of the solver to get the ctrn because it only has a +/-180 degree
        # With this simple expression I have a much better result
        # Also remove scaling from ctrn
        for s in "xyz":
            par.addExpression(self.ctrn_loc.Kinematics.Local.Parameters("rot"+s), self.bone1.Kinematics.Local.Parameters("rot"+s).FullName + " * .5")
            par.addExpression(self.ctrn_loc.Kinematics.Global.Parameters("scl"+s), self.root.Kinematics.Global.Parameters("scl"+s).FullName)

        # Membrane
        par.addExpression(self.memb_loc.Kinematics.Local.Parameters("posy"), self.pStartPos.FullName+" + ("+self.pEndPos.FullName+" - "+self.pStartPos.FullName+") * ( 1 - ( ctr_dist("+self.root.Kinematics.Global.FullName+","+self.eff_loc.Kinematics.Global.FullName+") / "+self.pRestDist.FullName+"))")

        # Twist references ---------------------------------
        self.pRestDist.Value = vec.getDistance2(self.root, self.eff_loc)
        par.addExpression(self.pDriver, "(ctr_dist(%s, %s) + ctr_dist(%s, %s)) / %s"
                                        %(self.tws0_loc.Kinematics.Global.FullName, self.tws1_loc.Kinematics.Global.FullName,
                                          self.tws1_loc.Kinematics.Global.FullName, self.tws2_loc.Kinematics.Global.FullName,
                                          self.root.Kinematics.Global.Parameters("sclx").FullName))

        self.tws0_loc.Kinematics.AddConstraint("Pose", self.root, True)
        aop.dirCns(self.tws0_loc, self.mid_ctl, None, False, self.n_sign+"xy")
        
        self.tws1_loc.Kinematics.AddConstraint("Position", self.mid_ctl)
        self.tws1_loc.Kinematics.AddConstraint("Scaling", self.mid_ctl)
        self.tws1_rot.Kinematics.AddConstraint("Orientation", self.mid_ctl)
        par.addExpression(self.tws1_rot.Parameters("rotx"), 0)
        par.addExpression(self.tws1_rot.Parameters("roty"), 0)
        par.addExpression(self.tws1_rot.Parameters("rotz"), 0)

        self.tws2_loc.Kinematics.AddConstraint("Position", self.eff_loc)
        self.tws2_loc.Kinematics.AddConstraint("Scaling", self.eff_loc)
        aop.poseCns(self.tws2_rot, self.eff_loc, False, False, True, False)
        par.addExpression(self.tws2_rot.Parameters("rotx"), 0)
        par.addExpression(self.tws2_rot.Parameters("roty"), 0)
        par.addExpression(self.tws2_rot.Parameters("rotz"), 0)
        par.setRotOrder(self.tws2_rot, "YZX")

        self.tws0_rot.SclX = .001
        par.addExpression(self.tws1_rot.SclX, self.pRoundness.FullName + " + .001")
        self.tws2_rot.SclX = .001

        # Divisions ----------------------------------------
        # at 0 or 1 the division will follow exactly the rotation of the controler.. and we wont have this nice tangent + roll
        for i, div_cns in enumerate(self.div_cns):

            if i < (self.settings["div0"]+1):
                perc = i*.5 / (self.settings["div0"]+1.0)
            else:
                perc = .5 + (i-self.settings["div0"]-1.0)*.5 / (self.settings["div1"]+1.0)

            perc = max(.001, min(.999, perc))

            # Roll
            if self.negate:
                op = aop.sn_rollsplinekine_op(div_cns, [self.tws2_rot, self.tws1_rot, self.tws0_rot], 1-perc)
            else:
                op = aop.sn_rollsplinekine_op(div_cns, [self.tws0_rot, self.tws1_rot, self.tws2_rot], perc)

            # Squash n Stretch
            op = aop.sn_squashstretch2_op(div_cns, self.root, self.pDriver.Value, "x")
            par.addExpression(op.Parameters("blend"), self.pVolume.FullName)
            par.addExpression(op.Parameters("driver"), self.pDriver.FullName)
            if self.options["mode"] == 1: # wip
                par.addExpression(op.Parameters("stretch"), self.pStretch[i])
                par.addExpression(op.Parameters("squash"), self.pSquash[i])
            else:
                op.Parameters("stretch").Value = self.st_value[i]
                op.Parameters("squash").Value = self.sq_value[i]
Exemple #8
0
    def addOperators(self):

        # Visibilities -------------------------------------
        par.addExpression(self.fk0_ctl.Properties("visibility").Parameters("viewvis"), "1 - "+self.pBlend.FullName)
        par.addExpression(self.fk1_ctl.Properties("visibility").Parameters("viewvis"), "1 - "+self.pBlend.FullName)
        par.addExpression(self.fk2_ctl.Properties("visibility").Parameters("viewvis"), "1 - "+self.pBlend.FullName)
        par.addExpression(self.fk3_ctl.Properties("visibility").Parameters("viewvis"), "1 - "+self.pBlend.FullName)

        par.addExpression(self.upv_ctl.Properties("visibility").Parameters("viewvis"), self.pBlend.FullName)
        par.addExpression(self.ikcns_ctl.Properties("visibility").Parameters("viewvis"), self.pBlend.FullName +" * "+ self.pIkCns.FullName)
        par.addExpression(self.ik_ctl.Properties("visibility").Parameters("viewvis"), self.pBlend.FullName)

        if self.settings["roll"] == 0:
            par.addExpression(self.roll_ctl.Properties("visibility").Parameters("viewvis"), self.pBlend.FullName)

        # Leash --------------------------------------------
        aop.clsCtrOp(self.upv_ctl, self.mid0_ctl, [0])

        # IK Solver-----------------------------------------
        self.roll_ctl.Kinematics.AddConstraint("Position", self.ik_ref, False)

        self.ref_chn.eff.Kinematics.AddConstraint("Pose", self.roll_ctl, True)
        self.end_chn.eff.Kinematics.AddConstraint("Pose", self.roll_ctl, True)

        op = xsi.ApplyOp("SkeletonUpVector", self.ref_chn.bones[0].FullName+";"+self.upv_ctl.FullName)[0]
        par.addExpression(self.ref_chn.roll, self.pIkRoll.FullName + " + 180")
        op = xsi.ApplyOp("SkeletonUpVector", self.end_chn.bones[0].FullName+";"+self.upv_ctl.FullName)[0]
        par.addExpression(self.end_chn.roll, self.pIkRoll.FullName + " + 180")

        # ctrn
        for s in "xyz":
            par.addExpression(self.ctrn0_loc.Kinematics.Local.Parameters("rot" + s), self.ref_loc[1].Kinematics.Local.Parameters("rot" + s).FullName + " * .5")
            par.addExpression(self.ctrn0_loc.Kinematics.Global.Parameters("scl" + s), self.root.Kinematics.Global.Parameters("scl" + s).FullName)
            par.addExpression(self.ctrn1_loc.Kinematics.Local.Parameters("rot" + s), self.ref_loc[2].Kinematics.Local.Parameters("rot" + s).FullName + " * .5")
            par.addExpression(self.ctrn1_loc.Kinematics.Global.Parameters("scl" + s), self.root.Kinematics.Global.Parameters("scl" + s).FullName)

        self.ctrn0_loc.Kinematics.AddConstraint("Position", self.ref_loc[1], False)
        self.ctrn1_loc.Kinematics.AddConstraint("Position", self.ref_loc[2], False)

        # References Nulls ---------------------------------
        fk_ref = [self.fk0_ctl, self.fk1_ctl, self.fk2_ctl, self.fk_ref]
        ik_ref = [self.ref_chn.bones[0], self.ref_chn.bones[1], self.end_chn.bones[0], self.ik_ref]
        for i, ref_loc in enumerate(self.ref_loc):

            # fk
            cns = ref_loc.Kinematics.AddConstraint("Orientation", fk_ref[i], False)
            if i != len(self.ref_loc)-1:
                cns = aop.dirCns(ref_loc, fk_ref[i+1], None, False, self.n_sign+"xz")
                par.addExpression(cns.Parameters("blendweight"), "1 - " + self.pBlend.FullName)

            #ik
            cns = ref_loc.Kinematics.AddConstraint("Orientation", ik_ref[i], False)
            par.addExpression(cns.Parameters("blendweight"), self.pBlend.FullName)

            for s in "xyz":
                par.addExpression(ref_loc.Kinematics.Local.Parameters("rot"+s), 0)

        par.addExpression(self.ref_loc[1].Kinematics.Local.Parameters("posx"), self.n_sign+" (ctr_dist(%s.kine.global, %s.kine.global) * (1 - %s) + ctr_dist(%s.kine.global, %s.kine.global) * %s)"%(self.fk0_ctl.FullName, self.fk1_ctl.FullName, self.pBlend.FullName, self.ref_chn.bones[0].FullName, self.ref_chn.bones[1].FullName, self.pBlend.FullName))
        par.addExpression(self.ref_loc[2].Kinematics.Local.Parameters("posx"), self.n_sign+" (ctr_dist(%s.kine.global, %s.kine.global) * (1 - %s) + ctr_dist(%s.kine.global, %s.kine.global) * %s)"%(self.fk1_ctl.FullName, self.fk2_ctl.FullName, self.pBlend.FullName, self.ref_chn.bones[1].FullName, self.end_chn.bones[0], self.pBlend.FullName))
        par.addExpression(self.ref_loc[3].Kinematics.Local.Parameters("posx"), self.n_sign+" (ctr_dist(%s.kine.global, %s.kine.global) * (1 - %s) + ctr_dist(%s.kine.global, %s.kine.global) * %s)"%(self.fk2_ctl.FullName, self.fk3_ctl.FullName, self.pBlend.FullName, self.end_chn.bones[0].FullName, self.end_chn.eff, self.pBlend.FullName))

        # Twist references ---------------------------------
        par.addExpression(self.pDriver, "(ctr_dist(%s, %s) + ctr_dist(%s, %s) + ctr_dist(%s, %s)) / %s"
                                        %(self.tws0_loc.Kinematics.Global.FullName, self.tws1_loc.Kinematics.Global.FullName,
                                          self.tws1_loc.Kinematics.Global.FullName, self.tws2_loc.Kinematics.Global.FullName,
                                          self.tws2_loc.Kinematics.Global.FullName, self.tws3_loc.Kinematics.Global.FullName,
                                          self.root.Kinematics.Global.Parameters("sclx").FullName))

        self.tws1_loc.Kinematics.AddConstraint("Position", self.mid0_ctl)
        self.tws1_loc.Kinematics.AddConstraint("Scaling", self.mid0_ctl)
        self.tws1_rot.Kinematics.AddConstraint("Orientation", self.mid0_ctl)
        par.addExpression(self.tws1_rot.Parameters("rotx"), 0)
        par.addExpression(self.tws1_rot.Parameters("roty"), 0)
        par.addExpression(self.tws1_rot.Parameters("rotz"), 0)

        self.tws2_loc.Kinematics.AddConstraint("Position", self.mid1_ctl)
        self.tws2_loc.Kinematics.AddConstraint("Scaling", self.mid1_ctl)
        self.tws2_rot.Kinematics.AddConstraint("Orientation", self.mid1_ctl)
        par.addExpression(self.tws2_rot.Parameters("rotx"), 0)
        par.addExpression(self.tws2_rot.Parameters("roty"), 0)
        par.addExpression(self.tws2_rot.Parameters("rotz"), 0)

        self.tws3_loc.Kinematics.AddConstraint("Position", self.ref_loc[-1])
        #self.tws3_loc.Kinematics.AddConstraint("Scaling", self.eff_loc)
        aop.poseCns(self.tws3_rot, self.fk_ref, True, False, True, False)
        cns = aop.poseCns(self.tws3_rot, self.ik_ref, True, False, True, False)
        par.addExpression(cns.Parameters("blendweight"), self.pBlend.FullName)
        par.addExpression(self.tws3_rot.Parameters("rotx"), self.ik_ctl.Parameters("rotx").FullName + " * (1 - "+self.pBlend.FullName+") + " + self.fk3_ctl.Parameters("rotx").FullName + " * " + self.pBlend.FullName)
        par.addExpression(self.tws3_rot.Parameters("roty"), 0)
        par.addExpression(self.tws3_rot.Parameters("rotz"), 0)

        self.tws0_rot.SclX = .001
        par.addExpression(self.tws1_rot.SclX, self.pRoundness.FullName + " + .001")
        par.addExpression(self.tws2_rot.SclX, self.pRoundness.FullName + " + .001")
        self.tws3_rot.SclX = .001

        # Divisions ----------------------------------------
        # at 0 or 1 the division will follow exactly the rotation of the controler.. and we wont have this nice tangent + roll
        for i, div_cns in enumerate(self.div_cns):

            if i < (self.settings["div0"]+1):
                perc = i / ((self.settings["div0"]+1.0)*3)
            elif i < (self.settings["div0"]+self.settings["div1"]+2):
                perc = (1/3.0) + ((i-self.settings["div0"]-1.0) / ((self.settings["div1"]+1.0)*3))
            else:
                perc = (2/3.0) + ((i-self.settings["div0"]-self.settings["div1"]-2.0) / ((self.settings["div2"]+1.0)*3))

            perc = max(.001, min(.999, perc))

            if self.negate:
                op = aop.sn_rollsplinekine_op(div_cns, [self.tws3_rot, self.tws2_rot, self.tws1_rot, self.tws0_rot], 1-perc)
            else:
                op = aop.sn_rollsplinekine_op(div_cns, [self.tws0_rot, self.tws1_rot, self.tws2_rot, self.tws3_rot], perc)

            # Squash n Stretch
            op = aop.sn_squashstretch2_op(div_cns, self.root, self.pDriver.Value, "x")
            par.addExpression(op.Parameters("blend"), self.pVolume.FullName)
            par.addExpression(op.Parameters("driver"), self.pDriver.FullName)
            if self.options["mode"] == 1: # wip
                par.addExpression(op.Parameters("stretch"), self.pStretch[i])
                par.addExpression(op.Parameters("squash"), self.pSquash[i])
            else:
                op.Parameters("stretch").Value = self.st_value[i]
                op.Parameters("squash").Value = self.sq_value[i]
Exemple #9
0
    def addOperators(self):

        # Visibilities -------------------------------------
        par.addExpression(
            self.fk0_ctl.Properties("visibility").Parameters("viewvis"),
            "1 - " + self.pBlend.FullName)
        par.addExpression(
            self.fk1_ctl.Properties("visibility").Parameters("viewvis"),
            "1 - " + self.pBlend.FullName)
        par.addExpression(
            self.fk2_ctl.Properties("visibility").Parameters("viewvis"),
            "1 - " + self.pBlend.FullName)
        par.addExpression(
            self.fk3_ctl.Properties("visibility").Parameters("viewvis"),
            "1 - " + self.pBlend.FullName)

        par.addExpression(
            self.upv_ctl.Properties("visibility").Parameters("viewvis"),
            self.pBlend.FullName)
        par.addExpression(
            self.ikcns_ctl.Properties("visibility").Parameters("viewvis"),
            self.pBlend.FullName + " * " + self.pIkCns.FullName)
        par.addExpression(
            self.ik_ctl.Properties("visibility").Parameters("viewvis"),
            self.pBlend.FullName)

        if self.settings["roll"] == 0:
            par.addExpression(
                self.roll_ctl.Properties("visibility").Parameters("viewvis"),
                self.pBlend.FullName)

        # Leash --------------------------------------------
        aop.clsCtrOp(self.upv_ctl, self.mid0_ctl, [0])

        # IK Solver-----------------------------------------
        if self.settings["roll"] == 0:
            self.ref_chn.eff.Kinematics.AddConstraint("Pose", self.roll_ctl,
                                                      True)
            self.end_chn.eff.Kinematics.AddConstraint("Pose", self.roll_ctl,
                                                      True)
        else:
            self.ref_chn.eff.Kinematics.AddConstraint("Pose", self.ik_ref,
                                                      True)
            self.end_chn.eff.Kinematics.AddConstraint("Pose", self.ik_ref,
                                                      True)

        op = xsi.ApplyOp(
            "SkeletonUpVector",
            self.ref_chn.bones[0].FullName + ";" + self.upv_ctl.FullName)[0]
        par.addExpression(self.ref_chn.roll, self.pIkRoll.FullName + " + 180")
        op = xsi.ApplyOp(
            "SkeletonUpVector",
            self.end_chn.bones[0].FullName + ";" + self.upv_ctl.FullName)[0]
        par.addExpression(self.end_chn.roll, self.pIkRoll.FullName + " + 180")

        # Roll
        #        cns = self.dir_ref.Kinematics.AddConstraint("Orientation", self.ik_ref, True)
        #        cns = aop.dirCns(self.dir_ref, self.root, None, False, "yz")
        #
        #        restLength = vec.getDistance(self.guide.apos[0], self.guide.apos[3])
        #        maxLength = self.ref_chn.length + self.end_chn.length
        #        par.addExpression(cns.Parameters("blendweight"), "MIN(1, MAX(0, (ctr_dist("+self.root.FullName+".kine.global, "+self.ik_ref.FullName+".kine.global) - "+str(restLength)+") / " \
        #                                                        +"("+str(maxLength - restLength)+")))")

        # ctrn
        for s in "xyz":
            par.addExpression(
                self.ctrn0_loc.Kinematics.Local.Parameters("rot" + s),
                self.ref_loc[1].Kinematics.Local.Parameters("rot" + s).FullName
                + " * .5")
            par.addExpression(
                self.ctrn0_loc.Kinematics.Global.Parameters("scl" + s),
                self.root.Kinematics.Global.Parameters("scl" + s).FullName)
            par.addExpression(
                self.ctrn1_loc.Kinematics.Local.Parameters("rot" + s),
                self.ref_loc[2].Kinematics.Local.Parameters("rot" + s).FullName
                + " * .5")
            par.addExpression(
                self.ctrn1_loc.Kinematics.Global.Parameters("scl" + s),
                self.root.Kinematics.Global.Parameters("scl" + s).FullName)

        self.ctrn0_loc.Kinematics.AddConstraint("Position", self.ref_loc[1],
                                                False)
        self.ctrn1_loc.Kinematics.AddConstraint("Position", self.ref_loc[2],
                                                False)

        # References Nulls ---------------------------------
        fk_ref = [
            self.fk0_ctl, self.fk1_ctl, self.fk2_ctl, self.fk3_ctl, self.fk_ref
        ]
        ik_ref = [
            self.ref_chn.bones[0], self.ref_chn.bones[1],
            self.end_chn.bones[0], self.ik_ref
        ]
        for i, ref_loc in enumerate(self.ref_loc):

            # fk
            cns = ref_loc.Kinematics.AddConstraint("Orientation", fk_ref[i],
                                                   False)
            if i != len(self.ref_loc) - 1:
                cns = aop.dirCns(ref_loc, fk_ref[i + 1], None, False,
                                 self.n_sign + "xz")
                par.addExpression(cns.Parameters("blendweight"),
                                  "1 - " + self.pBlend.FullName)

            #ik
            cns = ref_loc.Kinematics.AddConstraint("Orientation", ik_ref[i],
                                                   False)
            par.addExpression(cns.Parameters("blendweight"),
                              self.pBlend.FullName)

            for s in "xyz":
                par.addExpression(
                    ref_loc.Kinematics.Local.Parameters("rot" + s), 0)

        par.addExpression(
            self.ref_loc[1].Kinematics.Local.Parameters("posx"), self.n_sign +
            " (ctr_dist(%s.kine.global, %s.kine.global) * (1 - %s) + ctr_dist(%s.kine.global, %s.kine.global) * %s)"
            % (self.fk0_ctl.FullName, self.fk1_ctl.FullName,
               self.pBlend.FullName, self.ref_chn.bones[0].FullName,
               self.ref_chn.bones[1].FullName, self.pBlend.FullName))
        par.addExpression(
            self.ref_loc[2].Kinematics.Local.Parameters("posx"), self.n_sign +
            " (ctr_dist(%s.kine.global, %s.kine.global) * (1 - %s) + ctr_dist(%s.kine.global, %s.kine.global) * %s)"
            % (self.fk1_ctl.FullName, self.fk2_ctl.FullName,
               self.pBlend.FullName, self.ref_chn.bones[1].FullName,
               self.end_chn.bones[0], self.pBlend.FullName))
        par.addExpression(
            self.ref_loc[3].Kinematics.Local.Parameters("posx"), self.n_sign +
            " (ctr_dist(%s.kine.global, %s.kine.global) * (1 - %s) + ctr_dist(%s.kine.global, %s.kine.global) * %s)"
            % (self.fk2_ctl.FullName, self.fk3_ctl.FullName,
               self.pBlend.FullName, self.end_chn.bones[0].FullName,
               self.end_chn.eff, self.pBlend.FullName))

        # Twist references ---------------------------------
        par.addExpression(
            self.pDriver,
            "ctr_dist(%s, %s) + ctr_dist(%s, %s) + ctr_dist(%s, %s)" %
            (self.tws0_loc.Kinematics.Global.FullName,
             self.tws1_loc.Kinematics.Global.FullName,
             self.tws1_loc.Kinematics.Global.FullName,
             self.tws2_loc.Kinematics.Global.FullName,
             self.tws2_loc.Kinematics.Global.FullName,
             self.tws3_loc.Kinematics.Global.FullName))

        self.tws1_loc.Kinematics.AddConstraint("Position", self.mid0_ctl)
        self.tws1_loc.Kinematics.AddConstraint("Scaling", self.mid0_ctl)
        self.tws1_rot.Kinematics.AddConstraint("Orientation", self.mid0_ctl)
        par.addExpression(self.tws1_rot.Parameters("rotx"), 0)
        par.addExpression(self.tws1_rot.Parameters("roty"), 0)
        par.addExpression(self.tws1_rot.Parameters("rotz"), 0)

        self.tws2_loc.Kinematics.AddConstraint("Position", self.mid1_ctl)
        self.tws2_loc.Kinematics.AddConstraint("Scaling", self.mid1_ctl)
        self.tws2_rot.Kinematics.AddConstraint("Orientation", self.mid1_ctl)
        par.addExpression(self.tws2_rot.Parameters("rotx"), 0)
        par.addExpression(self.tws2_rot.Parameters("roty"), 0)
        par.addExpression(self.tws2_rot.Parameters("rotz"), 0)

        self.tws3_loc.Kinematics.AddConstraint("Position", self.ref_loc[-1])
        #self.tws3_loc.Kinematics.AddConstraint("Scaling", self.eff_loc)
        aop.poseCns(self.tws3_rot, self.fk_ref, True, False, True, False)
        cns = aop.poseCns(self.tws3_rot, self.ik_ref, True, False, True, False)
        par.addExpression(cns.Parameters("blendweight"), self.pBlend.FullName)
        par.addExpression(
            self.tws3_rot.Parameters("rotx"),
            self.ik_ctl.Parameters("rotx").FullName + " * (1 - " +
            self.pBlend.FullName + ") + " +
            self.fk3_ctl.Parameters("rotx").FullName + " * " +
            self.pBlend.FullName)
        par.addExpression(self.tws3_rot.Parameters("roty"), 0)
        par.addExpression(self.tws3_rot.Parameters("rotz"), 0)

        self.tws0_rot.SclX = .001
        par.addExpression(self.tws1_rot.SclX,
                          self.pRoundness.FullName + " + .001")
        par.addExpression(self.tws2_rot.SclX,
                          self.pRoundness.FullName + " + .001")
        self.tws3_rot.SclX = .001

        # Divisions ----------------------------------------
        # at 0 or 1 the division will follow exactly the rotation of the controler.. and we wont have this nice tangent + roll
        step = 1.0 / (self.divisions - 1.0)
        for i, div_cns in enumerate(self.div_cns):

            perc = max(.001, min(.999, i * step))

            if self.negate:
                op = aop.sn_rollsplinekine_op(div_cns, [
                    self.tws3_rot, self.tws2_rot, self.tws1_rot, self.tws0_rot
                ], 1 - perc)
            else:
                op = aop.sn_rollsplinekine_op(div_cns, [
                    self.tws0_rot, self.tws1_rot, self.tws2_rot, self.tws3_rot
                ], perc)

            # Squash n Stretch
            op = aop.sn_squashstretch2_op(div_cns, self.root,
                                          self.pDriver.Value, "x")
            par.addExpression(op.Parameters("blend"), self.pVolume.FullName)
            par.addExpression(op.Parameters("driver"), self.pDriver.FullName)
            if self.options["mode"] == 1:  # wip
                par.addExpression(op.Parameters("stretch"), self.pStretch[i])
                par.addExpression(op.Parameters("squash"), self.pSquash[i])
            else:
                op.Parameters("stretch").Value = self.st_value[i]
                op.Parameters("squash").Value = self.sq_value[i]
Exemple #10
0
    def addOperators(self):

        # Visibilities -------------------------------------
        par.addExpression(self.fk0_ctl.Properties("visibility").Parameters("viewvis"), "1 - "+self.pBlend.FullName)
        par.addExpression(self.fk1_ctl.Properties("visibility").Parameters("viewvis"), "1 - "+self.pBlend.FullName)
        par.addExpression(self.fk2_ctl.Properties("visibility").Parameters("viewvis"), "1 - "+self.pBlend.FullName)

        par.addExpression(self.upv_ctl.Properties("visibility").Parameters("viewvis"), self.pBlend.FullName)
        par.addExpression(self.leash_crv.Properties("visibility").Parameters("viewvis"), self.pBlend.FullName)
        par.addExpression(self.ikcns_ctl.Properties("visibility").Parameters("viewvis"), self.pBlend.FullName +" * "+ self.pIkCns.FullName)
        par.addExpression(self.ik_ctl.Properties("visibility").Parameters("viewvis"), self.pBlend.FullName)

        # Twist --------------------------------------------
        for i, div_loc in enumerate(self.div0_loc):

            if i == 0:
                cns = aop.gear_dualUpVDirCns(div_loc, self.chain.root, self.chain.bones[1])
                # cns = aop.dirCns(div_loc, self.chain.bones[1], None, False, "xy")
                # aop.gear_pointAtObjectAxis(cns, self.chain.root, [0,1,0])
            elif i == self.settings["division0"]-1:
                continue
            else:
                d = i/(self.settings["division0"]-1.0)

                cns = aop.dirCns(div_loc, self.chain.bones[1], None, False, "xy")
                op = aop.spinePointAtOp(cns, self.div0_loc[0], self.chain.bones[0], d)

        for i, div_loc in enumerate(self.div_loc):
            d = i/(self.settings["division1"]-1.0)
            par.addExpression(div_loc.Parameters("rotx"), self.end_ref.Parameters("rotx").FullName+" * "+str(d))

        # IK Solver-----------------------------------------
        # cns
        self.chain.eff.Kinematics.AddConstraint("Position", self.ik_ref, False)
        aop.chainUpvOp(self.chain, self.upv_ctl)

        for bone, fk_ctl, length, div in zip(self.chain.bones, [self.fk0_ctl, self.fk1_ctl], [self.length0, self.length1], self.div_loc):
        # for bone, fk in zip(self.chain.bones, [self.fk0_ctl, self.fk1_ctl]):
            # ik/fk orientation
            cns = bone.Kinematics.AddConstraint("Orientation", fk_ctl, False)
            par.addExpression(cns.Parameters("blendweight"), "1 - "+self.pBlend.FullName)

            # stretch
            fk_st = fk_ctl.Parameters("sclx").FullName + " * (1 - "+self.pBlend.FullName+")"
            root_eff_dist = "ctr_dist(%s.kine.global, %s.kine.global)"%(self.root.FullName, self.ik_ctl.FullName)
            ik_st = "cond("+root_eff_dist+" > "+str(self.chain.length)+", "+root_eff_dist+" / "+str(self.chain.length)+", 1) * "+self.pBlend.FullName

            parent_scl = bone.Parent3DObject.Parameters("sclx").FullName
            par.addExpression(bone.Parameters("sclx"), "("+fk_st+" + "+ik_st+")/"+parent_scl)

            # par.addExpression(div.Parameters("sclx"), bone.Parameters("length").FullName+"/"+str(length))

        # blend / roll
        par.addExpression(self.chain.blend, self.pBlend)
        par.addExpression(self.chain.roll, self.pIkRoll)

        # ctr_loc
        self.ctrn_loc.Kinematics.AddConstraint("Position", self.chain.bones[1], False)
        for s in "xyz":
            par.addExpression(self.ctrn_loc.Kinematics.Local.Parameters("rot"+s), self.chain.bones[1].Kinematics.Local.Parameters("rot" + s).FullName + " * .5")

        # Stretch -----------------------------------------
        # root_eff = "ctr_dist(%s.kine.global, %s.kine.global)"%(self.chain.root, self.ik_ref)
        # st_value = "(%s/%s)"%(root_eff,self.chain.length)
        # for bone in self.chain.bones:
            # par.addExpression(bone.Parameters("length"),
                              # "cond(%s>%s,%s*%s,%s)*%s + %s*(1 - %s)"%(root_eff,
                                                                     # self.chain.length,
                                                                     # bone.Parameters("length").Value,
                                                                     # st_value, bone.Parameters("length").Value,
                                                                     # self.pBlend.FullName,
                                                                     # bone.Parameters("length").Value,
                                                                     # self.pBlend.FullName))

        # Hook
        self.end_ref.Kinematics.AddConstraint("Position", self.chain.eff)
        self.end_ref.Kinematics.AddConstraint("Scaling", self.chain.eff)
        aop.poseCns(self.end_ref, self.fk2_ctl, True, False, True, False)
        cns = aop.poseCns(self.end_ref, self.ik_ref, True, False, True, False)
        par.addExpression(cns.Parameters("blendweight"), self.pBlend.fullName)
        par.addExpression(self.end_ref.Parameters("rotx"), 0)
        par.addExpression(self.end_ref.Parameters("roty"), 0)
        par.addExpression(self.end_ref.Parameters("rotz"), 0)
        par.setRotOrder(self.end_ref, "YZX")

        # Shape Reference ---------------------------------
        # shoulder
        aop.gear_rotationToPose(self.end_ref, self.chain.bones[1], self.ankle_outputs, "x", 0)
Exemple #11
0
    def addOperators(self):

        # Visibilities -------------------------------------
        par.addExpression(
            self.fk0_ctl.Properties("visibility").Parameters("viewvis"),
            "1 - " + self.pBlend.FullName)
        par.addExpression(
            self.fk1_ctl.Properties("visibility").Parameters("viewvis"),
            "1 - " + self.pBlend.FullName)
        par.addExpression(
            self.fk2_ctl.Properties("visibility").Parameters("viewvis"),
            "1 - " + self.pBlend.FullName)
        par.addExpression(
            self.fk3_ctl.Properties("visibility").Parameters("viewvis"),
            "1 - " + self.pBlend.FullName)

        par.addExpression(
            self.upv_ctl.Properties("visibility").Parameters("viewvis"),
            self.pBlend.FullName)
        par.addExpression(
            self.ikcns_ctl.Properties("visibility").Parameters("viewvis"),
            self.pBlend.FullName + " * " + self.pIkCns.FullName)
        par.addExpression(
            self.ik_ctl.Properties("visibility").Parameters("viewvis"),
            self.pBlend.FullName)

        if self.settings["roll"] == 0:
            par.addExpression(
                self.roll_ctl.Properties("visibility").Parameters("viewvis"),
                self.pBlend.FullName)

        # Leash --------------------------------------------
        aop.clsCtrOp(self.upv_ctl, self.mid0_ctl, [0])

        # IK Solver-----------------------------------------
        self.roll_ctl.Kinematics.AddConstraint("Position", self.ik_ref, False)

        self.ref_chn.eff.Kinematics.AddConstraint("Pose", self.roll_ctl, True)
        self.end_chn.eff.Kinematics.AddConstraint("Pose", self.roll_ctl, True)

        op = xsi.ApplyOp(
            "SkeletonUpVector",
            self.ref_chn.bones[0].FullName + ";" + self.upv_ctl.FullName)[0]
        par.addExpression(self.ref_chn.roll, self.pIkRoll.FullName + " + 180")
        op = xsi.ApplyOp(
            "SkeletonUpVector",
            self.end_chn.bones[0].FullName + ";" + self.upv_ctl.FullName)[0]
        par.addExpression(self.end_chn.roll, self.pIkRoll.FullName + " + 180")

        # ctrn
        for s in "xyz":
            par.addExpression(
                self.ctrn0_loc.Kinematics.Local.Parameters("rot" + s),
                self.ref_loc[1].Kinematics.Local.Parameters("rot" + s).FullName
                + " * .5")
            par.addExpression(
                self.ctrn0_loc.Kinematics.Global.Parameters("scl" + s),
                self.root.Kinematics.Global.Parameters("scl" + s).FullName)
            par.addExpression(
                self.ctrn1_loc.Kinematics.Local.Parameters("rot" + s),
                self.ref_loc[2].Kinematics.Local.Parameters("rot" + s).FullName
                + " * .5")
            par.addExpression(
                self.ctrn1_loc.Kinematics.Global.Parameters("scl" + s),
                self.root.Kinematics.Global.Parameters("scl" + s).FullName)

        self.ctrn0_loc.Kinematics.AddConstraint("Position", self.ref_loc[1],
                                                False)
        self.ctrn1_loc.Kinematics.AddConstraint("Position", self.ref_loc[2],
                                                False)

        # References Nulls ---------------------------------
        fk_ref = [self.fk0_ctl, self.fk1_ctl, self.fk2_ctl, self.fk_ref]
        ik_ref = [
            self.ref_chn.bones[0], self.ref_chn.bones[1],
            self.end_chn.bones[0], self.ik_ref
        ]
        for i, ref_loc in enumerate(self.ref_loc):

            # fk
            cns = ref_loc.Kinematics.AddConstraint("Orientation", fk_ref[i],
                                                   False)
            if i != len(self.ref_loc) - 1:
                cns = aop.dirCns(ref_loc, fk_ref[i + 1], None, False,
                                 self.n_sign + "xz")
                par.addExpression(cns.Parameters("blendweight"),
                                  "1 - " + self.pBlend.FullName)

            #ik
            cns = ref_loc.Kinematics.AddConstraint("Orientation", ik_ref[i],
                                                   False)
            par.addExpression(cns.Parameters("blendweight"),
                              self.pBlend.FullName)

            for s in "xyz":
                par.addExpression(
                    ref_loc.Kinematics.Local.Parameters("rot" + s), 0)

        par.addExpression(
            self.ref_loc[1].Kinematics.Local.Parameters("posx"), self.n_sign +
            " (ctr_dist(%s.kine.global, %s.kine.global) * (1 - %s) + ctr_dist(%s.kine.global, %s.kine.global) * %s)"
            % (self.fk0_ctl.FullName, self.fk1_ctl.FullName,
               self.pBlend.FullName, self.ref_chn.bones[0].FullName,
               self.ref_chn.bones[1].FullName, self.pBlend.FullName))
        par.addExpression(
            self.ref_loc[2].Kinematics.Local.Parameters("posx"), self.n_sign +
            " (ctr_dist(%s.kine.global, %s.kine.global) * (1 - %s) + ctr_dist(%s.kine.global, %s.kine.global) * %s)"
            % (self.fk1_ctl.FullName, self.fk2_ctl.FullName,
               self.pBlend.FullName, self.ref_chn.bones[1].FullName,
               self.end_chn.bones[0], self.pBlend.FullName))
        par.addExpression(
            self.ref_loc[3].Kinematics.Local.Parameters("posx"), self.n_sign +
            " (ctr_dist(%s.kine.global, %s.kine.global) * (1 - %s) + ctr_dist(%s.kine.global, %s.kine.global) * %s)"
            % (self.fk2_ctl.FullName, self.fk3_ctl.FullName,
               self.pBlend.FullName, self.end_chn.bones[0].FullName,
               self.end_chn.eff, self.pBlend.FullName))

        # Global Scale
        for s in "xyz":
            par.addExpression(
                self.ref_loc[0].Kinematics.Global.Parameters("scl%s" % s), 1)
            par.addExpression(
                self.end_ref.Kinematics.Global.Parameters("scl%s" % s),
                self.root.Kinematics.Global.Parameters("scl%s" % s))

        # Twist references ---------------------------------
        par.addExpression(
            self.pDriver,
            "(ctr_dist(%s, %s) + ctr_dist(%s, %s) + ctr_dist(%s, %s)) / %s" %
            (self.tws0_loc.Kinematics.Global.FullName,
             self.tws1_loc.Kinematics.Global.FullName,
             self.tws1_loc.Kinematics.Global.FullName,
             self.tws2_loc.Kinematics.Global.FullName,
             self.tws2_loc.Kinematics.Global.FullName,
             self.tws3_loc.Kinematics.Global.FullName,
             self.root.Kinematics.Global.Parameters("sclx").FullName))

        self.tws0_loc.Kinematics.AddConstraint("Pose", self.root, True)
        aop.dirCns(self.tws0_loc, self.mid0_ctl, None, False,
                   self.n_sign + "xy")

        self.tws1_loc.Kinematics.AddConstraint("Position", self.mid0_ctl)
        self.tws1_loc.Kinematics.AddConstraint("Scaling", self.mid0_ctl)
        self.tws1_rot.Kinematics.AddConstraint("Orientation", self.mid0_ctl)
        par.addExpression(self.tws1_rot.Parameters("rotx"), 0)
        par.addExpression(self.tws1_rot.Parameters("roty"), 0)
        par.addExpression(self.tws1_rot.Parameters("rotz"), 0)

        self.tws2_loc.Kinematics.AddConstraint("Position", self.mid1_ctl)
        self.tws2_loc.Kinematics.AddConstraint("Scaling", self.mid1_ctl)
        self.tws2_rot.Kinematics.AddConstraint("Orientation", self.mid1_ctl)
        par.addExpression(self.tws2_rot.Parameters("rotx"), 0)
        par.addExpression(self.tws2_rot.Parameters("roty"), 0)
        par.addExpression(self.tws2_rot.Parameters("rotz"), 0)

        self.tws3_loc.Kinematics.AddConstraint("Position", self.ref_loc[-1])
        #self.tws3_loc.Kinematics.AddConstraint("Scaling", self.eff_loc)
        aop.poseCns(self.tws3_rot, self.fk_ref, False, False, True, False)
        cns = aop.poseCns(self.tws3_rot, self.ik_ref, True, False, True, False)
        par.addExpression(cns.Parameters("blendweight"), self.pBlend.FullName)
        par.addExpression(self.tws3_rot.Parameters("rotx"), 0)
        par.addExpression(self.tws3_rot.Parameters("roty"), 0)
        par.addExpression(self.tws3_rot.Parameters("rotz"), 0)
        par.setRotOrder(self.tws3_rot, "YZX")

        self.tws0_rot.SclX = .001
        par.addExpression(self.tws1_rot.SclX,
                          self.pRoundness.FullName + " + .001")
        par.addExpression(self.tws2_rot.SclX,
                          self.pRoundness.FullName + " + .001")
        self.tws3_rot.SclX = .001

        # Divisions ----------------------------------------
        # at 0 or 1 the division will follow exactly the rotation of the controler.. and we wont have this nice tangent + roll
        for i, div_cns in enumerate(self.div_cns):

            if i < (self.settings["div0"] + 1):
                perc = i / ((self.settings["div0"] + 1.0) * 3)
            elif i < (self.settings["div0"] + self.settings["div1"] + 2):
                perc = (1 / 3.0) + ((i - self.settings["div0"] - 1.0) /
                                    ((self.settings["div1"] + 1.0) * 3))
            else:
                perc = (2 / 3.0) + (
                    (i - self.settings["div0"] - self.settings["div1"] - 2.0) /
                    ((self.settings["div2"] + 1.0) * 3))

            perc = max(.001, min(.999, perc))

            if self.negate:
                op = aop.sn_rollsplinekine_op(div_cns, [
                    self.tws3_rot, self.tws2_rot, self.tws1_rot, self.tws0_rot
                ], 1 - perc)
            else:
                op = aop.sn_rollsplinekine_op(div_cns, [
                    self.tws0_rot, self.tws1_rot, self.tws2_rot, self.tws3_rot
                ], perc)

            # Squash n Stretch
            op = aop.sn_squashstretch2_op(div_cns, self.root,
                                          self.pDriver.Value, "x")
            par.addExpression(op.Parameters("blend"), self.pVolume.FullName)
            par.addExpression(op.Parameters("driver"), self.pDriver.FullName)
            if self.options["mode"] == 1:  # wip
                par.addExpression(op.Parameters("stretch"), self.pStretch[i])
                par.addExpression(op.Parameters("squash"), self.pSquash[i])
            else:
                op.Parameters("stretch").Value = self.st_value[i]
                op.Parameters("squash").Value = self.sq_value[i]
Exemple #12
0
    def addOperators(self):
        
        
    
        #Jaw Operators
        par.addExpression(self.jawRotCenter.Kinematics.Local.Parameters("rotz"), self.jawControl.Kinematics.Local.Parameters("rotz").FullName  )
        par.addExpression(self.jawTrans.Kinematics.Local.Parameters("posz"), self.jawControl.Kinematics.Local.Parameters("posz").FullName + " *" + self.mult_jaw_trans_Z.FullName )
        par.addExpression(self.jawRotBase.Kinematics.Local.Parameters("rotx"), "(" + self.jawControl.Kinematics.Local.Parameters("posy").FullName + " *" + self.mult_jaw_rot_X.FullName + ") * -1")
        par.addExpression(self.jawRotBase.Kinematics.Local.Parameters("roty"),  self.jawControl.Kinematics.Local.Parameters("posx").FullName + " *" + self.mult_jaw_rot_Y.FullName )
        par.addExpression(self.jawRotBase.Kinematics.Local.Parameters("rotz"),  self.jawControl.Kinematics.Local.Parameters("posx").FullName + " *" + self.mult_jaw_rot_Z.FullName )
         
        oAxis = [ "posx", "posy", "posz"]
         
        par.setLimit( self.jawControl, oAxis, -1, 1)
         
         
        #teeth
        self.intePose01 = aop.sn_interpose_op(self.teeth_lvl, self.teethHead, self.teethJaw )
        
        par.addExpression(self.intePose01.Parameters("blend_pos"), "MIN( MAX((" + self.jawControl.Kinematics.Local.Parameters("posy").FullName + "*" + self.upLips_jaw_head_multi.FullName + ")+"  + self.sticky_Lips.FullName + "+" + self.upLips_jaw_head.FullName + "+ abs(" + self.jawControl.Kinematics.Local.Parameters("posx").FullName + " ) , 0 + " + self.upLips_jaw_head.FullName + " + "  + self.sticky_Lips.FullName  + "), 1 )"  )
        par.addExpression(self.intePose01.Parameters("blend_dir"), "MIN( MAX((" + self.jawControl.Kinematics.Local.Parameters("posy").FullName + "*" + self.upLips_jaw_head_multi.FullName + ")+"   + self.sticky_Lips.FullName + "+" + self.upLips_jaw_head.FullName + "+ abs(" + self.jawControl.Kinematics.Local.Parameters("posx").FullName + " ), abs(" + self.jawControl.Kinematics.Local.Parameters("posx").FullName +  ")+" + self.upLips_jaw_head.FullName + "+ "  + self.sticky_Lips.FullName  +" ), 1 )"  )
        par.addExpression(self.intePose01.Parameters("blend_upv"), "MIN( MAX((" + self.jawControl.Kinematics.Local.Parameters("posy").FullName + "*" + self.upLips_jaw_head_multi.FullName + ")+"  + self.sticky_Lips.FullName + "+" + self.upLips_jaw_head.FullName + "+ abs(" + self.jawControl.Kinematics.Local.Parameters("posx").FullName + " ) , 0 + " + self.upLips_jaw_head.FullName + " + "  + self.sticky_Lips.FullName  + "), 1 )"  )
        
        
        
        #lips
                
        self.intePose02 = aop.sn_interpose_op(self.upLips_lvl, self.upLipsHead, self.upLipsJaw )
        
        par.addExpression(self.intePose02.Parameters("blend_pos"), "MIN( MAX((" + self.jawControl.Kinematics.Local.Parameters("posy").FullName + "*" + self.upLips_jaw_head_multi.FullName + ")+"  + self.sticky_Lips.FullName + "+" + self.upLips_jaw_head.FullName + "+ abs(" + self.jawControl.Kinematics.Local.Parameters("posx").FullName + " ) , 0 + " + self.upLips_jaw_head.FullName + " + "  + self.sticky_Lips.FullName  + "), 1 )"  )
        par.addExpression(self.intePose02.Parameters("blend_dir"), "MIN( MAX((" + self.jawControl.Kinematics.Local.Parameters("posy").FullName + "*" + self.upLips_jaw_head_multi.FullName + ")+"   + self.sticky_Lips.FullName + "+" + self.upLips_jaw_head.FullName + "+ abs(" + self.jawControl.Kinematics.Local.Parameters("posx").FullName + " ), abs(" + self.jawControl.Kinematics.Local.Parameters("posx").FullName +  ")+" + self.upLips_jaw_head.FullName + "+ "  + self.sticky_Lips.FullName  +" ), 1 )"  )
        par.addExpression(self.intePose02.Parameters("blend_upv"), "MIN( MAX((" + self.jawControl.Kinematics.Local.Parameters("posy").FullName + "*" + self.upLips_jaw_head_multi.FullName + ")+"  + self.sticky_Lips.FullName + "+" + self.upLips_jaw_head.FullName + "+ abs(" + self.jawControl.Kinematics.Local.Parameters("posx").FullName + " ) , 0 + " + self.upLips_jaw_head.FullName + " + "  + self.sticky_Lips.FullName  + "), 1 )"  )
        
        
        #Lips profile contrains
        self.cnsLower01 = aop.poseCns(self.uLip01_lvl, self.uLip01Lower_ref, True)
        self.cnsUpper01 = aop.poseCns(self.uLip01_lvl, self.uLip01Upper_ref, True)        
        par.addExpression(self.cnsUpper01.Parameters("blendweight"),  self.lip_01.FullName   )
        self.cnsLower01.Parameters("cnsscl").Value = False
        self.cnsUpper01.Parameters("cnsscl").Value = False
        
        self.cnsLower02 = aop.poseCns(self.uLip02_lvl, self.uLip02Lower_ref, True)
        self.cnsUpper02 = aop.poseCns(self.uLip02_lvl, self.uLip02Upper_ref, True)        
        par.addExpression(self.cnsUpper02.Parameters("blendweight"),  self.lip_02.FullName    )
        self.cnsLower02.Parameters("cnsscl").Value = False
        self.cnsUpper02.Parameters("cnsscl").Value = False
        
        self.cnsLower03 = aop.poseCns(self.uLip03_lvl, self.uLip03Lower_ref, True)
        self.cnsUpper03 = aop.poseCns(self.uLip03_lvl, self.uLip03Upper_ref, True)        
        par.addExpression(self.cnsUpper03.Parameters("blendweight"),  self.lip_03.FullName  )
        self.cnsLower03.Parameters("cnsscl").Value = False
        self.cnsUpper03.Parameters("cnsscl").Value = False
        
        self.cnsLower04 = aop.poseCns(self.cLip04_lvl, self.lLip04Lower_ref, True)
        self.cnsUpper04 = aop.poseCns(self.cLip04_lvl, self.lLip04Upper_ref, True)        
        par.addExpression(self.cnsUpper04.Parameters("blendweight"),  self.lip_04.FullName    )
        self.cnsLower04.Parameters("cnsscl").Value = False
        self.cnsUpper04.Parameters("cnsscl").Value = False
        
        self.cnsLower05 = aop.poseCns(self.lLip05_lvl, self.lLip05Lower_ref, True)
        self.cnsUpper05 = aop.poseCns(self.lLip05_lvl, self.lLip05Upper_ref, True)        
        par.addExpression(self.cnsUpper05.Parameters("blendweight"),  self.lip_05.FullName    )
        self.cnsLower05.Parameters("cnsscl").Value = False
        self.cnsUpper05.Parameters("cnsscl").Value = False
        
        self.cnsLower06 = aop.poseCns(self.lLip06_lvl, self.lLip06Lower_ref, True)
        self.cnsUpper06 = aop.poseCns(self.lLip06_lvl, self.lLip06Upper_ref, True)        
        par.addExpression(self.cnsUpper06.Parameters("blendweight"),  self.lip_06.FullName    )
        self.cnsLower06.Parameters("cnsscl").Value = False
        self.cnsUpper06.Parameters("cnsscl").Value = False
        
        self.cnsLower07 = aop.poseCns(self.lLip07_lvl, self.lLip07Lower_ref, True)
        self.cnsUpper07 = aop.poseCns(self.lLip07_lvl, self.lLip07Upper_ref, True)        
        par.addExpression(self.cnsUpper07.Parameters("blendweight"),  self.lip_07.FullName    )
        self.cnsLower07.Parameters("cnsscl").Value = False
        self.cnsUpper07.Parameters("cnsscl").Value = False
        
        self.cnsLower08 = aop.poseCns(self.lLip08_lvl, self.lLip08Lower_ref, True)
        self.cnsUpper08= aop.poseCns(self.lLip08_lvl, self.lLip08Upper_ref, True)        
        par.addExpression(self.cnsUpper08.Parameters("blendweight"),  self.lip_08.FullName    )
        self.cnsLower08.Parameters("cnsscl").Value = False
        self.cnsUpper08.Parameters("cnsscl").Value = False
        
        self.cnsLower09 = aop.poseCns(self.lLip09_lvl, self.lLip09Lower_ref, True)
        self.cnsUpper09 = aop.poseCns(self.lLip09_lvl, self.lLip09Upper_ref, True)        
        par.addExpression(self.cnsUpper09.Parameters("blendweight"),  self.lip_09.FullName    )
        self.cnsLower09.Parameters("cnsscl").Value = False
        self.cnsUpper09.Parameters("cnsscl").Value = False
        
        self.cnsLower10 = aop.poseCns(self.cLip10_lvl, self.lLip10Lower_ref, True)
        self.cnsUpper10 = aop.poseCns(self.cLip10_lvl, self.lLip10Upper_ref, True)        
        par.addExpression(self.cnsUpper10.Parameters("blendweight"),  self.lip_10.FullName    )
        self.cnsLower10.Parameters("cnsscl").Value = False
        self.cnsUpper10.Parameters("cnsscl").Value = False
        
        self.cnsLower11 = aop.poseCns(self.uLip11_lvl, self.uLip11Lower_ref, True)
        self.cnsUpper11 = aop.poseCns(self.uLip11_lvl, self.uLip11Upper_ref, True)        
        par.addExpression(self.cnsUpper11.Parameters("blendweight"),  self.lip_11.FullName    )
        self.cnsLower11.Parameters("cnsscl").Value = False
        self.cnsUpper11.Parameters("cnsscl").Value = False
        
        self.cnsLower12 = aop.poseCns(self.uLip12_lvl, self.uLip12Lower_ref, True)
        self.cnsUpper12 = aop.poseCns(self.uLip12_lvl, self.uLip12Upper_ref, True)        
        par.addExpression(self.cnsUpper12.Parameters("blendweight"),  self.lip_12.FullName    )
        self.cnsLower12.Parameters("cnsscl").Value = False
        self.cnsUpper12.Parameters("cnsscl").Value = False
        
        #mouth compression
        par.addExpression(self.upLips_loc.Kinematics.Local.Parameters("sclx"),  "1-((" + \
            self.jawControl.Kinematics.Local.Parameters("posy").FullName + \
            "*-1)*"+  self.lips_compression.FullName + ")")
            
        par.addExpression(self.lowLipsJaw.Kinematics.Local.Parameters("sclx"),  "1-((" + \
            self.jawControl.Kinematics.Local.Parameters("posy").FullName +"*-1)*"+ \
            self.lips_compression.FullName+ ")")
        
        par.addExpression(self.upLips_loc.Kinematics.Local.Parameters("posz"),  "((MAX("+ \
            self.jawControl.Kinematics.Local.Parameters("posy").FullName + "*-1,0))*" +  \
            self.lips_upperTranslation.FullName + ")+" + self.lips_upperOffset.FullName )
            
        par.addExpression(self.lowLipsJaw.Kinematics.Local.Parameters("posz"),  "((MAX("+ \
            self.jawControl.Kinematics.Local.Parameters("posy").FullName + "*-1,0))*" + \
            self.lips_lowerTranslation.FullName + ") +" + self.lips_lowerOffset.FullName )
         
         
        # # ICE Shapes Controls
        # self.intePose03 = aop.sn_interpose_op(self.mouthICE_lvl, self.upLipsHead, self.upLipsJaw )