Exemple #1
0
def copyObjects(**kwargs):
    """
        Input object to be copied
        select positions where the objects needs be copied and run the script
        the copied object constraints the position objects if options are selected
    """
    print "TEST"
    obj = kwargs.get("obj", "")
    prFlg = kwargs.get("prFlg", False)
    scFlg = kwargs.get("scFlg", False)
    sel = pm.ls(selection=True, flatten=True)
    ch = None
    for comp in sel:
        pos = pm.xform(comp, query=True, worldSpace=True, translation=True)
        new_obj = pm.duplicate(obj)
        pm.xform(new_obj, worldSpace=True, translation=pos)
        if prFlg or scFlg:
            typ = str(pm.nodeType(comp))
            if typ == "transform":
                ch = comp
            else:
                shp = pm.ls(comp, objectsOnly=True)[0]
                trn = pm.listRelatives(shp, parent=True)[0]
                ch = trn
            if prFlg:
                pm.parentConstraint(new_obj, ch, maintainOffset=True)
            if scFlg:
                pm.scaleConstraint(new_obj, ch, maintainOffset=True)
    return None
Exemple #2
0
 def parent_scale_const(self, **kwargs):
     obj = kwargs.get("cur_obj", None)
     ctr = kwargs.get("ctr", None)
     scl_flg = kwargs.get("scl_flg", False)
     pm.parentConstraint(obj, ctr, maintainOffset=True)
     if scl_flg:
         pm.scaleConstraint(obj, ctr, maintainOffset=True)
     return None
Exemple #3
0
def constMult(**kwargs):
    """
        parent constraint multiple child to single parent
    """
    prnt = kwargs.get("prntObj", "")
    prnt_con = kwargs.get("pr_cons", False)
    scl_con = kwargs.get("sc_cons", False)
    sel = pm.ls(selection=True)
    if prnt == "":
        prnt = sel.pop(0)
    for obj in sel:
        if prnt_con:
            pm.parentConstraint(prnt, obj, maintainOffset=True)
        if scl_con:
            pm.scaleConstraint(prnt, obj, maintainOffset=True)
    return None
    def autoOrientXKeepZ(self, obj ):
        assert isinstance(obj, pymel.core.nodetypes.Transform)
        
        unrepar = Unreparenter( obj )
        pm.makeIdentity( obj, apply=True, t=1, r=1, s=1, n=0, pn=1 )
        target = pm.createNode('joint')
        cons = [
            pm.pointConstraint( obj, target ),
            pm.orientConstraint( obj, target ),
            pm.scaleConstraint( obj, target )
        ]
        pm.delete( cons )
        
        
        unrepar.reparent()
        pm.joint( obj, edit=True,
            oj='xzy', secondaryAxisOrient='yup',
            zeroScaleOrient=True, children=False
        )
        unrepar.unparent( )
        pm.makeIdentity( obj, apply=True, t=1, r=1, s=1, n=0, pn=1 )
        
        
        self.rotateOnXToMatchZ(obj,target)

        pm.delete( target )
        
        pm.makeIdentity( obj, apply=True, t=1, r=1, s=1, n=0, pn=1 )
        unrepar.reparent(clean=True)
Exemple #5
0
def setCon(**kwargs):
    """
        constraints parent child in selection set
    """
    sel_obj = pm.ls(selection=True)
    if not len(sel_obj) % 2 == 0:
        print "please select parent child in pairs"
        return None
    prFlg = kwargs.get("pr_cons", False)
    scFlg = kwargs.get("sc_cons", False)
    pr, ch = getSet(sel=sel_obj)
    pm.select(clear=True)
    for prnt in pr:
        index = pr.index(prnt)
        if prFlg:
            pm.parentConstraint(prnt, ch[index], maintainOffset=True)
        if scFlg:
            pm.scaleConstraint(prnt, ch[index], maintainOffset=True)
    return None
