For Loop to Duplicate objects in Maya — Python 2

For Loop to Duplicate objects in Maya — Python 2

我使用 Maya 已经 5 年多了,现在我想开始为我想在 Maya 中执行的特定操作编写脚本,使用 python。我确实有一些使用 JS 编写脚本的经验。

简要介绍一下我已经完成的工作:

我想在 Maya 中使用 python for 循环创建多个对象,以改变它们的位置或旋转。我成功了。

现在我想在 Maya 中按名称 select 一个对象,然后使用 for 循环复制它,rotate/move/scale。我遇到的问题是,当我复制它时,我无法更改目标对象的名称。

通常使用 JS 我会使用 "i" 并将其添加到循环中的名称末尾 'nameOfObject'+ i

Python 只允许名称为字符串,输入整数值会出现语法错误。

有没有办法执行此操作?

我的代码:

import maya.cmds as cmds
from random import randint

for i in range(0,50):
    cmds.duplicate('solitude')
    cmds.rotate(0,i*20,0)

它创建了 50 个相同的对象,但我需要 select 新创建的对象而不对整个对象进行硬编码。

我认为这种错误很常见,请尝试执行以下操作:

cmds.duplicate('solitude'+str(i))

我知道您已经接受了一个答案,并且可以将迭代器编号与源节点的名称结合使用 - 前提是您在场景中还没有一些重复...

一个更 "bulletproof" 的解决方案是将重复命令 returns 捕获到一个变量中,然后使用该项目进行轮换。这样,您就不需要构造副本的名称,因为无论 maya 决定如何命名,您实际上已经拥有它。

如果这是您需要做的很多事情,您还可以在进行复制和旋转之前捕获您的选择以用作源节点。因此,您可以通过选择一个项目来使用以下代码,然后选择 运行 代码。

import maya.cmds as mc

src = mc.ls(sl=True)[0]
dup = src
for i in xrange(50):
    dup = mc.duplicate(dup)[0]
    mc.rotate(0,i*20,0, dup)

另外,一个小提示 - 您似乎没有在代码中使用 randint...不过您可能在其他地方使用它...