Example #1
0
def copyOp(obj, ref):

    op = xsi.ApplyOp(
        "CopyOp",
        ref.ActivePrimitive.FullName + "," + obj.ActivePrimitive.FullName)

    return op
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
File: curve.py Project: jeanim/gear
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
Example #6
0
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
Example #7
0
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
Example #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-----------------------------------------
        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]
Example #9
0
def chainUpvOp(chain, upv):

    op = xsi.ApplyOp("SkeletonUpVector",
                     chain.bones[0].FullName + ";" + upv.FullName, 3,
                     "siPersistentOperation", "", 0)
    return op
Example #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.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]
Example #11
0
def addIceTree(obj, construction_mode=c.siConstructionModeDefault):

    tree = xsi.ApplyOp("ICETree", obj, c.siNode, None, None, construction_mode)

    return tree
Example #12
0
    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"]