将 setAttr 与通道框选择一起使用的正确方法
Proper way to use setAttr with channel box selection
请耐心等待 - 我是新手。我尝试了搜索,但只找到了我要查找的内容的点点滴滴,但没有找到连接它们所需的内容。
基本上,我正在尝试创建一个 Python 脚本,允许用户简单地将 Maya 通道框上的多个选定属性“0”化。
到目前为止我有:
import maya.cmds as cmds
selObjs = cmds.ls(sl=1)
selAttrs = cmds.channelBox("mainChannelBox", q=1, sma=1)
print selObjs # returns [u'pCube1']
print selAttrs # returns [u'ty']
如果我要设置属性:
cmds.setAttr(selObjs + "." + selAttrs, '0')
当然这是错误的,那么在这种情况下如何正确执行setAttr命令呢? (目的包括如果我在频道框中有多个选定的属性,则必须设置它们)。
我发现在MEL中,它是这样工作的。所以我真的只需要帮助弄清楚如何创建 python 的对应物:
string $object[] = `ls -sl`;
string $attribute[] = `channelBox -q -sma mainChannelBox`;
for ($item in $object)
for($attr in $attribute)
setAttr ($item + "." + $attr) 0;
在那之后,我需要一个 if 循环,如果选择的属性是比例属性,则该值应该是 1 - 但这是我稍后会研究的内容,但不介意被告知.
谢谢!
我想出了这个:
import maya.cmds as cmds
selObjs = cmds.ls(sl=1)
selAttrs = cmds.channelBox("mainChannelBox", q=1, sma=1)
for each in selObjs:
for eachAttr in selAttrs:
cmds.setAttr (each+"."+eachAttr, 0)
并且它正在努力将选定的属性完美归零。
现在我正处于弄清楚如何让脚本识别它是否包含比例属性的阶段 - 将该值更改为 1 而不是 0。(目前停留在如何从列表中提取值)
所以这是我最终想出的:
import maya.cmds as cmds
selObjs = cmds.ls(sl=1)
selAttrs = cmds.channelBox("mainChannelBox", q=1, sma=1)
scales = ['sy','sx','sz','v']
if not selObjs:
print "no object and attribute is selected!"
elif not selAttrs:
print "no attribute is selected!"
else:
for eachObj in selObjs:
for eachAttr in selAttrs:
if any(scaleVizItem in eachAttr for scaleVizItem in scales):
cmds.setAttr (eachObj+"."+eachAttr, 1)
else:
cmds.setAttr (eachObj+"."+eachAttr, 0)
这会将基本转换重置为其默认值。包括比例和可见性值的 if。
请耐心等待 - 我是新手。我尝试了搜索,但只找到了我要查找的内容的点点滴滴,但没有找到连接它们所需的内容。
基本上,我正在尝试创建一个 Python 脚本,允许用户简单地将 Maya 通道框上的多个选定属性“0”化。
到目前为止我有:
import maya.cmds as cmds
selObjs = cmds.ls(sl=1)
selAttrs = cmds.channelBox("mainChannelBox", q=1, sma=1)
print selObjs # returns [u'pCube1']
print selAttrs # returns [u'ty']
如果我要设置属性:
cmds.setAttr(selObjs + "." + selAttrs, '0')
当然这是错误的,那么在这种情况下如何正确执行setAttr命令呢? (目的包括如果我在频道框中有多个选定的属性,则必须设置它们)。
我发现在MEL中,它是这样工作的。所以我真的只需要帮助弄清楚如何创建 python 的对应物:
string $object[] = `ls -sl`;
string $attribute[] = `channelBox -q -sma mainChannelBox`;
for ($item in $object)
for($attr in $attribute)
setAttr ($item + "." + $attr) 0;
在那之后,我需要一个 if 循环,如果选择的属性是比例属性,则该值应该是 1 - 但这是我稍后会研究的内容,但不介意被告知.
谢谢!
我想出了这个:
import maya.cmds as cmds
selObjs = cmds.ls(sl=1)
selAttrs = cmds.channelBox("mainChannelBox", q=1, sma=1)
for each in selObjs:
for eachAttr in selAttrs:
cmds.setAttr (each+"."+eachAttr, 0)
并且它正在努力将选定的属性完美归零。 现在我正处于弄清楚如何让脚本识别它是否包含比例属性的阶段 - 将该值更改为 1 而不是 0。(目前停留在如何从列表中提取值)
所以这是我最终想出的:
import maya.cmds as cmds
selObjs = cmds.ls(sl=1)
selAttrs = cmds.channelBox("mainChannelBox", q=1, sma=1)
scales = ['sy','sx','sz','v']
if not selObjs:
print "no object and attribute is selected!"
elif not selAttrs:
print "no attribute is selected!"
else:
for eachObj in selObjs:
for eachAttr in selAttrs:
if any(scaleVizItem in eachAttr for scaleVizItem in scales):
cmds.setAttr (eachObj+"."+eachAttr, 1)
else:
cmds.setAttr (eachObj+"."+eachAttr, 0)
这会将基本转换重置为其默认值。包括比例和可见性值的 if。