玛雅人。有没有办法通过改变视口来激活脚本作业?

Posted

技术标签:

【中文标题】玛雅人。有没有办法通过改变视口来激活脚本作业?【英文标题】:maya. is there a way to activate a script job by change of viewport? 【发布时间】:2020-06-13 16:17:04 【问题描述】:

有一个名为“ActiveViewChanged”的事件,但它不起作用。我会知道另一种方法来通过在 Maya 中切换视口来启动动作。示例:

import maya.cmds as cmds 
def clix():
    print "you have clicked on another view" 
cmds.scriptJob (event=["ActiveViewChanged","clix()"])

【问题讨论】:

【参考方案1】:

我可以确认"ActiveViewChanged" 似乎没有任何效果。搜索了一下,好像很多人也有同样的问题。

您可以尝试改用这个: cmds.scriptJob(event=["ModelPanelSetFocus", "clix()"])

虽然它似乎没有在您期望的时候触发(单击视口!)而是在视口中的按键时触发。

可以通过 api 添加回调,使用OpenMaya。我找到的唯一一个是:

OpenMaya.MEventMessage.addEventCallback("ActiveViewChanged", clix)

虽然这与"ModelPanelSetFocus" 具有完全相同的行为。

我想您还可以设置一个计时器来查询当前面板以检测它是否已更改,如果已更改则触发。这对于临时计时器来说是可以的,比如在工具打开期间,但如果它假设在整个 Maya 会话中运行,我会反对它,因为它会增加额外的开销。

【讨论】:

感谢您的回答。不幸的是,即使使用 openmaya 库,“ActiveViewChanged”也不起作用。事件“ModelPanelSetFocus”需要用户更改焦点或相机参数。我场景中的摄像机被锁定。只剩下临时计时器了。我试过一个。但我的脚本让我在完成之前无法工作。 'ModelPanelSetFocus' 总是在我聚焦视口并按下键盘上的按钮时触发。当按下视口面板中的某些按钮时也会触发它。可能不是你想要的。 是的,我看到了。我只想尽可能地做最“用户友好”的脚本。我希望只需单击窗口即可更新窗口。但是您的解决方案非常好,我会使用它。并继续希望 Autodesk 更新 ActiveViewChanged 事件。再次感谢。 如果您能获得更多关于您计划实际执行的内容的信息会很高兴。如果这是用户选择视口的一次性操作,您也可以尝试使用cmds.popupMenu,以便在点击时触发。【参考方案2】:

最后我使用了 ModelPanelSetFocus。事实上我不能没有键盘工作:)

try:
    lastActiveView
except NameError:
    global lastActiveView
    lastActiveView = None

def AVC():
    global lastActiveView
    if lastActiveView == None:
        lastActiveView = cmds.lookThru(q=True)
    if lastActiveView == cmds.lookThru(q=True):
        pass
    else:
        lastActiveView = cmds.lookThru(q=True)
        print "the view has changed ..."
jobAVC = cmds.scriptJob(e=('ModelPanelSetFocus', AVC))

【讨论】:

以上是关于玛雅人。有没有办法通过改变视口来激活脚本作业?的主要内容,如果未能解决你的问题,请参考以下文章

基本 cron 作业设置为每天执行 php 文件

Cron 作业未在所有站点上激活

有没有办法在Scalding中指定映射器的数量?

有没有办法通过流分析作业将原始 JSON 数据传输到 Azure SQL 中?

仅通过localhost限制执行

第一周作业