我正在尝试制作一个自定义脚本,复制/模仿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;')
这里发生了两件事。在
首先,通过使用回调的字符串形式,您将失去对函数范围的控制。最好直接传递python对象。此版本使用回调实现了您的目标: 进口玛雅.cmds作为指挥官 进口玛雅.mel作为mel
需要注意的是,定义事物的顺序允许您引用所生成控件的名称。(顺便说一句,您需要处理Maya在按钮和滑块回调中传递的无意义参数)。清理悬空的Mel脚本也是一个好主意,如果你想让这个工具在将来变得更复杂,如果你必须同时使用两种语言,那就更难了。在本例中,
artUpdatePuttyOperation
看起来像是在雕刻工具UI打开时定义的,所以如果您在没有UI的情况下运行这个脚本,我认为它无法正常工作。在第二个问题是您没有使用
setTool
显式地设置artPuttyCtx
,因此除非用户已经创建了正确的上下文并将其激活,否则这将无法工作。在相关问题 更多 >
编程相关推荐