def copyOp(obj, ref): op = xsi.ApplyOp( "CopyOp", ref.ActivePrimitive.FullName + "," + obj.ActivePrimitive.FullName) return op
def clsCtrOp(obj, center, pointIndexes): cluster = obj.ActivePrimitive.Geometry.AddCluster( c.siVertexCluster, "center_" + str(pointIndexes), pointIndexes) op = xsi.ApplyOp("ClusterCenter", cluster.FullName + ";" + center.FullName, 0, 0, None, 2) return op
def smoothOp(obj, pointIndexes): cluster = obj.ActivePrimitive.Geometry.AddCluster( c.siVertexCluster, "smooth_" + str(pointIndexes), pointIndexes) op = xsi.ApplyOp("Smooth", cluster.FullName, 3, c.siPersistentOperation, None, c.siConstructionModeAnimation) return op
def pathCns(obj, curve, cnsType=0, u=0, tangent=False, upv=None, comp=False): if cnsType == 0: cns = obj.Kinematics.AddConstraint("Path", curve, comp) cns.Parameters("perc").Value = u else: cns = obj.Kinematics.AddConstraint("Curve", curve, comp) cns.Parameters("posu").Value = u cns.Parameters("tangent").Value = tangent if upv: xsi.ApplyOp("UpVectorDefiner", cns.FullName + ";" + upv.FullName, c.siUnspecified, c.siPersistentOperation, "", 0) cns.Parameters("upvct_active").Value = True return cns
def addCnsCurve(parent, name, centers, close=False, degree=1): # convert collections to list centers = [center for center in centers] if degree == 3: if len(centers) == 2: centers.insert(0, centers[0]) centers.append(centers[-1]) elif len(centers) == 3: centers.append(centers[-1]) points = [] for center in centers: points.append(center.Kinematics.Global.Transform.PosX) points.append(center.Kinematics.Global.Transform.PosY) points.append(center.Kinematics.Global.Transform.PosZ) points.append(1) curve = parent.AddNurbsCurve(points, None, close, degree, c.siNonUniformParameterization, c.siSINurbs, name) crv_geo = curve.ActivePrimitive.Geometry for i, center in enumerate(centers): cluster = crv_geo.AddCluster(c.siVertexCluster, "center_%s" % i, [i]) xsi.ApplyOp("ClusterCenter", cluster.FullName + ";" + center.FullName, 0, 0, None, 2) # Here is a method to replace the cluster centers with an envelope # envelopeop = curve.ApplyEnvelope(cCenters) # # aWeights = [] # for i in range(cCenters.Count): # for j in range(cCenters.Count): # if i == j: # aWeights.append(100) # else: # aWeights.append(0) # # envelopeop.Weights.Array = aWeights return curve
def addClusterCenter(obj, pnt_index=[]): obj_geo = obj.ActivePrimitive.Geometry if not pnt_index: pnt_index = range(obj_geo.Points.Count) centers = [] for i in pnt_index: cluster = obj_geo.AddCluster(c.siVertexCluster, "center_%s"%i, [i]) t = XSIMath.CreateTransform() t.SetTranslation(obj_geo.Points(i).Position) center = obj.AddNull("center_%s"%i) center.Kinematics.Global.Transform = t xsi.ApplyOp( "ClusterCenter", cluster.FullName+";"+center.FullName, 0, 0, None, 2) centers.append(center) return centers
def dirCns(obj, master, upv=None, comp=False, axis="xy"): cns = obj.Kinematics.AddConstraint("Direction", master, comp) if upv is not None: xsi.ApplyOp("UpVectorDefiner", cns.FullName + ";" + upv.FullName) cns.Parameters("upvct_active").Value = True if axis == "xy": a = [1, 0, 0, 0, 1, 0] elif axis == "xz": a = [1, 0, 0, 0, 0, 1] elif axis == "yx": a = [0, 1, 0, 1, 0, 0] elif axis == "yz": a = [0, 1, 0, 0, 0, 1] elif axis == "zx": a = [0, 0, 1, 1, 0, 0] elif axis == "zy": a = [0, 0, 1, 0, 1, 0] elif axis == "-xy": a = [-1, 0, 0, 0, 1, 0] elif axis == "-xz": a = [-1, 0, 0, 0, 0, 1] elif axis == "-yx": a = [0, -1, 0, 1, 0, 0] elif axis == "-yz": a = [0, -1, 0, 0, 0, 1] elif axis == "-zx": a = [0, 0, -1, 1, 0, 0] elif axis == "-zy": a = [0, 0, -1, 0, 1, 0] elif axis == "x-y": a = [1, 0, 0, 0, -1, 0] elif axis == "x-z": a = [1, 0, 0, 0, 0, -1] elif axis == "y-x": a = [0, 1, 0, -1, 0, 0] elif axis == "y-z": a = [0, 1, 0, 0, 0, -1] elif axis == "z-x": a = [0, 0, 1, -1, 0, 0] elif axis == "z-y": a = [0, 0, 1, 0, -1, 0] elif axis == "-x-y": a = [-1, 0, 0, 0, -1, 0] elif axis == "-x-z": a = [-1, 0, 0, 0, 0, -1] elif axis == "-y-x": a = [0, -1, 0, -1, 0, 0] elif axis == "-y-z": a = [0, -1, 0, 0, 0, -1] elif axis == "-z-x": a = [0, 0, -1, -1, 0, 0] elif axis == "-z-y": a = [0, 0, -1, 0, -1, 0] for i, name in enumerate(["dirx", "diry", "dirz", "upx", "upy", "upz"]): cns.Parameters(name).Value = a[i] return cns
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]
def chainUpvOp(chain, upv): op = xsi.ApplyOp("SkeletonUpVector", chain.bones[0].FullName + ";" + upv.FullName, 3, "siPersistentOperation", "", 0) return op
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]
def addIceTree(obj, construction_mode=c.siConstructionModeDefault): tree = xsi.ApplyOp("ICETree", obj, c.siNode, None, None, construction_mode) return tree
def addOperators(self): # Visibilities ------------------------------------- if self.isFkIk: for fk_ctl in self.fk_ctl: par.addExpression( fk_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) # IK Chain ----------------------------------------- if self.isIk: # Leash aop.clsCtrOp(self.upv_ctl, self.chain.bones[0], [0]) # Constraint and up vector self.chain.eff.Kinematics.AddConstraint("Position", self.ik_ctl, False) xsi.ApplyOp( "SkeletonUpVector", self.chain.bones[0].FullName + ";" + self.upv_ctl.FullName, 3, "siPersistentOperation", "", 0) par.addExpression(self.chain.roll, self.pRoll.FullName) # Chain of deformers ------------------------------- for i, loc in enumerate(self.loc): if self.settings["type"] == 0: # fk only loc.Kinematics.addConstraint("Pose", self.fk_ctl[i]) elif self.settings["type"] == 1: # ik only loc.Kinematics.addConstraint("Pose", self.chain.bones[i]) elif self.settings["type"] == 2: # fk/ik # orientation cns = loc.Kinematics.AddConstraint("Orientation", self.fk_ctl[i]) cns = loc.Kinematics.AddConstraint("Orientation", self.chain.bones[i]) par.addExpression(cns.Parameters("blendweight"), self.pBlend.FullName) # position / scaling for s in "xyz": par.addExpression( loc.Kinematics.Local.Parameters("pos%s" % s), self.fk_ctl[i].Kinematics.Local.Parameters( "pos%s" % s).FullName + " * (1 - " + self.pBlend.FullName + ") + " + self.chain.bones[i].Kinematics.Local.Parameters( "pos%s" % s).FullName + " * " + self.pBlend.FullName) par.addExpression( loc.Kinematics.Local.Parameters("scl%s" % s), self.fk_ctl[i].Kinematics.Local.Parameters( "scl%s" % s).FullName + " * (1 - " + self.pBlend.FullName + ") + " + self.chain.bones[i].Kinematics.Local.Parameters( "scl%s" % s).FullName + " * " + self.pBlend.FullName) # Default Values ----------------------------------- if self.isFkIk: self.pBlend.Value = self.settings["blend"]