Есть ли более быстрый способ заполнить MSelectionList?
В Майя, я хочу сделать OpenMaya
MSelectionList
(версия API 2.0) с более чем одним элементом... Я смог заполнить его только add
метод вроде так:
import maya.api.OpenMaya as om
selList = om.MSelectionList()
selList.add('node1')
selList.add('node2')
selList.add('node3')
Это нормально для заполнения всего несколькими предметами, но утомительно, если у вас есть больше... Мне интересно, есть ли способ сделать что-то более похожее на это:
import maya.api.OpenMaya as om
selList = om.MSelectionList(['node1', 'node2', 'node3'])
Я мог бы написать свою собственную функцию для создания пустого MSelectionList, перебрать список, добавить его и затем вернуть его; Мне просто интересно, я полностью просмотрел что-то очевидное? Из того, что я могу сказать в документах, вы можете только создать пустой MSelectionList или создать его, передав другой MSelectionList (чтобы в основном дублировать его).
Если это не может быть сделано по сути в классе, есть ли у кого-нибудь идея, почему это было реализовано таким образом?
1 ответ
MSelectionList, в конечном счете, является оберткой вокруг списка указателей объектов в C++ (API-интерфейс Maya необычен тем, что использует различные наборы функций для работы над различными аспектами объекта, а не с более привычным использованием классического дерева наследования).
Реализация переменных функций в C++ не является тривиальной (особенно не в 90-е годы, когда разрабатывался API-интерфейс Maya. Я подозреваю, что никто не считал, что это стоит того, что по сути является синтаксическим сахаром).
sl = om.MSelectionList()
for node in nodelist:
sl.add(n0de)
или же
sl = om.MSelectionList()
[sl.add(n0de) for node in nodelist]
хотя я бы не рекомендовал более короткую версию, которая выдает список бессмысленных Nones
как побочный эффект