Example #1
0
def midPosVec(**kwargs):
    """
        Returns the mid point from selected positions(objects or components)
    """
    selected_items = kwargs.get("objects", [])
    if not selected_items:
        selected_items = pm.ls(selection=True, flatten=True)
    if not isinstance(selected_items, list):
        print "please provide objects list"
        pm.displayInfo("please provide objects list")
        return None
    number_of_items = len(selected_items)
    position_vector = []
    final_vector = OpenMaya.MVector(0, 0, 0)
    for index in range(number_of_items):
        pos = pm.xform(selected_items[index],
                       query=True,
                       worldSpace=True,
                       translation=True)
        vec = OpenMaya.MVector(pos[0], pos[1], pos[2])
        position_vector.append(vec)

    for vector_index in range(len(position_vector)):
        final_vector = final_vector + position_vector[vector_index]

    final_vector = final_vector / len(position_vector)
    mid_position = [final_vector.x, final_vector.y, final_vector.z]
    return mid_position
Example #2
0
def jnt_along_loop():
    import splitLoops
    #reload(splitLoops)
    loops = splitLoops.split_loop()
    if not loops:
        pm.displayInfo("please select only edge loops")
        return None
    else:
        verts = loops[1]
        loops = loops[0]
    #print loops
    #print verts
    pos = []
    for i in range(len(loops)):
        pos.append(CustomScripts.midPos(selected_items=verts[i]))

    print pos
    jnt_lst = []
    for p in pos:
        print p
        jnt = pm.joint(position=p)
        jnt_lst.append(jnt)
        if len(jnt_lst) > 1:
            pm.joint(jnt_lst[pos.index(p) - 1],
                     edit=True,
                     orientJoint='xyz',
                     secondaryAxisOrient='yup',
                     zeroScaleOrient=True)
    return None
Example #3
0
def curve_through_points(**kwargs):
    selection_points = kwargs.get("selection_points", None)
    curve_degree = kwargs.get("curve_degree", 3)
    curve_name = kwargs.get("curve_name", "Curve")

    if not selection_points:
        selection_points = pm.ls(selection=True)
        if not selection_points:
            pm.displayInfo("Please select reference points")
            return None
    if len(selection_points) < curve_degree + 1:
        pm.displayInfo("please select more than " + str(curve_degree + 1) +
                       " points")
        return None

    points_locations = []
    for point in selection_points:
        points_locations.append(
            pm.xform(point, query=True, translation=True, worldSpace=True))
    pm.select(clear=True)
    current_curve = pm.curve(degree=curve_degree,
                             worldSpace=True,
                             point=points_locations)
    pm.rename(current_curve, curve_name)
    return current_curve
Example #4
0
def jnt_at_mid_vertex_orient(**kwargs):
    sel = pm.ls(orderedSelection=True, flatten=True)
    if not sel:
        pm.displayInfo("Please select vertex")
        return None
    obj_pos_map = {}
    for comp in sel:
        if not isinstance(comp, pm.MeshVertex):
            pm.displayInfo("Please select only vertex")
            return None
    mid_pos = 0
    for comp in sel:
        comp.node()
        transform_node = pm.listTransforms(comp.node())[0]
        if transform_node not in obj_pos_map.keys():
            vrts = CustomScripts.get_vrts(sel_obj=[transform_node])[0]
            pos = CustomScripts.midPos(selected_items=vrts)
            obj_pos_map[transform_node] = pos
            mid_pos = pos
        else:
            mid_pos = obj_pos_map[transform_node]
        comp_pos = pm.pointPosition(comp, world=True)
        pm.select(clear=True)
        jnt1 = pm.joint(position=mid_pos)
        jnt2 = pm.joint(position=comp_pos)
        pm.joint(jnt1,
                 edit=True,
                 orientJoint='xyz',
                 secondaryAxisOrient='yup',
                 zeroScaleOrient=True)
        pm.select([jnt1, jnt2])
        CustomScripts.CopyJntOri()
    return None
Example #5
0
def jnt_at_mid_vertex_orient(**kwargs):
    sel = pm.ls(orderedSelection=True, flatten=True)
    if not sel:
        pm.displayInfo("Please select vertex")
        return None
    obj_pos_map = {}
    for comp in sel:
        if not isinstance(comp, pm.MeshVertex):
            pm.displayInfo("Please select only vertex")
            return None
    mid_pos = 0
    for comp in sel:
        #vertex_position = pm.pointPosition(comp, world=True)
        #component_pos.append(vertex_position)
        shape_node = comp.node()
        transform_node = pm.listTransforms(comp.node())[0]
        if transform_node not in obj_pos_map.keys():
            vrts = CustomScripts.get_vrts(sel_obj=[transform_node])[0]
            print vrts
            pos = CustomScripts.midPos(selected_items=vrts)
            obj_pos_map[transform_node] = pos
            mid_pos = pos
        else:
            mid_pos = obj_pos_map[transform_node]
        print obj_pos_map
        comp_pos = pm.pointPosition(comp, world=True)
        pm.select(clear=True)
        jnt1 = pm.joint(position=mid_pos)
        jnt2 = pm.joint(position=comp_pos)
        pm.joint(jnt1,
                 edit=True,
                 orientJoint='xyz',
                 secondaryAxisOrient='yup',
                 zeroScaleOrient=True)
        pm.select([jnt1, jnt2])
        CustomScripts.CopyJntOri()

        #obj_list[comp] = transform_node
        #if transform_node not in obj_list:
        #    obj_list.append(transform_node)

    #vrts = CustomScripts.get_vrts(sel_obj = obj_list)
    #pos = []
    #for vrt in vrts:
    #    pos.append(CustomScripts.midPos(selected_items = vrt))

    #for p in component_pos:
    #    pm.select(clear=True)
    #    jnt1 = pm.joint(position=p)
    #    jnt2 = pm.joint(position = component_pos[pos.index(p)])
    #    pm.joint(jnt1, edit=True, orientJoint='xyz',
    #                 secondaryAxisOrient='yup', zeroScaleOrient=True)
    #    pm.select(clear=True)
    #    pm.select([jnt1, jnt2])
    #    CustomScripts.CopyJntOri()
    #    pm.select(clear=True)
    return None
