def _create_swatch_display_port_widget(file_node, parent):
u"""swatchDisplayPort?QWidget???????????????"""
# swatchDisplayPort??????????????????window?????????
tmp = cmds.window()
cmds.columnLayout()
sw = cmds.swatchDisplayPort(h=64, w=64, sn=file_node)
ptr = om.MQtUtil.findControl(sw)
sw_widget = QtCompat.wrapInstance(long(ptr), QtWidgets.QWidget)
sw_widget.setParent(parent)
sw_widget.resize(64, 64)
cmds.deleteUI(tmp)
return sw_widget
python类window()的实例源码
def script_execute(code, source_type):
'''
maya????????????
:param code: string
:param source_type: 'mel' or 'python'
:return:
'''
window = cmds.window()
cmds.columnLayout()
cmds.cmdScrollFieldExecuter(t=code, opc=1, sln=1, exa=1, sourceType=source_type)
cmds.deleteUI(window)
# ??????????????????
def curveJntRigUI(*args):
if cmds.window("crvRigJntWin", exists=True):
cmds.deleteUI("crvRigJntWin")
w, h= 400, 300
widgets["win"] = cmds.window("crvRigJntWin", t="zbw_curveJntRig", w=w,h=h)
widgets["mainCLO"] = cmds.columnLayout()
widgets["numCtrlIFG"] = cmds.intFieldGrp(l="Number of Ctrls:", cal=[(1,"left"), (2,"left")], cw=[(1,120), (2,50)], v1=5)
widgets["nameTFG"] = cmds.textFieldGrp(l="Rig Name (i.e. lfEye):", cal=[(1,"left"), (2,"left"), (3,"left")], cw=[(1,120), (2,280), (3,30)], tx="eye")
widgets["cntrPivTFBG"] = cmds.textFieldButtonGrp(l="Center pivot object:", bl="<<<", cal=[(1,"left"), (2,"left"), (3,"left")], cw=[(1,120), (2,280), (3,30)], bc=partial(populateCrvField, "cntrPivTFBG"), cc=partial(secondFill, "center"), tx="centerLoc")
widgets["upLocTFBG"] = cmds.textFieldButtonGrp(l="Aim up object:", bl="<<<", cal=[(1,"left"), (2,"left"), (3,"left")], cw=[(1,120), (2,280), (3,30)], bc=partial(populateCrvField, "upLocTFBG"), cc=partial(secondFill, "up"), tx="upLoc")
cmds.separator(h=10)
widgets["upCrvTFBG"] = cmds.textFieldButtonGrp(l="First Curve", bl="<<<", cal=[(1,"left"), (2,"left"), (3,"left")], cw=[(1,120), (2,280), (3,30)], bc=partial(populateCrvField, "upCrvTFBG"),tx="topCrv")
widgets["upNameTFG"] = cmds.textFieldGrp(l="1st Suffix (i.e.'Top')", cal=[(1,"left"), (2,"left")], cw=[(1,120), (2,280)], tx="Top")
cmds.separator(h=10)
widgets["secondCBG"] = cmds.checkBoxGrp(l="Create Second Curve?", ncb=1, v1=0, cal=[(1,"left"), (2,"left")], cc=toggleSecond, en=True)
widgets["downCrvTFBG"] = cmds.textFieldButtonGrp(l="Second Curve", bl="<<<", cal=[(1,"left"), (2,"left"), (3,"left")], en=False, cw=[(1,120), (2,280), (3,30)], bc=partial(populateCrvField, "downCrvTFBG"), tx="downCrv")
widgets["downNameTFG"] = cmds.textFieldGrp(l="2nd Suffix (i.e. 'Dwn')", cal=[(1,"left"), (2,"left")], cw=[(1,120), (2,280)], en=False, tx="Dwn")
widgets["cntrPiv2TFBG"] = cmds.textFieldButtonGrp(l="Center pivot object:", bl="<<<", cal=[(1,"left"), (2,"left"), (3,"left")], cw=[(1,120), (2,280), (3,30)], bc=partial(populateCrvField, "cntrPivTFBG"), en=False, tx="centerLoc")
widgets["upLoc2TFBG"] = cmds.textFieldButtonGrp(l="Aim up object:", bl="<<<", cal=[(1,"left"), (2,"left"), (3,"left")], cw=[(1,120), (2,280), (3,30)], bc=partial(populateCrvField, "upLoc2TFBG"), en=False, tx="upLoc")
cmds.separator(h=10)
widgets["execBut"] = cmds.button(l="create base rig!", w=w, c=passToExecute)
widgets["cnctBut"] = cmds.button(l="connect ctrls to jnts", w=w, c=connectProxies)
widgets["closeBut"] = cmds.button(l="setup smart close", w=w, c=smartClose)
cmds.separator(h=10)
# widgets["scCBG"] = cmds.checkBoxGrp(l="Set up smart close?", ncb=1, v1=0, cal=[(1,"left"), (2,"left")], en=True)
cmds.window(widgets["win"], e=True, w=5, h=5, resizeToFitChildren=True, sizeable=True)
cmds.showWindow(widgets["win"])
def action(self, close, *args):
############ modify for inheritence #############
#do the action here
#close window
if close:
self.closeWindow()
pass
def closeWindow(self, *args):
cmds.deleteUI(self.widgets["window"])
def spaceBufferUI(*args):
if cmds.window("spaceBufferWin", exists=True):
cmds.deleteUI("spaceBufferWin")
widgets["win"] = cmds.window("spaceBufferWin", rtf=True, wh=(200, 20))
widgets["mainCLO"] = cmds.columnLayout(w=200)
widgets["jntCreateBut"] = cmds.button(l="Create Joint/Grps at Selection!", w=200, h=30, bgc=(.6, .8,.6), c=createJointFromObj)
widgets["makeBuffer"] = cmds.button(l="Create Space Buffer!", w=200, h=30, bgc=(.4, .6, .8), c=createSpaceBuffers)
cmds.window(widgets["win"], e=True, wh=(5, 5), rtf=True)
cmds.showWindow(widgets["win"])
def spaceMatchUI():
if (cmds.window("spaceMatchWin", exists=True)):
cmds.deleteUI("spaceMatchWin", window=True)
#create window
widgets["window"] = cmds.window("spaceMatchWin", title="Space Matcher", w=250, h=300)
#create top frame
widgets["topFrame"] = cmds.frameLayout(l="Object/Attr Selection", w=250, li=70, bgc=(0,0,0))
widgets["objCLO"] = cmds.columnLayout()
#create top controls
widgets["objTFG"] = cmds.textFieldGrp(l="Selected Obj", cw=([1,70],[2,175]), cal=([1,"left"], [2,"left"]), cc=clearList)
widgets["matchObjButton"] = cmds.button(l="Select Control Object", w=250, bgc=(.8,.8,.8), c = getObj)
# #or we could assume the obj has a "follow" enum attr. . . .
# widgets["attrTFG"] = cmds.textFieldGrp(l="Selected Attr", cw=([1,70],[2,175]), cal=([1,"left"], [2,"left"]), cc=clearList)
# widgets["matchObjButton"] = cmds.button(l="Select Spaces Enum Attr", w=250, bgc=(.8,.8,.8), c = getAttr)
#back to window
cmds.setParent(widgets["window"])
#create bottom frmae
widgets["bottomFrame"] = cmds.frameLayout(l="Spaces", li=100, w=250, bgc=(0,0,0))
widgets["bottomRCLO"] = cmds.rowColumnLayout(nc=2, w=250)
#get obj and put it in
sel = cmds.ls(sl=True)
if (len(sel)) == 1:
getObj()
#show window
cmds.showWindow(widgets["window"])
cmds.window(widgets["window"], e=True, w=250, h=300)
def resize_window(*args):
cmds.window(widgets["win"], e=True, rtf=True, w=100, h=100)
def extendUI(*args):
"""UI for the script"""
#UI
if cmds.window("curbWin", exists=True):
cmds.deleteUI("curbWin")
cmds.window("curbWin", t="zbw_polyExtender", w=200, h=200)
cmds.columnLayout("colLO")
cmds.frameLayout("topFrame", l="Covert Edge", cll=True, bgc=(.2,.2,.2))
cmds.text("Select poly edge to convert")
cmds.button("convertBut", l="Convert!", w=200, h=30, bgc=(.8, .8,.6), c=convertEdge)
cmds.separator(h=5)
cmds.setParent("colLO")
cmds.frameLayout("midFrame", l="Create Poly", cll=True, bgc=(.2,.2,.2))
cmds.text("Select curve")
cmds.separator(h=5)
cmds.textFieldGrp("name", l="Name", w=200, cw=[(1,30), (2,170)], tx="newPoly")
cmds.checkBox("curbCB", l="Positive Direction", v=True)
# cmds.checkBox("bumpCB", l="Add vertical hump?", v=True)
cmds.floatFieldGrp("curbFFG", l="Curb Width", cal=((1, "left"),(2,"left")), cw=([1,75],[2,50]), v1=10)
cmds.intFieldGrp("UDivIFG", l="Width Subdivisions", cal=((1, "left"),(2,"left")), cw=([1,75],[2,50]), v1=1)
cmds.intFieldGrp("VDivIFG", l="Length Subdivisions", cal=((1, "left"),(2,"left")), cw=([1,75],[2,50]), v1=1)
cmds.checkBox("polyHistory", l="Keep history on final poly?", v=False)
cmds.checkBox("history", l="Keep history objects?", v=True, cc=enableHistory)
cmds.separator(h=5)
cmds.button("curbBut", l="Create Curb", h=40, w=200, bgc=(.6, .8, .6), c=extendPoly)
cmds.showWindow("curbWin")
cmds.window("curbWin", e=True, h=150, w=200)
def doSel(*args):
"""pass values from window"""
#get value from win
keepNum = cmds.intFieldGrp(widgets["keepIFG"], q=True, v1=True)
#get type of sel to
typeNum = cmds.radioButtonGrp(widgets["typeRBG"], q=True, sl=True)
#pass info to corresponding func
if typeNum == 1:
randRemovePercent(keepNum)
if typeNum == 2:
preciseRemovePercent(keepNum)
def zbw_offsetAnim(*args):
"""creates offset from first obj sel to last based on the entered offset value"""
def zbw_runOffsetAnim(*args):
#get frame range!!!!!!
#get selection, check that they are tranforms
sel = cmds.ls(sl=True,type="transform")
selSize = int(len(sel))
#for each selection mult the index by the offset value
for i in range(0,selSize):
obj = sel[i]
offsetRaw = cmds.intFieldGrp('zbw_offsetValue', q=True, v=True)
offset = offsetRaw[0]
multFactor = i * offset
#shift the entire anim curve by the offset mult value
cmds.keyframe(obj, edit=True,relative=True,timeChange=multFactor,time=(1,24))
#create UI, get offset value, frame range or all anim
if (cmds.window('zbw_offsetAnimUI', exists=True)):
cmds.deleteUI('zbw_offsetAnimUI', window=True)
cmds.windowPref('zbw_offsetAnimUI', remove=True)
window=cmds.window('zbw_offsetAnimUI', widthHeight=(350,200), title='zbw_offsetAnim')
cmds.columnLayout(cal='center')
cmds.intFieldGrp('zbw_offsetValue', cal=(1,'left'), label='frequency(frames)', value1=5)
#CREATE FRAME RANGE AREA (WHICH FRAMES ARE WE DOING?)
#WHEN THAT HAPPENS, WHAT DO WE DO WITH THE FRAMES AFTER THAT? (PROBABLY NOTHING. . . LET USER WORRY ABOUT IT)
#checkbox for random freq (to give a random amount to offset each object)
#cmds.checkBoxGrp('zbw_animNoiseRandom', cal=(1,'left'), cw=(1, 175),label='random frequency on', value1=0, cc=zbw_animNoiseRandom)
cmds.button('zbw_offsetAnimGo', label='offset!', width=75, command=zbw_runOffsetAnim)
cmds.showWindow(window)
#clean up keys
def resizeWindow(*args):
cmds.window(widgets["win"], e=True, rtf=True, w=100, h=100)
def calculatePts(crv, *args):
"""
uses the window to get the number of pts that should be in the curve
"""
cLen = cmds.arclen(crv, ch=False)
perUnit = cmds.intFieldGrp(widgets["recoIFBG"], q=True, v1=True)
total = cLen * perUnit
return total
def rebuildCurve(curve, *args):
"""
rebuilds selected curves to specs in window
"""
num = calculatePts(curve)
newCrv = cmds.rebuildCurve(curve, rebuildType=0, ch=1, spans=num, keepRange=0, replaceOriginal=0,
name="{0}_RB".format(curve))
cmds.setAttr("{0}.v".format(curve), 0)
return newCrv
def zbw_mmChangeConnectAttr(base, attr, obj, *args):
#get that from the text field
newAttr = cmds.textFieldGrp("zbw_mmChangeAttrTFG", q=True, tx=True)
#delete old attr
cmds.deleteAttr(attr)
#create new attr
cmds.addAttr(base, at="message", ln=newAttr)
#create connection to obj in new attr
cmds.connectAttr((obj+".message"), (base+"."+newAttr), f=True)
#when you delete, then run the whole proc again afterwards (to clean up the nums)
cmds.deleteUI('zbw_mmChangeAttrUI', window=True)
cmds.windowPref('zbw_mmChangeAttrUI', remove=True)
cmds.deleteUI("mmRCListLayout")
zbw_mmListCurrentMessages("mmListMessages")
def zbw_mmChangeConnectObj(base, attr, obj, *args):
#get that from the text field
newObj = cmds.textFieldGrp("zbw_mmChangeObjTFBG", q=True, tx=True)
#create connection to obj in new attr
cmds.connectAttr((newObj+".message"), attr, f=True)
#delete this window, delete mmRCListLayout and call the list again
cmds.deleteUI('zbw_mmChangeObjUI', window=True)
cmds.windowPref('zbw_mmChangeObjUI', remove=True)
cmds.deleteUI("mmRCListLayout")
zbw_mmListCurrentMessages("mmListMessages")
def import_anim_UI():
width = 400
if cmds.window("impAnimWin", exists=True):
cmds.deleteUI("impAnimWin")
widgets["win"] = cmds.window("impAnimWin", t="Import anim files", w=width, h=400, rtf=True)
# widgets["clo"] = cmds.columnLayout()
widgets["mainTLO"] = cmds.tabLayout()
widgets["impCLO"] = cmds.columnLayout("Import Anim")
cmds.text("1. choose the folder where your anim clips live,\n2. select the objs in scene to apply to\n3. 'random' will start anim in frame range\n4. select anim clips from list to randomly apply to objs\n5. press button to apply",al="left")
cmds.separator(h=10)
widgets["impPathTFG"] = cmds.textFieldButtonGrp(l="Anim Path:", bl="<<<", cal = ([1, "left"], [2, "left"], [3, "right"]), cw=([1, 75], [2, 275], [3, 40]), bc=partial(get_path, "import", "impPathTFG"), cc=populate_tsl)
widgets["randRBG"] = cmds.radioButtonGrp(l="Insert Placement:", nrb=2, l1="Random Start", l2="At current Frame", sl=1, cal=([1, "left"], [2,"left"], [3,"left"]), cw=([1,100], [2, 100], [3, 100]), cc=partial(toggle_enable, "randRBG", "rangeIFG"))
widgets["rangeIFG"] = cmds.intFieldGrp(l="Random Start Range:", nf=2, v1=0, v2=100, cw=([1, 120], [2, 50], [3, 50]), cal=([1, "left"], [2, "left"], [3, "left"]))
widgets["delCBG"] = cmds.checkBoxGrp(l="Delete subsequent keys?", v1=True, cal=([1, "left"], [2, "left"]), cw=([1, 130], [2, 20]))
cmds.separator(h=10)
widgets["animTSL"] = cmds.textScrollList(w=400, h=150, allowMultiSelection=True)
cmds.separator(h=10)
widgets["importBut"] = cmds.button(l="Import random anim from selection", h=40, w=width, bgc=(.5, .8, .5), c=import_animation)
cmds.setParent(widgets["mainTLO"])
widgets["expCLO"] = cmds.columnLayout("Export Anim")
cmds.text("1. Select the obj 2. choose a path and name the anim\n3. choose range and hierarchy 4. press button!", al="left")
cmds.separator(h=10)
widgets["expPathTFG"] = cmds.textFieldButtonGrp(l="Export Path:", bl="<<<", cal = ([1, "left"], [2, "left"], [3, "right"]), cw=([1, 75], [2, 275], [3, 40]), bc=partial(get_path, "export", "expPathTFG"))
widgets["nameTFG"] = cmds.textFieldGrp(l="Animation Name:", cw=([1, 100], [2, 250]), cal=([1, "left"], [2, "left"]))
widgets["selRBG"] = cmds.radioButtonGrp(l="Hierarchy:", nrb=2, l1="Selection Only", l2="Below", sl=2, cal=([1, "left"], [2,"left"], [3,"left"]), cw=([1,75], [2, 100], [3, 100]))
widgets["expRngRBG"] = cmds.radioButtonGrp(l="Time Range:", nrb=2, l1="Start_End", l2="All", sl=2, cal=([1, "left"], [2,"left"], [3,"left"]), cw=([1,75], [2, 100], [3, 100]), cc=partial(toggle_enable, "expRngRBG", "expRngIFG"))
widgets["expRngIFG"] = cmds.intFieldGrp(nf=2, en=False, l="Start_End", v1=1, v2=10, cal=([1, "left"], [2,"left"], [3,"left"]), cw=([1,75], [2, 100], [3, 100]))
cmds.separator(h=10)
widgets["exportBut"] = cmds.button(l="Export anim from selection", h=40, w=width, bgc=(.5, .8, .5), c=export_animation)
cmds.window(widgets["win"], e=True, w=5, h=5, rtf=True)
cmds.showWindow(widgets["win"])
def wireRigUI (*args):
if cmds.window("wireRigWin", exists = True):
cmds.deleteUI("wireRigWin")
widgets["win"] = cmds.window("wireRigWin", t="zbw_wireRig", w=300, h=250)
widgets["mainCLO"] = cmds.columnLayout()
widgets["topFLO"] = cmds.frameLayout(l="Convert Poly Edges",cll=True, cl=True)
widgets["topCLO"] = cmds.columnLayout()
widgets["convertBut"] = cmds.button(l="convert selected poly edge to curve", w=300, bgc = (.8,.8,0), c=convertEdge)
cmds.separator(h=20, style="single")
widgets["reverseBut"] = cmds.button(l="reverse direction of selected curve", w=300, bgc = (.8,.5,0), c=reverseCrv)
cmds.setParent(widgets["mainCLO"])
widgets["botFLO"] = cmds.frameLayout(l="Create Wire Rig", cll=True)
widgets["botCLO"] = cmds.columnLayout()
widgets["numCtrlIFG"] = cmds.intFieldGrp(l="Number of Ctrls:", v1=5, cal=[(1, "left"), (2, "left")], cw=[(1, 150),(3, 75)])
widgets["hierCBG"] = cmds.checkBoxGrp(ncb=1, l1 = "Put Ctrls in hierarchy?", v1=True, en=True)
widgets["nameTFG"] = cmds.textFieldGrp(l="Wire Rig Name:", w=300, tx="wireCtrl1", cal=[(1, "left")])
widgets["scaleFFG"] = cmds.floatFieldGrp(l="Control scale:", v1=1.0, cal=[(1, "left"), (2, "left")], cw=[(1, 150),(3, 75)])
cmds.separator(h=30, style="single")
widgets["textText"] = cmds.text("Select geo, then curve, then button below", al="center")
widgets["rigBut"] = cmds.button(l="Create Wire Rig", w= 300, h=40, bgc= (0, .5, 0), c=createWireDef)
cmds.showWindow(widgets["win"])
#option to pull curve from edges
def transformBufferUI(*args):
if cmds.window("tbWin", exists=True):
cmds.deleteUI("tbWin")
widgets["win"] = cmds.window("tbWin", t="zbw_tranformBuffer", s=False, w=200)
widgets["mainCLO"] = cmds.columnLayout(w=200)
######## ------ checkbox to enable/disable these. . . .
widgets["trnFFG"] = cmds.floatFieldGrp(l="Trns: ", nf=3, cw=[(1, 40), (2, 50), (3, 50), (4,50)], cal = [(1, "left"), (2, "left"), (3, "left"), (4,"left")])
widgets["rotFFG"] = cmds.floatFieldGrp(l="Rot: ", nf=3, cw=[(1, 40), (2, 50), (3, 50), (4,50)], cal = [(1, "left"), (2, "left"), (3, "left"), (4,"left")])
widgets["sclFFG"] = cmds.floatFieldGrp(l="Scl: ", nf=3, cw=[(1,40), (2, 50), (3, 50), (4,50)],cal = [(1, "left"), (2, "left"), (3, "left"), (4,"left")])
cmds.separator(h=10)
widgets["transCBG"] = cmds.checkBoxGrp(ncb=3, la3 = ("Trns", "Rot", "Scl"), va3=(1, 1, 1), cal=[(1, "left"), (2, "left"), (3, "left")], cw = [(1, 50), (2, 50), (3, 50)])
cmds.separator(h=10)
widgets["butFLO"] = cmds.formLayout(w=200, h=50)
widgets["getBut"] = cmds.button(l="Catch\nValues", bgc = (.8, .5, .5), h=50, w=100, c=getValues)
widgets["setBut"] = cmds.button(l="Set\nValues", bgc = (.5, .8,.5), h=50, w=100, c=setValues)
cmds.formLayout(widgets["butFLO"], e=True, af = [
(widgets["getBut"], "top", 0),
(widgets["getBut"], "left", 0),
(widgets["setBut"], "top", 0),
(widgets["setBut"], "left", 100)
])
cmds.window(widgets["win"], e=True, w=200, h=100)
cmds.showWindow(widgets["win"])
def audioUI():
"""UI for the whole thing"""
if (cmds.window("audioWin", exists=True)):
cmds.deleteUI("audioWin")
widgets["win"] = cmds.window("audioWin", t="zbw_audioManager", w=300, h=260)
widgets["mainCLO"] = cmds.columnLayout()
widgets["getAudioBut"] = cmds.button(l="Get All Audio In Scene", w=300, h=30, bgc=(.6, .6, .8), c=getAudio)
cmds.text("Double-click item in list to enable sound and select it", al="left")
widgets["audioTSL"] = cmds.textScrollList(h=100, w=300, dcc=selectAudio)
widgets["buttonRCLO"] = cmds.rowColumnLayout(nc=2)
widgets["deleteSelBut"] = cmds.button(l="Delete Selected", w=150, h=20, bgc=(.8,.6,.6), c=deleteSelected)
widgets["deleteAllBut"] = cmds.button(l="Delete All Audio", w=150, h=20, bgc=(.8,.4,.4), c=deleteAll)
cmds.setParent(widgets["mainCLO"])
cmds.separator(h=20)
widgets["newAudioBut"] = cmds.button(l="Import New Audio File!", w=300, h=30, bgc=(.6,.8,.6), c=importAudio)
cmds.separator(h=20)
widgets["offsetRCLO"] = cmds.rowColumnLayout(nc=2, cw=([1,175], [2, 125]), cal=([1,"left"], [2,"left"]))
widgets["offsetIFG"] = cmds.intFieldGrp(l="Offset Selected By ", v1=1, cal=([1,"left"], [2,"left"]), cw=([1,100],[2,50]))
widgets["offsetBut"] = cmds.button(l="Offset!", w=100, h=30, bgc=(.6,.8,.8), c=offsetAudio)
cmds.showWindow(widgets["win"])
cmds.window(widgets["win"], e=True, w=300, h=260)