Maya中的Python - 选择x面对每个x面

时间:2016-02-13 23:25:42

标签: python select maya

我是Python和编程的新手,对于我的课程,我已经对树进行了模型化,我想创建一个脚本,允许我删除每行两行的树干的一行面。我希望结果看起来像你看到的缎带树干?删除一行面,保留下一行,删除下一​​行...依此类推。

在互联网和本网站上查看时,我已经开始这样做了:

    TrunkFaces=cmds.ls("Trunk.f[0:414]", fl=True) 
    DeletedTrunkFaces=TrunkFaces[::5]
    print DeletedTrunkFaces
    cmds.delete(DeletedTrunkFaces)

所以基本上它很酷,因为它每5个脸都会删除一张脸,但这对我想要的东西来说还不够,我希望程序每两行删除12个面(因为我的主干是一个每边有2个边循环的立方体)面部每面都有3个子面。)

如果已经在某个地方得到回答,我深感抱歉,我找不到答案。谢谢你的帮助!

破皮

1 个答案:

答案 0 :(得分:0)

您将遇到的问题是,无法保证面部行始终保持一致;它现在可能是真的但是如果你以后删除了一个面或一个顶点,那么排序将不再一致(实际上,每次运行它时它都会改变顺序。

但是,要从每个R行中抓取N个面,您可以执行以下操作:

def get_face_subsets(object, row_size, take):
    faces_count = cmds.polyEvaluate(object, f=True)
    subsets = [] 
    # first break the original indexes into a list-of-lists
    # each containing <row_size> items
    for range_set in range(faces_count / row_size):
        start = range_set * row_size
        subsets.append(range(faces_count)[start: start+row_size + 1])

    results = []
    # now loop over the lists, grabbing the first <take> items
    # from each
    for subset in subsets:
         for f in subset[:take]:
             results.append(object + ".f[%i]" % f)
    return results

get_face_subsets('pSphere1', 5, 2)

// Result: ['pSphere1.f[0]', 'pSphere1.f[1]', 'pSphere1.f[5]', 'pSphere1.f[6]'...

从编程的角度来看,有更好的方法可以做到这一点,但这种方式很容易理解。主要技巧是使用polyEvaluaterange将索引作为可预测的数字流,然后将其拆分为更小的组('行')并使用切片来获取这些数据的子集