Exemple #6
0
def delCon(**kwargs):
    """
        Delete selected constraints on selected objects if exists
    """
    print "deleteCon"
    sel = pm.ls(selection=True)
    #con_typ = kwargs.get("constraint_type", None)
    prFlg = kwargs.get("pr_con", False)
    scFlg = kwargs.get("sc_con", False)
    ptFlg = kwargs.get("pt_con", False)
    orFlg = kwargs.get("or_con", False)

    for obj in sel:
        if prFlg:
            const = pm.parentConstraint(obj, query=True)
            if const:
                pm.delete(const)
            else:
                print str(obj) + " parent delete skipped"

        if orFlg:
            const = pm.orientConstraint(obj, query=True)
            if const:
                pm.delete(const)
            else:
                print str(obj) + " orient delete skipped"

        if ptFlg:
            const = pm.pointConstraint(obj, query=True)
            if const:
                pm.delete(const)
            else:
                print str(obj) + " point delete skipped"
        #if con_typ == "aim":
        #	const = pm.aimConstraint(obj, query=True)
        #	if const:
        #		pm.delete(const)

        if scFlg:
            const = pm.scaleConstraint(obj, query=True)
            if const:
                pm.delete(const)
            else:
                print str(obj) + " scale delete skipped"
    return None
    def fixJointComplexXforms( self, obj ):
        assert isinstance(obj, pymel.core.nodetypes.Transform)
        
        unrepar = Unreparenter( obj )
        
        pm.makeIdentity( obj, apply=True, t=1, r=1, s=1, n=0, pn=1 )
        tmp = pm.createNode('joint')
        cons = [
            pm.pointConstraint( obj, tmp ),
            pm.orientConstraint( obj, tmp ),
            pm.scaleConstraint( obj, tmp )
        ]
        pm.delete( cons )
        
        helperZ = pm.createNode('transform')
        helperX = pm.createNode('transform')
        pm.parent( helperX, tmp )
        pm.parent( helperZ, tmp )
        
        helperX.translate.set( [1,0,0] )    
        helperZ.translate.set( [0,0,1] )    

        obj.jointOrient.set( 0,0,0 )
        obj.rotateAxis.set( 0,0,0 )
        con = pm.aimConstraint( helperX, obj,
            worldUpType='object',
            worldUpObject=helperZ,
            aimVector=[1,0,0],
            upVector=[0,0,1],
        )
        pm.delete( con )   
        pm.delete( [helperX, helperZ] )
        
        pm.delete( tmp )
        
        pm.makeIdentity( obj, apply=True, t=1, r=1, s=1, n=0, pn=1 )
        unrepar.reparent( )
def meshConstrainer(constrainer, constrained):
    pma.scaleConstraint(constrainer, constrained, maintainOffset=True)
    pma.parentConstraint(constrainer, constrained, maintainOffset=True)
Exemple #9
0
    def run(self, **kwargs):
        obj = kwargs.get("cur_obj", None)
        ctrl = kwargs.get("cur_ctrl", None)
        ctr_mode = kwargs.get("ctr_mode", None).lower()
        con_opn = kwargs.get("con_opn", None)
        connect_ctrl = kwargs.get("connect_ctrl", None)
        from_txt = kwargs.get("from_txt", "")
        to_txt = kwargs.get("to_txt", "")
        ctrl_nm_opn = kwargs.get("ctrl_nm_opn", None)
        ctrl_nm_txt = kwargs.get("ctrl_nm_txt", "")
        ctrl_sufx = kwargs.get("ctrl_sfx_txt", "")
        zero_node_opn = kwargs.get("zero_node_opn", None)
        zero_node_nm = kwargs.get("zero_nd_nm", "")
        lock_scl_opn = kwargs.get("lock_scl_opn", None)
        scale_check = kwargs.get("scale_check", False)
        ctrl_sz_offset = str(kwargs.get("ctrl_sz_offset", "0.5"))
        id_num = str(kwargs.get("id_num", ""))
        position_flag = kwargs.get("obj_pos_flag", False)
        pos_sel_lbl = kwargs.get("pos_sel_lbl", None)
        try:
            ctrl_sz_offset = float(ctrl_sz_offset)
        except ValueError:
            pm.displayError("invalid input for size offset value")
            return None

        z_frm_txt = ""
        if ctrl_nm_opn:
            z_frm_txt = ctrl_sufx
        else:
            z_frm_txt = to_txt

        self.set_control_position(cur_obj=obj, ctr=ctrl)

        if not position_flag:
            bound_box = obj.getBoundingBox()
            pos = self.get_boundary_position(bnd_bx=bound_box,
                                             pos_sel=pos_sel_lbl)
            ctr_pos = pm.xform(ctrl,
                               query=True,
                               translation=True,
                               worldSpace=True)
            if pos_sel_lbl.find("X") > -1:
                ctr_pos[0] = pos
            elif pos_sel_lbl.find("Y") > -1:
                ctr_pos[1] = pos
            elif pos_sel_lbl.find("Z") > -1:
                ctr_pos[2] = pos

            #base_location = (bound_box[0])[1]
            ctrl.translate.set(ctr_pos)

        if scale_check:
            self.scale_ctr_to_obj(cur_obj=obj,
                                  ctr=ctrl,
                                  size_offset=ctrl_sz_offset)
        else:
            self.scale_uniform(ctr=ctrl, size_offset=ctrl_sz_offset)

        if not ctrl_nm_opn:
            self.rename_ctrl_from_obj(cur_obj=obj,
                                      ctr=ctrl,
                                      replace_from_str=from_txt,
                                      replace_to_str=to_txt)
        else:
            self.name_control(ctr=ctrl,
                              ctrl_nm=ctrl_nm_txt,
                              ctrl_sfx=ctrl_sufx,
                              id_val=id_num)

        if zero_node_opn:
            self.create_zero_group(ctr=ctrl,
                                   from_nm=z_frm_txt,
                                   zero_nm=zero_node_nm)

        if connect_ctrl:
            if ctr_mode == "skin":
                self.skin(cur_obj=obj, ctr=ctrl)
            else:
                if con_opn[0]:
                    pm.parentConstraint(ctrl, obj, maintainOffset=True)
                if con_opn[1]:
                    pm.scaleConstraint(ctrl, obj, maintainOffset=True)

        if lock_scl_opn:
            self.lock_scale_vis_rad(ctr=ctrl)

        return None
