【问题标题】:Python in Maya - Select x faces every x facesMaya 中的 Python - 每 x 个面选择 x 个面
【发布时间】:2016-02-18 01:44:32
【问题描述】:

我是 Python 和一般编程方面的新手,在我的课程中,我已经建模了一棵树,我想制作一个脚本,允许我每两行删除一排树干的面.我希望结果看起来像你看到的丝带树干?删除一行人脸,保留下一张,删除下一​​张……以此类推。

在浏览互联网和这个网站时,我是来做这个的:

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

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

如果这个问题已经在某处得到解答,我深感抱歉,我找不到答案。感谢您的帮助!

罂粟

【问题讨论】:

    标签: python select maya


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢您的回答。天哪,对于像我这样的初学者来说,这似乎很可怕,但我会尝试一下。我会及时向大家发布。谢谢!是否也可以使用我听说的“正则表达式”来实现?谢谢:)
    • 正则表达式是一种特殊的字符串,旨在匹配模式。这可以在这里工作,但我怀疑它会更难写,因为正则表达式是他们自己的一种奇怪的迷你语言
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2018-01-20
    • 1970-01-01
    相关资源
    最近更新 更多