майя. Есть ли способ активировать работу скрипта путем изменения области просмотра? - PullRequest
0 голосов
/ 01 марта 2020

есть событие под названием «ActiveViewChanged», но оно не работает. я бы знал альтернативный метод для запуска действия, просто переключив viewport в Maya. пример:

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

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Я могу подтвердить, что "ActiveViewChanged", похоже, не имеет никакого эффекта. После поиска вокруг кажется, что у многих других есть та же самая проблема.

Вы можете попытаться использовать это вместо этого: cmds.scriptJob(event=["ModelPanelSetFocus", "clix()"])

Хотя это, кажется, не срабатывает, когда вы ожидаете это ( щелчок по окну просмотра!) Вместо этого он срабатывает при нажатии клавиши в окне просмотра.

Возможно добавление обратных вызовов через API с помощью OpenMaya. Единственное, что я нашел, было это:

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

Хотя это ведет себя точно так же, как "ModelPanelSetFocus".

Я полагаю, вы также можете установить таймер, который запрос - это текущая панель, чтобы определить, было ли она изменена или нет, затем активировать, если она была изменена. Это может быть хорошо для временного таймера, например, если он работает на время открытия инструмента, но я был бы против, если предполагается, что он будет работать в течение всего сеанса Maya, поскольку это добавит дополнительные издержки.

0 голосов
/ 03 марта 2020

наконец я использую 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...