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

2024-09-28 01:26:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python和编程方面的新手,在我的课程中,我建立了一棵树的模型,我想制作一个脚本,允许我删除树干上每两行的一行面。我希望结果看起来像一个丝带行李箱你看到了吗?删除一行面,保留下一行,删除下一行。。。等等。在

当我在网上和这个网站上浏览时,我是来做这件事的:

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

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

我很抱歉,如果这已经有人回答了,我找不到答案。谢谢你的帮助!在

波皮


Tags: 模型脚本网站编程ls课程trunkcmds
1条回答
网友
1楼 · 发布于 2024-09-28 01:26:59

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

但是,要从每个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将索引作为可预测的数字流,然后将其拆分为更小的组(“rows”),并使用切片获取其中的一个子集

相关问题 更多 >

    热门问题