【问题标题】:Proper way to use setAttr with channel box selection使用带有通道框选择的 setAttr 的正确方法
【发布时间】:2016-03-04 05:40:20
【问题描述】:

请多多包涵 - 我对这一切都不熟悉。我尝试了搜索,只找到了我正在寻找的点点滴滴,但没有找到我需要连接它们的东西。

基本上,我正在尝试创建一个 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 - 但这是我稍后会研究的内容,但不介意被告知。

谢谢!

【问题讨论】:

  • 如果您使用您说“错误”的代码会发生什么?你有例外吗?我看到的显而易见的事情是,您正试图将单项列表视为字符串。您可能想尝试 cmds.setAttr(selObjs[0] + "." + selAttrs[0], '0'),或者像在 MEL 代码中那样编写 for 循环。
  • 是的,我学到了艰难的方式,我在那里尝试做的是连接列表(而不是它们的内容)XD - 学习的痛苦

标签: python maya setattribute mel


【解决方案1】:

这就是我最终想到的:

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。

【讨论】:

    【解决方案2】:

    我想出了这个:

    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。(目前停留在如何从列表中提取值)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 2021-11-20
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 2011-04-02
      相关资源
      最近更新 更多