2016-02-13 3 views
0

Я новичок в Python и программирование в целом, и для моих курсов я смоделировал дерево, и я хотел бы создать скрипт, который позволит мне удалить один ряд граней ствола дерева каждые два ряда. Я бы хотел, чтобы результат выглядел как ленточный ствол, который вы видите? Удалите одну строку лиц, сохраните следующую, удалите следующую ... и так далее.Python in Maya - выберите x на грани x x

При поиске в интернете и на этом сайте, я пришел, чтобы сделать это:

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

Так в основном это круто, потому что она удаляет лицо каждого 5 лица, но это не достаточно для того, что я хотел , Я хотел бы, чтобы программа удаляла 12 граней каждые две строки (так как мой сундук представляет собой куб с двумя краевыми петлями на грань, который создает 3 подповерхности на лице).

Мне очень жаль, если на это уже был дан ответ, я не смог найти ответ. Спасибо за вашу помощь!

Поп

ответ

0

Проблемы вы собираетесь запустить в том, что нет никакой гарантии, что строки лиц соответствуют повсюду; это может быть правдой сейчас, но если вы удалите лицо или вершину позже, упорядочение не будет более последовательным (действительно, он будет менять порядок при каждом его запуске.

Однако, чтобы захватить N лиц из каждых R строк вы можете сделать что-то вроде этого:.

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]'... 

есть лучшие способы сделать это с точки зрения программирования, но этот путь легко следовать Основная хитрость заключается в использовании polyEvaluate и range, чтобы получить индексы как предсказуемый поток чисел, затем разбить это на более мелкие группы («ряды») и использовать срезы для получения подмножества этих

+0

T вас так сильно за ваш ответ. Богу кажется пугающим для новичка, как я, но я собираюсь попробовать это. Я буду держать вас в курсе. Спасибо! Могло ли это быть достигнуто, используя то, что я слышал, называлось «регулярными выражениями»? Thanks :) – Popi

+0

Регулярное выражение - это специальная строка, предназначенная для соответствия шаблонам. Это будет работать, но я подозреваю, что писать будет намного сложнее, поскольку регулярные выражения представляют собой странный мини-язык – theodox

Смежные вопросы