Есть ли более быстрый способ заполнить MSelectionList?

В Майя, я хочу сделать OpenMayaMSelectionList (версия 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 как побочный эффект

Другие вопросы по тегам