def setup_ik_spline(**kwargs):
    curve = kwargs.get("curve", None)
    joint_chain = kwargs.get("joint_chain", None)
    auto_curve = kwargs.get("auto_curve", True)
    use_curve = kwargs.get("use_curve", None)
    spans = kwargs.get("number_of_spans", 4)
    ctrl_jnts = kwargs.get("num_control_joints", 3)
    ik_name = kwargs.get("ik_name", "ikHandle")
    scale_stretch = kwargs.get("scale_stretch", False)
    create_dense_chain = kwargs.get("dense_chain", False)
    dense_division = kwargs.get("dense_chain_divisions", 3)
    auto_simplify = kwargs.get("auto_simplify_curve", False)
    stretch_exp = kwargs.get("stretch_exp", False)
    global_scale_check = kwargs.get("global_scale_check", False)
    global_scale_attr = kwargs.get("global_scale_attr", None)
    obj = None

    pm.select(joint_chain, hierarchy=True)
    joint_chain = pm.ls(selection=True)
    for i in range(len(joint_chain)):
        pm.rename(joint_chain[i], ik_name + str(i) + "_IK_JNT")
        joint_chain[i] = pm.PyNode(ik_name + str(i) + "_IK_JNT")
    print joint_chain
    if not isinstance(joint_chain[0], pm.Joint):
        pm.displayInfo("selection should be of type joint")
        return None
    if len(joint_chain) < 2:
        pm.displayInfo("Chain should consist of more than one joint")
        return None

    if (global_scale_check):
        if (global_scale_attr is None):
            pm.displayInfo("Please input global scale attribute")
            return None
        else:
            obj = global_scale_attr.split(".")[0]
            global_attr = global_scale_attr.split(".")[1]
            check_global_attr = pm.attributeQuery(global_attr,
                                                  node=obj,
                                                  exists=True)
            if not check_global_attr:
                pm.displayInfo("Invalid global scale attribute")
                return None

    start_jnt = joint_chain[0]
    end_joint = joint_chain[-1]

    if create_dense_chain:
        rep_chain = pm.duplicate(joint_chain)
        print "DUPLICATE"

        for i in range(len(rep_chain)):
            pm.rename(rep_chain[i], str(joint_chain[i]) + "_DnsJnt")
            rep_chain[i] = pm.PyNode(str(joint_chain[i]) + "_DnsJnt")

        print rep_chain
        start_jnt = rep_chain[0]
        end_joint = rep_chain[-1]
        dense_chain(joints=rep_chain, joints_inbetween=dense_division)
        rep_chain.append(end_joint)
        for index in range(len(joint_chain)):
            pm.parentConstraint(rep_chain[index],
                                joint_chain[index],
                                maintainOffset=False)
        pm.select(start_jnt, hierarchy=True)
        new_chain = pm.ls(selection=True)

    crv = ""
    if auto_curve:
        ik_handle, eff, crv = pm.ikHandle(startJoint=start_jnt,
                                          createCurve=auto_curve,
                                          solver="ikSplineSolver",
                                          numSpans=spans,
                                          endEffector=end_joint,
                                          simplifyCurve=auto_simplify)

    else:
        crv = pm.PyNode(use_curve)
        ik_handle, eff = pm.ikHandle(startJoint=start_jnt,
                                     curve=use_curve,
                                     solver="ikSplineSolver",
                                     endEffector=end_joint,
                                     createCurve=False)

    crv.inheritsTransform.set(0)

    pm.rename(ik_handle, ik_name + "IK_Handle")
    pm.rename(crv, ik_name + "IK_Curve")

    ik_curve_shp = crv.getShape()
    crv_info_node = pm.createNode("curveInfo")
    pm.connectAttr(ik_curve_shp + ".worldSpace", crv_info_node + ".inputCurve")
    if ctrl_jnts:
        if ctrl_jnts == 1:
            print "Minimum 2 joints needed as controllers"
            print "skipping control joint creation process"
            pm.displayInfo("Minimum 2 joints needed as controllers")
        else:
            ctrl_jnts = joints_along_curve(number_of_joints=ctrl_jnts,
                                           curve=crv,
                                           bind_curve_to_joint=True)
            pm.select(clear=True)
            ctr_jnt_gp = pm.group(ctrl_jnts,
                                  name=ik_name + "_control_joints_GP")
        for i in range(len(ctrl_jnts)):
            pm.rename(ctrl_jnts[i], ik_name + str(i + 1) + "_IK_CTRL")
            ctrl_jnts[i] = pm.PyNode(ik_name + str(i + 1) + "_IK_CTRL")
    if stretch_exp:
        pm.addAttr(ctrl_jnts[-1],
                   longName="Stretch",
                   attributeType="float",
                   minValue=0,
                   maxValue=10,
                   keyable=True)
        print "ATTRIBUTE TO", str(ctrl_jnts[-1])
        if scale_stretch:
            pm.addAttr(ctrl_jnts[-1],
                       longName="EndDepth",
                       attributeType="float",
                       keyable=True)
            pm.addAttr(ctrl_jnts[-1],
                       longName="Thickness",
                       attributeType="float",
                       keyable=True)
            pm.addAttr(ctrl_jnts[-1],
                       longName="ShiftScale",
                       attributeType="float",
                       keyable=True)

        if create_dense_chain:
            stretch_expression(joints=new_chain,
                               curve_info_node=crv_info_node,
                               connect_scale=scale_stretch,
                               expression_name=ik_name + "_stretch_expression",
                               ctrl_attr=str(ctrl_jnts[-1]) + ".Stretch",
                               glbl_scl_stat=global_scale_check,
                               glbl_scl_attr=global_scale_attr,
                               control_obj=str(ctrl_jnts[-1]),
                               scale_joints=joint_chain)
        else:
            stretch_expression(joints=joint_chain,
                               curve_info_node=crv_info_node,
                               connect_scale=scale_stretch,
                               expression_name=ik_name + "_stretch_expression",
                               ctrl_attr=str(ctrl_jnts[-1]) + ".Stretch",
                               glbl_scl_stat=global_scale_check,
                               glbl_scl_attr=global_scale_attr,
                               control_obj=str(ctrl_jnts[-1]))

    final_group = pm.group(name=ik_name + "_ik_group", empty=True)
    pm.parent(joint_chain[0], final_group)
    pm.parent(crv, final_group)
    pm.parent(ik_handle, final_group)
    if ctrl_jnts > 1:
        pm.parent(ctr_jnt_gp, final_group)
    if create_dense_chain:
        pm.select(clear=True)
        dense_grp = pm.group(start_jnt, name="dense_chain_group")
        pm.parent(dense_grp, final_group)
    if obj:
        pm.scaleConstraint(obj, final_group)

    return None