尝试转换Maya中选择网格所有硬边的简单工具。基本上,我正在尝试将此Mel脚本转换为Python,并为其提供一个UI,以便对Maya的Python脚本进行一点练习。我遇到了一个问题,我正在将一个函数输入到UI按钮中,但当我运行代码时,它会返回:
Error: TypeError: file line 18: Invalid arguments for flag 'c'. Expected string or function, got NoneType #
代码如下:
import pymel.core as pm
def createWindow():
title = 'Hard Edge Selection'
if cmds.window(title, exists=True):
cmds.deleteUI(title, window=True)
else:
cmds.window(t = title)
cmds.rowColumnLayout(nc=2)
lowAngle = cmds.intSliderGrp( field=True, label='Low Angle', minValue=0, maxValue=30, value=30 )
highAngle = cmds.intSliderGrp( field=True, label='High Angle', minValue=90, maxValue=150, value=150 )
lowAngleSel = cmds.intSliderGrp( lowAngle, q=True, value=True)
highAngleSel = cmds.intSliderGrp( highAngle, q=True, value=True)
#_findEdges = findEdges("{0},{1}").format(lowAngleSel, highAngleSel)
cmds.button(l='Find Edges', c=findEdges(lowAngleSel, highAngleSel))
cmds.showWindow()
cmds.selectMode(o=True)
def findEdges(x, y):
currentSelection = cmds.ls(sl=True)
pm.mel.doMenuComponentSelectionExt(currentSelection[0], "edge", 0)
#edgecount = pm.polyEvaluate(currentSelection[0], e=1)
#pm.select(currentSelection[0] + ".e [0:" + str((edgecount[0] - 1)) + "]")
#Constrain that selection to only edges of a certain Angle
pm.polySelectConstraint(a=True, ab=(x, y), m=3, t=0x8000)
#Remove the selection constraint so everything back to normal
pm.polySelectConstraint(m=0)
print ("Hard edges between " + str(x) + " and " + str(y) + " degrees have been selected")
createWindow()
您的问题在于这一行:
findEdges(...)
返回None
,然后尝试将其绑定到按钮的命令回调您需要做的是将回调绑定到实际函数,如下所示:
然而,这就提出了如何发送函数参数的问题。就个人而言,我建议为此使用一个类并将滑块组存储在类实例上,但是如果您想沿着当前路径继续,您应该查看
lambda
和partial
实现PS:我相信按钮回调会将按钮名称作为参数发送到回调函数,您需要捕获(可能会忽略)该函数:
PPS:我不完全确定上面的
lambda
参数的范围,可能是它们在回调时未定义。在这种情况下,您可以回到partial
(它充当工厂,而不是匿名方法)有关Maya按钮回调的详细信息:https://riptutorial.com/maya/example/25096/callback-functions
相关问题 更多 >
编程相关推荐