Maya PyMel перебирает слои в сцене и создает группы из содержимого

У меня возникли проблемы с пониманием того, как:

  1. перебирать слои в сцене,
  2. выберите содержимое каждого слоя,
  3. сгруппировать все содержимое слоя в одну группу
  4. переименуйте группу на основе имени первого объекта в слое +_'grp'

У меня есть некоторые концепции, но я просто не итерирую правильно, когда запускаю этот код. Я получаю сообщение об ошибке в строке 5 о том, что второй цикл for имеет тип NoneType и не может повторяться. Я попытался установить значение слоя и попытался увеличить его в цикле, но, похоже, это не сработало.

import pymel.core as pm
layerList = pm.ls(type="displayLayer")
layer = 0
for layer in layerList:
    selection = pm.select(layer)
    for each in selection:
        cmds.select(each, r=True)
        pm.group()
        pm.rename(each+'_grp')
        
     layer +=1

person lupin4    schedule 17.04.2021    source источник


Ответы (1)


Линия

selection = pm.select(layer)

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

selection = layer.listMembers()

холодная помощь. И эти строки:

layer = 0
... and ...
layer += 1

не имеет никакого смысла, потому что слой не является числом, даже если вы присвоите ему 0. Цикл for присваивает объекты из списка слою, а не номерам. Обычно лучше не полагаться на выборки в Maya, а использовать имена объектов везде, где это возможно, поэтому вы можете сделать:

group = pm.group(n=each.name()+"_grp")
pm.parent(each, group)
person haggi krey    schedule 17.04.2021