有一个名为“ActiveViewChanged”的事件,但它不起作用。我知道另一种方法,只需在maya中切换视口即可启动操作。示例:
import maya.cmds as cmds
def clix():
print "you have clicked on another view"
cmds.scriptJob (event=["ActiveViewChanged","clix()"])
发布于 2020-03-01 23:24:27
我可以证实,"ActiveViewChanged"
似乎没有任何效果。在四处搜索后,似乎许多其他人也有同样的问题。
您可以尝试使用以下代码:cmds.scriptJob(event=["ModelPanelSetFocus", "clix()"])
尽管它似乎不会在您期望的时候触发(单击一个视口!)相反,它会在视口中按键时触发。
使用OpenMaya
,可以通过api添加回调。我找到的唯一一条是:
OpenMaya.MEventMessage.addEventCallback("ActiveViewChanged", clix)
虽然这与"ModelPanelSetFocus"
具有完全相同的行为。
我想你也可以设置一个计时器来查询当前面板,以检测它是否已更改,如果已更改则触发。这对于临时计时器来说是可以接受的,比如在工具打开期间,但是如果它在整个Maya会话中运行,我就会反对,因为这会增加额外的开销。
发布于 2020-03-03 05:25:07
最后,我使用了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))
https://stackoverflow.com/questions/60470709
复制相似问题