如何在 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)
您可以使用相同的嵌套循环技术来创建各种模式,因此希望这能让您努力解决您的特定问题。
我有一个关于我的大学作业的问题,我在其中使用多边形创建了一个平面图案,我成功地在 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)
您可以使用相同的嵌套循环技术来创建各种模式,因此希望这能让您努力解决您的特定问题。