【问题标题】:is there a quicker way to fill an MSelectionList?有没有更快的方法来填充 MSelectionList?
【发布时间】:2017-08-09 17:00:57
【问题描述】:

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

如果这真的不能在课堂上固有地完成,有没有人知道为什么要以这种方式实现?

【问题讨论】:

    标签: python maya maya-api


    【解决方案1】:

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

    Implementing variadic functions in 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 作为副作用

    【讨论】:

    • 是的......我怀疑唯一的方法是通过循环...... bleh - 看起来我会保留我的功能。但是,嘿,感谢您对为什么会这样的额外解释(为 90 年代的限制欢呼)!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2022-11-20
    • 1970-01-01
    • 2015-05-08
    • 2018-12-12
    • 2016-02-06
    • 2011-03-22
    相关资源
    最近更新 更多