【问题标题】:Maya Python/Mel : Retrieve name of last object deletedMaya Python/Mel:检索删除的最后一个对象的名称
【发布时间】:2014-02-14 14:58:05
【问题描述】:

想知道是否可以检索最后删除的对象的名称。

我查看了 listHistory,但这似乎列出了选定或命名对象的历史记录。我还研究了 undoHistory printqueue,它将撤消历史记录打印到脚本编辑器中,但我无法从控制台检索该信息。

有什么想法吗?我环顾四周,找不到任何有关此的信息。提前致谢。

【问题讨论】:

  • 我不相信事后有可能。您是否查看过监视删除的scriptJob
  • 作为一种解决方法,我使用 scriptJob 来存储最后一个有效的选择 - 感觉应该有一种方法可以检索此信息。

标签: python scripting maya mel


【解决方案1】:

您可以通过以下方式获取列表:

undoInfo -q -pq;

有一些非常好的用例可用于剥头皮 Maya 撤消。比如事后确定选择顺序。在任何情况下,可能很难知道它实际上是来自队列的什么,因此您可能需要撤消和重做以获取已删除的对象。

所以这可能有效也可能无效,里程可能会有所不同。

作为一个旁注,因为你恢复的东西为什么不在保存时保存对象列表。顺序将是相同的(确保),因此您可以将最后的更改和删除视为丢失的对象。查看普通 ls 中的对象按创建顺序排列。例如,您可以将其用于从导入到导入的基本差异。删除同样适用。

【讨论】:

    【解决方案2】:

    不可能在事后发现任何单独的删除。但是,您可以在要监视的对象上粘贴attributeDeleted scriptJob - 当它们被删除时它会触发。如果你真的想捕获每个对象,一个监听事件DagObjectCreated 的 scriptJob 会让你将另一个 scriptJob 连接到每个新对象 - 但是大多数时候这不是一个好主意,因为它会在其中创建大量 scriptJobs您的场景(此外,您还必须在加载时循环浏览场景并将相同的删除回调附加到现有对象......)

    import maya.cmds as cmds
    from functools import partial
    
    def objectDeleted(obj):
        print "%s was deleted" % obj
    
    def catch_deletion(obj):
       cmds.scriptJob ( attributeDeleted = ( (obj + ".tx"), partial(objectDeleted, obj) ) )
    
    catch_deletion('pCube1')   
    

    【讨论】:

    • 别那么严格,用undoInfo可能会在事后发现删除。
    • 我真的不认为这对于一般情况是可能的;撤消队列存储仅公开 doIt() 和 undoIt() 的 MPxCommand,而不是它们为使事情可撤消或可重做而做出的任何内部安排。 OP 将负责审核场景。
    • 否,但您会得到提示,可以展开撤消队列以进一步调查。但是看到这是操作员所要求的。无论如何,我确实使用 May 来表示这不一定是可能的。
    • 很公平 - 我只是认为不值得 OP 花费时间:在 'select x; 之外有很多方法可能会出错; DoDelete();` 案例
    猜你喜欢
    • 2018-07-13
    • 2019-05-18
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 2012-02-26
    相关资源
    最近更新 更多