2015-09-06 1 views
0

Я работаю над скриптом, который найдет tri и nGon на объекте и выберет их. Но когда я храню лица в списке и пытаюсь их выбрать, я получаю это в результате.Выбор лиц в списке, майя python

[u'pCube1.f [2] ']

Как изменить это, чтобы сделать это как раз

[pCube1.f [2]]

+0

Он хранит их в виде строк в Юникоде. Вам нужно предоставить дополнительную информацию (например, код, создающий список), чтобы мы могли помочь вам больше. – Anthony

+0

Правильно, в майа-cmds python api вход и вывод команд обычно представляет собой строку, представляющую (частичный) путь dag объекта. Если вы хотите более объектно-ориентированный подход, вы можете посмотреть на что-то вроде [pymel] (http://help.autodesk.com/cloudhelp/2015/ENU/Maya-Tech-Docs/PyMel/index.html#!). – lemonhead

ответ

1

большую часть времени возвращается Майя результаты команд в виде списков строк. Они являются строками unicode (u'xxx '), но это нормально. Майя принимает эти взаимозаменяемые строки с регулярными строками: вы можете спокойно игнорировать Unicode-строку строк, и вам не нужно уходить с пути, чтобы сделать свои собственные строки в Юникод. Майя будет обрабатывать ['xxx'] и [u'xxx'] взаимозаменяемо.

Выбор граней поддерживает несколько форм:

#lists 
my_faces = ['pCube1.f[1]', 'pCube1.f[2]'] 
cmds.select(my_faces) 

# tuples 
more_faces = ('pCube1.f[3]', 'pCube1.f[4]') 
cmds.select(more_faces, add=True) 

# direct selection: 
cmds.select('pCube1.f[5]', 'pCube1.f[6]') 

Чтобы получить все лица в качестве объекта, который вы можете использовать ярлык

cmds.select('pCube1.f[*]') 

или диапазон:

cmds.select('pCube1.f[2:4]') 

Майя иногда возвращает сжатые имена, например, pCube1.f[2:4]. Вы можете разделить их на отдельные предметы с помощью команды filterExpand:

print cmds.filterExpand('pCube1.f[1:5]', sm=34) 
# [u'pCube1.f[1]', u'pCube1.f[2]', u'pCube1.f[3]', u'pCube1.f[4]', u'pCube1.f[5]'] 

(«см = 34» Майя-говорить «только лица»).

Самая большая вещь, на которую нужно обратить внимание - это команды, которые возвращают None, где вы ожидаете пустой список. Если вы столкнулись с такими ошибками, как NoneType is not iterable, это, вероятно, случай майи, возвращающий None вместо []. Вы обычно можете выйти из этого, используя «или»:

item = cmds.ls("your_name_here") or [] 

который возвращает и пустым списком.