def addOperators(self): # Controlers Limits ------------------------------- # pos_0 = self.crv[0].ActivePrimitive.Geometry.Curves(0).EvaluatePosition(0)[0] # pos_1 = self.crv[0].ActivePrimitive.Geometry.Curves(0).EvaluatePosition(4)[0] # pos_0 = XSIMath.MapObjectPositionToWorldSpace(self.crv[0].Kinematics.Global.Transform, pos_0) # pos_1 = XSIMath.MapObjectPositionToWorldSpace(self.crv[0].Kinematics.Global.Transform, pos_1) # lim_min = pos_0.Y - self.ctl[0].Kinematics.Global.Transform.Translation.Y # lim_max = pos_1.Y - self.ctl[0].Kinematics.Global.Transform.Translation.Y for ctl, crv, upv, centers, off, perc in zip(self.ctl, self.crv, self.upv, self.ctr, self.off, self.percentages): # crv_geo = crv.ActivePrimitive.Geometry # crv_0 = crv_geo.Curves(0) # crv_tra = crv.Kinematics.Global.Transform # Set Limits ---------------------------------- par.setLimit(ctl, ["posy"], -1, 1) # ctl.Kinematics.Local.Parameters("posyminactive").Value = True # ctl.Kinematics.Local.Parameters("posymaxactive").Value = True # ctl.Kinematics.Local.Parameters("posyminlimit").Value = lim_min # ctl.Kinematics.Local.Parameters("posymaxlimit").Value = lim_max # Path Constraint ----------------------------- constraints = [] for ctr in centers: cns = aop.pathCns(ctr, crv, 0, perc, True, upv, False) ope.setConstraintTangency(cns, [0, 1, 0], [0, 0, -1]) constraints.append(cns) pos_min = "max(0,-%s)*%s" % ( ctl.Kinematics.Local.Parameters("posy").FullName, perc) pos_max = "max(0,%s)*%s" % ( ctl.Kinematics.Local.Parameters("posy").FullName, 100 - perc) par.addExpression(constraints[1].Parameters("perc"), "%s - %s + %s" % (perc, pos_min, pos_max)) cns_perc = constraints[1].Parameters("perc").FullName par.addExpression(constraints[0].Parameters("perc"), cns_perc + " * .5 ") par.addExpression(constraints[2].Parameters("perc"), cns_perc + " + (100 - " + cns_perc + " ) * .5 ") # Connect Offset to Controler for s in "xz": par.addExpression( off.Kinematics.Local.Parameters("pos%s" % s), ctl.Kinematics.Local.Parameters("pos%s" % s).FullName + " * " + str(self.scale)) for s in "yz": par.addExpression( off.Kinematics.Local.Parameters("rot%s" % s), ctl.Kinematics.Local.Parameters("rot%s" % s).FullName) for s in "x": par.addExpression( off.Kinematics.Local.Parameters("scl%s" % s), ctl.Kinematics.Local.Parameters("scl%s" % s).FullName) # Constrained Curve ------------------------------- for i in range(self.crv_count): if i == self.inter_crv: centers = self.off else: centers = [ctr[i] for ctr in self.ctr] for ctr, pnts in zip(centers, [[0, 1], [2], [3, 4]]): aop.clsCtrOp(self.cns_crv[i], ctr, pnts) # Shadows ----------------------------------------- constraints = [] for i in range(self.shd_count): u = i / 4.0 for j in range(self.crv_count): if j == self.inter_crv: cns = aop.pathCns(self.loc[j * self.shd_count + i], self.cns_crv[j], 1, u, True, None, False) constraints.append(cns) else: cns = aop.pathCns(self.loc[j * self.shd_count + i], self.cns_crv[j], 1, u, True, self.upv[0], False) # Connect Roll aop.gear_pointAtObjectAxis(constraints[0], self.ctl[0], [0, 0, 1]) aop.spinePointAtOp(constraints[1], self.ctl[0], self.ctl[1], .5) aop.gear_pointAtObjectAxis(constraints[2], self.ctl[1], [0, 0, 1]) aop.spinePointAtOp(constraints[3], self.ctl[1], self.ctl[2], .5) aop.gear_pointAtObjectAxis(constraints[4], self.ctl[2], [0, 0, 1])
def addOperators(self): # Controlers Limits ------------------------------- # pos_0 = self.crv[0].ActivePrimitive.Geometry.Curves(0).EvaluatePosition(0)[0] # pos_1 = self.crv[0].ActivePrimitive.Geometry.Curves(0).EvaluatePosition(4)[0] # pos_0 = XSIMath.MapObjectPositionToWorldSpace(self.crv[0].Kinematics.Global.Transform, pos_0) # pos_1 = XSIMath.MapObjectPositionToWorldSpace(self.crv[0].Kinematics.Global.Transform, pos_1) # lim_min = pos_0.Y - self.ctl[0].Kinematics.Global.Transform.Translation.Y # lim_max = pos_1.Y - self.ctl[0].Kinematics.Global.Transform.Translation.Y for ctl, crv, upv, centers, off, perc in zip(self.ctl, self.crv, self.upv, self.ctr, self.off, self.percentages): # crv_geo = crv.ActivePrimitive.Geometry # crv_0 = crv_geo.Curves(0) # crv_tra = crv.Kinematics.Global.Transform # Set Limits ---------------------------------- par.setLimit(ctl, ["posy"], -1, 1) # ctl.Kinematics.Local.Parameters("posyminactive").Value = True # ctl.Kinematics.Local.Parameters("posymaxactive").Value = True # ctl.Kinematics.Local.Parameters("posyminlimit").Value = lim_min # ctl.Kinematics.Local.Parameters("posymaxlimit").Value = lim_max # Path Constraint ----------------------------- constraints = [] for ctr in centers: cns = aop.pathCns(ctr, crv, 0, perc, True, upv, False) ope.setConstraintTangency(cns, [0,1,0], [0,0,-1]) constraints.append(cns) pos_min = "max(0,-%s)*%s"%(ctl.Kinematics.Local.Parameters("posy").FullName,perc) pos_max = "max(0,%s)*%s"%(ctl.Kinematics.Local.Parameters("posy").FullName,100-perc) par.addExpression(constraints[1].Parameters("perc"), "%s - %s + %s"%(perc,pos_min,pos_max)) cns_perc = constraints[1].Parameters("perc").FullName par.addExpression(constraints[0].Parameters("perc"), cns_perc + " * .5 ") par.addExpression(constraints[2].Parameters("perc"), cns_perc + " + (100 - "+cns_perc+" ) * .5 ") # Connect Offset to Controler for s in "xz": par.addExpression(off.Kinematics.Local.Parameters("pos%s"%s), ctl.Kinematics.Local.Parameters("pos%s"%s).FullName+" * "+str(self.scale)) for s in "yz": par.addExpression(off.Kinematics.Local.Parameters("rot%s"%s), ctl.Kinematics.Local.Parameters("rot%s"%s).FullName) for s in "x": par.addExpression(off.Kinematics.Local.Parameters("scl%s"%s), ctl.Kinematics.Local.Parameters("scl%s"%s).FullName) # Constrained Curve ------------------------------- for i in range(self.crv_count): if i == self.inter_crv: centers = self.off else: centers = [ctr[i] for ctr in self.ctr] for ctr, pnts in zip(centers, [[0,1],[2],[3,4]]): aop.clsCtrOp(self.cns_crv[i], ctr, pnts) # Shadows ----------------------------------------- constraints = [] for i in range(self.shd_count): u = i/4.0 for j in range(self.crv_count): if j == self.inter_crv: cns = aop.pathCns(self.loc[j*self.shd_count+i], self.cns_crv[j], 1, u, True, None, False) constraints.append(cns) else: cns = aop.pathCns(self.loc[j*self.shd_count+i], self.cns_crv[j], 1, u, True, self.upv[0], False) # Connect Roll aop.gear_pointAtObjectAxis(constraints[0], self.ctl[0], [0,0,1]) aop.spinePointAtOp(constraints[1], self.ctl[0], self.ctl[1], .5) aop.gear_pointAtObjectAxis(constraints[2], self.ctl[1], [0,0,1]) aop.spinePointAtOp(constraints[3], self.ctl[1], self.ctl[2], .5) aop.gear_pointAtObjectAxis(constraints[4], self.ctl[2], [0,0,1])
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 )