【问题标题】:setAttr function in Autodesk MayaAutodesk Maya 中的 setAttr 函数
【发布时间】:2017-08-01 10:36:44
【问题描述】:

我仍在 Maya 中学习 Python。我无法让我的代码工作。我正在尝试在我的选择下创建一个定位器并将其作为父级,然后将定位器转换归零。

import maya.cmds as cmds

sel = cmds.ls(selection = True)
loc = cmds.spaceLocator()
cmds.parent(loc, sel)
cmds.setAttr(loc, "translateX", 0)

我总是收到此错误消息:

#Error: TypeError: file <maya console> line 7: Invalid argument 1, '[u'locator6']'. Expected arguments of type ( list, )

有时使用一些其他代码我会得到类似的东西:

#There does not exist something with name 'translateX'

我知道将loc 替换为定位器的名称时它确实有效,但我尽量使代码保持通用,并且不绑定到定位器的名称。

setAttr 函数在 Maya 中如何与变量一起使用? Maya 文档和各种论坛上的其他问题无济于事...:/

【问题讨论】:

    标签: python maya


    【解决方案1】:

    setAttr 以一个完整的属性作为参数:

     cmds.setAtt( loc + ".translateX", 0)  
    

    其中loc 必须是单个字符串。 spaceLocator 像大多数创建命令一样返回一个列表,而不是单个字符串。所以整个事情是:

    sel = cmds.ls(selection = True)
    loc = cmds.spaceLocator()
    cmds.parent(loc, sel)
    cmds.setAttr(loc[0] + ".translateX", 0)
    

    【讨论】:

    • 如果有效,您应该将其标记为已接受,以便其他人在遇到相同问题时知道使用它
    • 抱歉,在这个论坛上不活跃。标记了! :)
    【解决方案2】:

    我知道您似乎在询问 Maya cmd,但我想将其作为替代方案。

    在 PyMel 中,spaceLocator 函数返回创建的对象本身。这些属性是对象内部的方法,允许您执行以下操作。我喜欢 PyMel 的原因之一!

    import pymel.core as pm
    
    sel = pm.selected()[0]
    loc = pm.spaceLocator()
    pm.parent(loc, sel)
    loc.translateX.set(0)
    

    【讨论】:

    • 我不确定你的意思,但 Pymel 只是另一个 python 库(如 maya.cmds),它是 maya 的一部分。这取决于你喜欢哪一个,但出于各种原因,我更喜欢 pymel。
    • 是的,但是当我的实际目的是为多个程序学习 Pyhon 时,我不想学习更多 Pymel 语法和一些仅适用于 Maya 的功能
    • 您的 pymel 替代方案是 maya.cmds,它也是 Maya 特定的功能。老实说,学习 Pymel 会让你成为比 maya.cmds 更好的 Python 程序员,因为它教你面向对象编程。由你决定:)
    猜你喜欢
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2013-01-08
    • 2019-08-09
    相关资源
    最近更新 更多