Maya自定义推/松弛脚本

2024-06-09 16:24:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个自定义脚本,复制/模仿Maya雕刻几何体工具。基本上我有两个单选按钮,Push and Relax[这显然模仿了雕刻参数中的Push和Relax],一个值滑块[复制最大位移滑块]。收音机和复位按钮工作完美,但我有问题与编码滑块。有什么帮助吗?提前谢谢。在

请参阅图片以进一步澄清。 Click here for image

这是我的代码:

import maya.cmds as cmds
import maya.mel as mel


if cmds.window("cusWin", exists = True):
    cmds.deleteUI("cusWin")



customwindow = cmds.window("cusWin",t= "Push/Relax", wh = (200, 117), s= False, mnb= False, mxb= False)
cmds.frameLayout( label='Push/Relax Modifier', borderStyle='in', cll= False)
cmds.columnLayout(adj = True, columnOffset= ("both", 3))


cmds.radioCollection()
cmds.radioButton(l = "Push", onc= "mel.eval('artUpdatePuttyOperation artPuttyCtx push ;')")
cmds.radioButton(l = "Relax", onc= "mel.eval('artUpdatePuttyOperation artPuttyCtx relax ;')")

cmds.separator(style= "none", h= 3)

DynFsgCol1 = 30
DynFsgCol2 = 50
DynFsgCol3 = 100

valSlider = cmds.floatSliderGrp(l = "Value", field = True, min = 0, max= 5, precision = 4, cw3= (DynFsgCol1, DynFsgCol2, DynFsgCol3 ))
cmds.separator(style= "none", h= 3)

cmds.rowColumnLayout(numberOfColumns=2, columnWidth=[(1,98),(2,100)], columnOffset=[(1,'left',1),(2,'right',95)])
cmds.button(l = "Apply", w= 92, c= 'slider()')
cmds.button(l = "Reset", w= 91, c= 'resetButton()')

cmds.showWindow( customwindow )


def slider():
    valueSlider = cmds.floatSliderGrp(valSlider, q= True, value= True)
    mel.eval('artPuttyCtx -e -maxdisp valueSlider `currentCtx`;')

def resetButton():
    mel.eval('resetTool artPuttyContext;')

Tags: importfalsetrueaseval按钮push滑块
1条回答
网友
1楼 · 发布于 2024-06-09 16:24:59

这里发生了两件事。在

首先,通过使用回调的字符串形式,您将失去对函数范围的控制。最好直接传递python对象。此版本使用回调实现了您的目标: 进口玛雅.cmds作为指挥官 进口玛雅.mel作为mel

if cmds.window("cusWin", exists = True):
    cmds.deleteUI("cusWin")



customwindow = cmds.window("cusWin",t= "Push/Relax", wh = (200, 117), s= False, mnb= False, mxb= False)
cmds.frameLayout( label='Push/Relax Modifier', cll= False)
cmds.columnLayout(adj = True, columnOffset= ("both", 3))


cmds.radioCollection()
push = lambda _: cmds.artPuttyCtx(cmds.currentCtx(), e = True,  mtm='push')
relax = lambda _: cmds.artPuttyCtx(cmds.currentCtx(), e = True, mtm='relax')



cmds.radioButton(l = "Push", onc= push)
cmds.radioButton(l = "Relax", onc=relax)

cmds.separator(style= "none", h= 3)

DynFsgCol1 = 30
DynFsgCol2 = 50
DynFsgCol3 = 100

valSlider = cmds.floatSliderGrp(l = "Value", field = True, min = 0, max= 5, precision = 4, cw3= (DynFsgCol1, DynFsgCol2, DynFsgCol3 ))
cmds.separator(style= "none", h= 3)
cmds.rowColumnLayout(numberOfColumns=2, columnWidth=[(1,98),(2,100)], columnOffset=[(1,'left',1),(2,'right',95)])

# put the defs here, where the names of the slider are known
def slider(*_):
    valueSlider = cmds.floatSliderGrp(valSlider, q = True, value = True)
    cmds.artPuttyCtx(cmds.currentCtx(), e = True,  maxdisp = valueSlider)

def resetButton(*_):
    cmds.resetTool(cmds.currentCtx())

cmds.button(l = "Apply", w= 92, c= slider)
cmds.button(l = "Reset", w= 91, c= resetButton)

cmds.showWindow( customwindow )

需要注意的是,定义事物的顺序允许您引用所生成控件的名称。(顺便说一句,您需要处理Maya在按钮和滑块回调中传递的无意义参数)。清理悬空的Mel脚本也是一个好主意,如果你想让这个工具在将来变得更复杂,如果你必须同时使用两种语言,那就更难了。在本例中,artUpdatePuttyOperation看起来像是在雕刻工具UI打开时定义的,所以如果您在没有UI的情况下运行这个脚本,我认为它无法正常工作。在

第二个问题是您没有使用setTool显式地设置artPuttyCtx,因此除非用户已经创建了正确的上下文并将其激活,否则这将无法工作。在

相关问题 更多 >