def getObj(*args):
#get selection and put it in the widgets["objTFG"]
clearList()
sel = cmds.ls(sl=True, type="transform")
if (sel and (len(sel)==1)):
cmds.textFieldGrp(widgets["objTFG"], e=True, tx=sel[0])
else:
cmds.warning("you must select one object with the \"follow\" attribute")
#------------maybe add attr onto end of obj text, then you don't have to get it later if you needed to ???
#now create a button for each value in the "follow" attr
#channels = cmds.channelBox ('mainChannelBox', query=True, selectedMainAttributes=True)
enumValueStr = cmds.attributeQuery("follow", node=sel[0], listEnum=True)[0]
values = enumValueStr.split(":")
for i in range(0,len(values)):
#pick a random color?
r = random.uniform(0.5,1)
g = random.uniform(0.5,1)
b = random.uniform(0.5,1)
color = (r, g, b)
#here create the button
cmds.button(l=values[i], w=125, p=widgets["bottomRCLO"], bgc=color, h=50, c=partial(switchMatchSpace, i))
python类ls()的实例源码
def huddleExec(*args):
"""
from first selection, moves the next selected objects closer or farther from first selection based on slider values (as a percentage)
"""
factor = cmds.floatSliderGrp(widgets["slider"], q=True, v=True)
sel = cmds.ls(sl=True, type="transform")
center = sel[0]
objs = sel[1:]
centerPos = cmds.xform(center, q=True, ws=True, rp=True)
centerVec = om.MVector(centerPos[0], centerPos[1], centerPos[2])
for obj in objs:
objPos = cmds.xform(obj, ws=True, q=True, rp=True)
objVec = om.MVector(objPos[0], objPos[1], objPos[2])
diffVec = objVec-centerVec
scaledVec = diffVec * factor
newVec = scaledVec + centerVec
cmds.xform(obj, ws=True, t=(newVec[0], newVec[1], newVec[2]))
def move_pivot(end, *args):
"""
Args:
end (int): parameter value (0 or 1 from buttons) the point on curve will return, start or end
*args:
"""
check = False
sel = cmds.ls(sl=True, exactType = "transform")
if sel:
for x in sel:
check = rig.isType(x, "nurbsCurve")
if check:
# get curve info
pos = cmds.pointOnCurve(x, parameter = end, position = True)
cmds.xform(x, ws=True, piv=pos)
else:
cmds.warning("{0} is not a nurbsCurve object. Skipping!".format(x))
def reparameter(*args):
"""
reparameterizes curves to be from 0-1
Args:
Returns:
"""
sel = cmds.ls(sl=True, exactType = "transform")
check = False
newCrvs = []
if sel:
for x in sel:
check = rig.isType(x, "nurbsCurve")
if check:
crv = x
newCrv = cmds.rebuildCurve(crv, constructionHistory=False, rebuildType = 0, keepControlPoints=True, keepRange = 0, replaceOriginal=True, name = "{0}_RB".format(crv))[0]
# reconnect parents and children of orig curve
else:
cmds.warning("{0} is not a nurbsCurve object. Skipping!".format(x))
cmds.select(sel, r=True)
def getNormalizedTangent(pt = ""):
"""
gets normalized tan of selected (or given) list of cvs
"""
if cmds.objectType(pt) != "nurbsCurve":
return
crv = pt.partition(".")[0]
print pt, crv
cvs = cmds.ls("{0}.cv[*]".format(crv), fl=True)
denom = len(cvs)
num = float(pt.partition("[")[2].rpartition("]")[0])
pr = num/denom
tan = cmds.pointOnCurve(crv, pr=pr, nt=True)
return(tan)
def align_along_curve(*args):
"""
aligns and objet along a curve at given param
Args:
*args:
Returns:
void
"""
sel = cmds.ls(sl=True, type="transform")
if len(sel) != 2:
cmds.warning("You need to select curve then object to align!")
return()
crv = sel[0]
obj = sel[1]
if not rig.isType(crv, "nurbsCurve"):
cmds.warning("select curve first, THEN object")
return()
param = cmds.floatFieldGrp(widgets["alExFFG"], q=True, v1=True)
rig.align_to_curve(crv, obj, param)
def randRemovePercent(keepNum, *args):
"""gives each object the percentage chance to be removed. So will remove a variable number of objs"""
sel = cmds.ls(sl=True, fl=True)
remNum = (100.0 - keepNum)/100.00
#print remNum, "remove percent"
count = 0
ch = []
if sel:
for obj in sel:
x = random.uniform(0,1)
if x < (remNum):
# print x, "--->", remNum
ch.append(obj)
count = count + 1
newSel = [g for g in sel if g not in ch]
cmds.select(newSel, r=True)
print count, "objects removed"
#print len(sel), "objects remaining"
def insertGroupAbove(*args):
sel = cmds.ls(sl=True)
for obj in sel:
par = cmds.listRelatives(obj, p=True)
grp = cmds.group(em=True, n="{}_Grp".format(obj))
# grp = nameCheck(grp)
pos = cmds.xform(obj, q=True, ws=True, rp=True)
rot = cmds.xform(obj, q=True, ws=True, ro=True)
cmds.xform(grp, ws=True, t=pos)
cmds.xform(grp, ws=True, ro=rot)
cmds.parent(obj, grp)
if par:
cmds.parent(grp, par[0])
def freezeAndConnect(*args):
sel = cmds.ls(sl=True)
ctrlOrig = sel[0]
for x in range(1, len(sel)):
obj = sel[x]
ctrl = cmds.duplicate(ctrlOrig, n = "{}Ctrl".format(obj))[0]
pos = cmds.xform(obj, ws=True, q=True, rp=True)
rot = cmds.xform(obj, ws=True, q=True, ro=True)
grp = cmds.group(em=True, n="{}Grp".format(ctrl))
cmds.parent(ctrl, grp)
cmds.xform(grp, ws=True, t=pos)
cmds.xform(grp, ws=True, ro=rot)
cmds.parentConstraint(ctrl, obj)
def selectComponents(*args):
sel = cmds.ls(sl=True)
if sel:
for obj in sel:
shape = cmds.listRelatives(obj, s=True)[0]
if cmds.objectType(shape) == "nurbsCurve":
cmds.select(cmds.ls("{}.cv[*]".format(obj), fl=True))
elif cmds.objectType(shape) == "mesh":
cmds.select(cmds.ls("{}.vtx[*]".format(obj), fl=True))
else:
return
def fileLoad(*args):
sel = cmds.ls(sl=True)
origTexture = sel[0]
ctrls = sel[1:]
# get path
path = cmds.getAttr("{0}.fileTextureName".format(origTexture))
if not path:
cmds.warning("No file present in {0}. Cancelling!".format(origTexture))
return
for ctrl in ctrls:
ctrlFile = cmds.connectionInfo("{0}.fileTexture".format(ctrl), sfd=True).partition(".")[0]
# add path to ctrl file
cmds.setAttr("{0}.fileTextureName".format(ctrlFile), path, type="string")
def capReplace(*args):
sel = cmds.ls(sl=True, type="transform")
if sel < 2:
cmds.warning("You don't have two things selected (cap and one ctrl minimum)!")
return
newCap = sel[0]
ctrls = sel[1:]
for ctrl in ctrls:
oldCap = cmds.connectionInfo("{0}.capRig".format(ctrl), sfd=True).partition(".")[0]
dupe = rig.swapDupe(newCap, oldCap, delete=True, name=oldCap)
cmds.connectAttr("{0}.rotateCap".format(ctrl), "{0}.rotateY".format(dupe))
cmds.connectAttr("{0}.message".format(dupe), "{0}.capRig".format(ctrl))
cmds.setAttr("{0}.v".format(dupe), 1)
# if not already, parent cap replace obj in folder and hide
par = cmds.listRelatives(newCap, p=True)
if not par or par[0] != "pastaRigSetupComponents_Grp":
cmds.parent(newCap, "pastaRigSetupComponents_Grp")
cmds.setAttr("{0}.v".format(newCap), 0)
cmds.select(ctrls, r=True)
def addBaseCap(*args):
sel = cmds.ls(sl=True, type="transform")
if sel < 2:
cmds.warning("You don't have two things selected (cap and one ctrl minimum)!")
return
newCap = sel[0]
ctrls = sel[1:]
for ctrl in ctrls:
tempCap = cmds.connectionInfo("{0}.tempBaseCap".format(ctrl), sfd=True).partition(".")[0]
dupe = rig.swapDupe(newCap, tempCap, delete=True, name="{0}_baseCap".format(ctrl))
cmds.setAttr("{0}.v".format(dupe), 1)
cmds.connectAttr("{0}.rotateBaseCap".format(ctrl), "{0}.rotateY".format(dupe))
cmds.connectAttr("{0}.message".format(dupe), "{0}.tempBaseCap".format(ctrl))
# if not already, parent cap replace obj in folder and hide
par = cmds.listRelatives(newCap, p=True)
if not par or par[0] != "pastaRigSetupComponents_Grp":
cmds.parent(newCap, "pastaRigSetupComponents_Grp")
cmds.setAttr("{0}.v".format(newCap), 0)
cmds.select(ctrls, r=True)
def addGroupAbove(obj="none", suff="none", *args):
"""name of existing obj, new group suffix. New group will be oriented to the object BELOW it"""
#FIX THE OBJ, SUFIX TO BE EITHER SELECTED OR ENTERED
sel = cmds.ls(sl=True, type = "transform")
for obj in sel:
suff = "_new"
name = obj + suff + "_GRP"
#get worldspace location of existing obj
loc = cmds.xform(obj, q=True, ws=True, rp=True)
#create new group, name it, move it to new postion in ws and Orient it
grp = cmds.group(empty=True, name=name)
cmds.move(loc[0], loc[1], loc[2], grp, ws=True)
oc = cmds.orientConstraint(obj, grp)
cmds.delete(oc)
#check if there's a parent to the old group
par = cmds.listRelatives(obj, p=True)
print(par)
if par:
cmds.parent(grp, par)
cmds.parent(obj, grp)
def getValues(*args):
try:
obj = cmds.ls(sl=True, transforms = True)[0]
#currentFrame = cmds.currentTime(q = True)
step = cmds.intFieldGrp(widgets['stepIFG'], q = True, v1 = True)
frmVal = cmds.radioButtonGrp(widgets["frmRBG"], q=True, sl=True)
suffix = cmds.textFieldGrp(widgets["sufTFG"], q = True, tx = True)
name = "%s_%s"%(obj, suffix)
if frmVal == 1:
frameStart = int(cmds.playbackOptions(query=True, min=True))
frameEnd = int(cmds.playbackOptions(query=True, max=True))
else:
frameStart = cmds.intFieldGrp(widgets["frmRngIFG"], q = True, v1 = True)
frameEnd = cmds.intFieldGrp(widgets["frmRngIFG"], q = True, v2 = True)
makeSequence(obj, name, frameStart, frameEnd, step)
except:
cmds.warning("Select one object with a transform")
def import_animation(*args):
"""imports the anim (from rand selection of list items) onto selected objs"""
lo, hi = cmds.intFieldGrp(widgets["rangeIFG"], q=True, v=True)
rand = cmds.radioButtonGrp(widgets["randRBG"], q=True, sl=True)
clips = cmds.textScrollList(widgets["animTSL"], q=True, si=True)
path = cmds.textFieldButtonGrp(widgets["impPathTFG"], q=True, tx=True)
options = {"targetTime":3, "time": 1, "option":"insert", "connect":1}
delKeys = cmds.checkBoxGrp(widgets["delCBG"], q=True, v1=True)
sel = cmds.ls(sl=True)
for obj in sel:
startF = cmds.currentTime(q=True)
if rand == 1:
startF = random.randint(lo, hi)
cmds.currentTime(startF)
if delKeys:
delete_later_keys(obj, startF)
cmds.select(obj, r=True)
myClip = random.choice(clips)
animPath = "{0}/{1}".format(path, myClip)
cmds.file(animPath, i = True, type = "animImport", ignoreVersion = True, options = "targetTime={0};time={1};copies=1;option={2};pictures=0;connect={3};".format(options["targetTime"], startF, options["option"], options["connect"]), preserveReferences=True)
cmds.select(sel, r=True)
def setValues(*args):
"""sets the values from window on all selected objs for appropriate channels"""
sel = cmds.ls(sl=True)
attrs = cmds.checkBoxGrp(widgets["transCBG"], q=True, va3=True)
trans = attrs[0]
rots = attrs[1]
scls = attrs[2]
for obj in sel:
if cmds.objectType(obj)=="transform":
if trans:
t = cmds.floatFieldGrp(widgets["trnFFG"], q=True, v=True)
cmds.setAttr("{}.translate".format(obj), t[0], t[1], t[2])
if rots:
r = cmds.floatFieldGrp(widgets["rotFFG"], q=True, v=True)
cmds.setAttr("{}.rotate".format(obj), r[0],r[1], r[2])
if scls:
s = cmds.floatFieldGrp(widgets["sclFFG"], q=True, v=True)
cmds.setAttr("{}.scale".format(obj), s[0], s[1], s[2])
def options_pass(*args):
xfersDo, shpsDo = cmds.checkBoxGrp(widgets["shapeCBG"], q=True, valueArray2=True)
inputs, outputs = cmds.checkBoxGrp(widgets["inOutCBG"], q=True, valueArray2=True)
sel = cmds.ls(sl=True)
if len(sel) != 2:
cmds.warning("You don't have two things selected! (source, then target)")
return()
srcX = sel[0]
tgtX = sel[1]
if xfersDo:
transfer_connections_do(srcX, tgtX, inputs, outputs)
if shpsDo:
# options for checkbox would go here. . .
srcShp = cmds.listRelatives(srcX, s=True)[0]
tgtShp = cmds.listRelatives(tgtX, s=True)[0]
transfer_connections_do(srcShp, tgtShp, inputs, outputs)
def getObjectList(*args):
"""gets the list of object of type txt"""
objs = []
objText = getTypeText()
if objText in typeList:
objs = cmds.ls(type=objText)
else:
cmds.warning("This instance of Maya doesn't recognize that type of object: {0}!".format(objText))
return()
if objs:
#---------------- check if we're promoting shapes
#---------------- if yes, send out list to see which elements are shapes and promote them, return a new list into obj ie. objs = promoteList(objs), this will return either the same list or an ammended list
addObjectsToScrollList(objs)
else:
cmds.warning("No objects found of type: {0}".format(objText))
def selMovePatch(verts, weights, *args):
"""take a selection of verts (could be soft) and randomly move them up"""
#cutoffRaw = cmds.intSliderGrp(widgets["selvpercISG"], q=True, v=True)
#cutoff = cutoffRaw/100.0
cycles = cmds.intFieldGrp(widgets["patchiterIFG"], q= True, v1 = True)
xmin = cmds.floatFieldGrp(widgets["patchmovexFFG"], q=True, v1= True)
xmax = cmds.floatFieldGrp(widgets["patchmovexFFG"], q=True, v2= True)
ymin = cmds.floatFieldGrp(widgets["patchmoveyFFG"], q=True, v1= True)
ymax = cmds.floatFieldGrp(widgets["patchmoveyFFG"], q=True, v2= True)
zmin = cmds.floatFieldGrp(widgets["patchmovezFFG"], q=True, v1= True)
zmax = cmds.floatFieldGrp(widgets["patchmovezFFG"], q=True, v2= True)
sel = cmds.ls(sl=True)
#####HERE GET VERTS TO SELECT (WITH MULT VALUES)
for x in range(0,cycles):
#print "doing pass %s"%x
#rand = random.uniform(0, 1)
#if rand <= cutoff:
randx = random.uniform(xmin, xmax)
randy = random.uniform(ymin, ymax)
randz = random.uniform(zmin, zmax)
for y in range(0, len(verts)):
cmds.move(randx * weights[y],randy* weights[y], randz* weights[y], verts[y], verts[y], r=True)