1

在maya中,我想制作一个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(基本上复制它)来创建一个。

如果这真的不能在课堂上固有地完成,有没有人知道为什么它是这样实现的?

4

1 回答 1

2

MSelectionList 最终是围绕对象指针的 C++ 列表的包装器(Maya api 的不寻常之处在于它使用不同的函数集来处理对象的不同方面,而不是更熟悉地使用经典继承树)。

在 C++ 中实现可变参数函数并非易事(尤其是在设计 Maya API 时的 90 年代。我怀疑没有人觉得花时间来研究本质上是语法糖的东西是值得的。

sl = om.MSelectionList()
for node in nodelist:
    sl.add(n0de)

或者

sl = om.MSelectionList()
[sl.add(n0de) for node in nodelist]

虽然我不推荐较短的版本,它会产生一个无意义的列表Nones作为副作用

于 2017-08-10T16:28:41.900 回答