Example #6
0
def jnt_at_object_mid(**kwargs):
    sel = pm.ls(orderedSelection=True, flatten=True)
    for tran in sel:
        if not isinstance(tran, pm.Transform):
            pm.displayinfo("Please select only transform nodes")
            return None
    if not sel:
        pm.displayInfo("please select transform object")
    pos = []
    for obj in sel:
        pos.append(CustomScripts.midPos(selected_items=obj))
    pm.select(clear=True)
    for p in pos:
        pm.joint(position=p)
        pm.select(clear=True)
    return None
def cycle( tool ) :
	getCmd = "pm.manip%sContext( '%s', q=True, mode=True )" % ( tool, tool )
	currentIndex = eval(getCmd)
	
	indexList = sorted(validIndexes[tool])
	nextIndex = 0	
	for i, index in enumerate( indexList ) :				
		if( index == currentIndex ) :			
			nextIndex = indexList[ (i+1) % len(indexList) ]
			break
		elif( index > currentIndex ) :
			nextIndex = index
			break
	
	setCmd = "pm.manip%sContext( '%s', e=True, mode=%s )" % ( tool, tool, nextIndex )
	eval(setCmd)
	pm.displayInfo( '%s Tool : %s' % ( tool, nextIndex ) )
def cycle( tool ) :
	tool = tool.capitalize()
	getCmd = "pm.manip%sContext( '%s', q=True, mode=True )" % ( tool, tool )
	currentIndex = eval(getCmd)
	
	indexList = sorted(validIndexes[tool])
	nextIndex = 0	
	for i, index in enumerate( indexList ) :				
		if( index == currentIndex ) :			
			nextIndex = indexList[ (i+1) % len(indexList) ]
			break
		elif( index > currentIndex ) :
			nextIndex = index
			break
	
	setCmd = "pm.manip%sContext( '%s', e=True, mode=%s )" % ( tool, tool, nextIndex )
	eval(setCmd)
	pm.displayInfo( '%s Tool : %s' % ( tool, nextIndex ) )
def call_fun(name, base_joint, dense_chain_val, dense_divisions, curve_opn,
             curve_name, simplify_curve, spans_num, stretch, scale_connect,
             num_ctrl_jnt, glbl_scl_chk, glbl_scl_attr):

    #print name, "\n", base_joint, "\n", dense_chain_val, "\n", dense_divisions
    #print curve_opn, "\n", curve_name,  "\n", simplify_curve
    #print spans_num, "\n", stretch, "\n", scale_connect
    #print ctrl_jnt_flag, "\n", num_ctrl_jnt

    if name == "" or base_joint == "":
        pm.displayInfo("ik name and/or joint name input missing")
        return None

    default = 1
    if spans_num < 1:
        spans_num = default
        print "Spans set to 1"
        pm.displayInfo("Spans set to 1")
    if dense_divisions < 1:
        dense_divisions = default
        print "divisions set to 1"
        pm.displayInfo("divisions set to 1")

    if num_ctrl_jnt < 0:
        num_ctrl_jnt = 0

    curve_flag = True
    if curve_opn == "UseCurve":
        curve_flag = False

    if not curve_flag:
        if curve_name == "":
            pm.displayInfo("please enter the curve name to be used")
            return None

    import IK_Spline
    #reload(IK_Spline)

    IK_Spline.setup_ik_spline(ik_name=name,
                              joint_chain=base_joint,
                              dense_chain=dense_chain_val,
                              dense_chain_divisions=dense_divisions,
                              auto_curve=curve_flag,
                              use_curve=curve_name,
                              auto_simplify_curve=simplify_curve,
                              number_of_spans=spans_num,
                              stretch_exp=stretch,
                              scale_stretch=scale_connect,
                              num_control_joints=num_ctrl_jnt,
                              global_scale_check=glbl_scl_chk,
                              global_scale_attr=glbl_scl_attr)

    return None
Example #10
0
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)

    pm.select(joint_chain, hierarchy=True)
    joint_chain = pm.ls(selection=True)
    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)
        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.scaleConstraint(rep_chain[index], joint_chain[index], maintainOffset=False)
            pm.connectAttr(
                str(rep_chain[index]) + ".scale",
                str(joint_chain[index]) + ".scale")
        pm.select(start_jnt, hierarchy=True)
        new_chain = pm.ls(selection=True)

    crv = ""

    #print "START", start_jnt
    #print "END",end_joint

    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 stretch_exp:
        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")
        else:
            stretch_expression(joints = joint_chain, curve_info_node = crv_info_node, connect_scale = scale_stretch,
                               expression_name = ik_name+"_stretch_expression")
    '''

    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="control_joints")
            #print "JNT NAME", ctr_jnt_gp

    if stretch_exp:
        pm.addAttr(ctrl_jnts[-1],
                   longName="Stretch",
                   attributeType="enum",
                   enumName="off:on",
                   keyable=True)
        print "ATTRIBUTE TO", str(ctrl_jnts[-1])
        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)
        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)

    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)

    return None
Example #11
0
import pymel.all as pm

def delayed_setup() :
	import th_panel	
	th_panel.ui.create()

pm.displayInfo("------ userSetup.py -------")


# pm.mayautils.executeDeferred( delayed_setup )