【问题标题】:Differentiate current and new items in outliner区分大纲中的当前项目和新项目
【发布时间】:2014-02-18 09:30:30
【问题描述】:

是否可以在大纲视图中存储当前项目以及新项目?

def main():
    setupRenderGlobals()
    importItems()
    frameViewport()

    global app
    app=QtGui.qApp  

    global form
    form = MainWindow()
    form.show()

例如。 Outliner 中的当前项目(默认项目除外,例如相机): ['pCube1', 'pCube2', 'pSphere1']

然后导入.添加新项目: ['pCube1', 'pCube2', 'pSphere1', 'Man_Rig01', 'pShere2']

有人可以指导我如何写出一种区分新项目的方法吗?目前,当我点击关闭/是否导入任何项目时,我的导入窗口(使用内部模块 importItems() )会不断弹出前缀窗口(MainWindow())。因此,我想以一种仅在添加新项目时才会弹出前缀窗口的方式编写它。


致接近选民的消息:对于 Maya 用户来说,这个问题不清楚。有答案等待发布,但需要先重新打开问题。

【问题讨论】:

  • 澄清一下,您希望在添加新对象时运行脚本?
  • 我认为这是一个非常明确的问题(因为它是一个常见问题)。我理解这一点的方式是您想知道刚刚导入了哪些项目。它很简单,我在我的生活中已经概述了几次。答案是:只需在导入前执行 size('ls') ,然后列出所有在导入后索引高于 ls 的项目都是新导入的对象。如果有人感兴趣,我也有这个作为包装导入的脚本。无论如何,这是一个较差的解决方案,因为您无法再通过名称间距来解决问题。
  • @joojaa,问题已重新打开。请随时发布作为真正的答案:)
  • @mhlester 完成和 TY。

标签: python maya outliner


【解决方案1】:

Maya 将对象存储在列表中。因此,每次您导入东西时,它都会进入所述列表的末尾,所以如果您这样做,

coutBefore = len(cmds.ls())

在您导入之前。然后您可以继续:

nodesImported = cmds.ls()[coutBefore:]

导入后。可以直接将其包装到导入中。但这最好在 MEL 中完成。观察:我不认为这是一个好方法。由于您没有任何名称空间来保护任何可能的导入问题免受不良场景的影响。因此,另一种解决方案是使用命名空间导入,然后在用户询问时剥离命名空间。

【讨论】:

  • 只是好奇,但是否可以排除某些节点?例如,我不希望包含 Lighting 节点
  • @yan maya 命令适用于列表。因此,您可以将此列表传递给另一个 ls 或自定义过滤器以进行进一步细化。所以是的,你可以。
猜你喜欢
  • 1970-01-01
  • 2011-03-18
  • 2015-02-15
  • 2010-12-21
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多