如何在 maya 中使用 python 复制特殊的多个组

How to duplicate special multiple groups using python in maya

我有一个关于我的大学作业的问题,我在其中使用多边形创建了一个平面图案,我成功地在 x 轴上创建了一条图案线并将对象分组,然后我在 z 轴上复制该组一次。虽然我现在有两个组,但复制组的代码部分如下所示:

cmds.select(all=True)
cmds.group(name='group#')
cmds.select('group1')
cmds.duplicate('group1')
cmds.move(0.9, 0, 1.6)
cmds.select('group1','group2')
cmds.group(name='group#')
cmds.select('group3')
cmds.duplicate('group3')
cmds.move( 0, 0, 3.2 )
cmds.duplicate( st=True )
cmds.duplicate( st=True )
cmds.duplicate( st=True )
cmds.duplicate( st=True )

'''

那么如何使用循环来简化这段代码呢?

不清楚你的意思and/or你为什么要循环。我还应该指出,您提供的几乎每一行都是不同的(因此,很难找出您想要循环的确切位置)。无论如何,一般来说,如果你想循环一组具有不同参数的行,那么你需要将这些参数放在一个列表中。同样,如果您想遍历一组函数,则需要将这些函数放在一个列表中。或两者。可能的例子,

params = [(dict(all=True),      dict(name='group#'), ['group1'], ['group1'], [0.9,0,1.6]),
          (['group1','group2'], dict(name='group#'), ['group3'], ['group3'], [0,0,3.2]),
]
funcs  = [cmds.select,cmds.group,cmds.select,cmds.duplicate,cmds.move]

for param in params:
     for func in funcs:
         if isinstance(param,list):
             func(*param)
         elif isinstance(param,dict):
             func(**param)

根据您上面的评论,如果我们忽略您正在进行的分组并只专注于循环,您可以执行类似这样的操作来创建多边形立方体的立方体网格:

import maya.cmds as cmds

iterations = 10
distanceIncrement = 2

for x in range(iterations-1):
    cube = cmds.polyCube()
    cmds.setAttr('{}.translate'.format(cube[0]), x*distanceIncrement, 0, 0)
    
    for y in range(iterations-1):
        cube = cmds.polyCube()
        cmds.setAttr('{}.translate'.format(cube[0]), x*distanceIncrement, y*distanceIncrement, 0)
        
        for z in range(iterations-1):
            cube = cmds.polyCube()
            cmds.setAttr('{}.translate'.format(cube[0]), x*distanceIncrement, y*distanceIncrement, z*distanceIncrement)

您可以使用相同的嵌套循环技术来创建各种模式,因此希望这能让您努力解决您的特定问题。