玛雅人。有没有办法通过改变视口来激活脚本作业?
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))
【讨论】:
以上是关于玛雅人。有没有办法通过改变视口来激活脚本作业?的主要内容,如果未能解决你的问题,请参考以下文章