python - 设置不带字符串连接的属性

标签 python maya mel pymel

我想知道是否有一种方法可以执行以下操作,我知道要设置对象的翻译,在 pymel 中就这么简单:

object.translateX.set(1.5)

您还可以使用“setAttr”命令进行设置:

setAttr(object + '.translateX', 1.5)setAttr('%s.translateX' % object, 1.5)

但是,如果我只想将第一个示例与属性名称会更改的更高级的内容一起使用,该怎么办?

示例:

object.translateX.set(1.5)
object.translateY.set(1.5)
object.translateZ.set(1.5)
object.rotateX.set(1.5)
object.rotateY.set(1.5)
object.rotateZ.set(1.5)

我更愿意这样写:

for i in range(0,5,1):
    t = ['translateX', 'translateY', 'translateZ', 'rotateX', 'rotateY', 'rotateZ']
    object.t[i].set(1.5)

但是这显然行不通,但是有人可以告诉我是否有办法做到这一点吗?

最佳答案

现在,我不知道 pymel 或任何与 Maya 相关的东西,但如果 object.translateX.set(1.5) 有效,那么我认为访问正常对象属性访问,因此您可以使用 getattr(object, attrname[, default_value]) 按名称获取属性。

BTW range(0, 5, 1)range(5) 相同;并且表示列表 [0, 1, 2, 3, 4 ];你的列表有 6 个元素,所以你需要 range(6) 来迭代它——但是 for 循环可以迭代任何可迭代的,你应该只迭代你的属性名称。因此:

attributes = ['translateX', 'translateY', 'translateZ', 
              'rotateX', 'rotateY', 'rotateZ']
for a in attributes:
    getattr(object, a).set(1.5)

应该做你想做的。

更新:pymel 似乎也支持对象的 .attr(),因此

for a in attributes:
    object.attr(a).set(1.5)

关于python - 设置不带字符串连接的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18372627/

相关文章:

python - 对字符串中与正则表达式模式不匹配的所有部分进行操作的函数

python - 从Python编写没有 Pandas 的 Parquet 文件

python - PyQt5 玛雅 2017

python - Maya - 查询以前的渲染信息

python - 使用 Python 在 Maya 中打开 .ma 文件(ASCII)?

python - SettingWithCopyWarning 使用 Pandas apply

Python 和 Selenium 查找名称不准确的元素

menu - 如何安全地将 menuItems 添加到 Maya MEL 中的现有菜单

python - 通过 Python Socket 向 Maya 发送多行命令

python - 使用 Python 在 Maya 中切换 X 射线模式