Maya API事件觸發 - MMessage
今天我們來學習一下API中的事件觸發:MMessage
MMessage
功能:用於處理Maya中多種事件消息,提供響應操作
特性:比scriptJob,事件更豐富
在Maya中,有許多的事件可以供我們來調用它的接口,也就是說Maya在處理任何以像工作的時候,她都會有相應事件,我們可以註冊不同的事件,來響應他不同的操作,上圖中是我截下來的關於MMessage的一部分,我們可以從幫助文檔裏看到他全部的Message,MMessage知識他的基礎的一個父類,我們使用道德都是繼承他的這些子類,比如說,我們要操作物體層級相關的,就用MDagMessage,我們要操作普通節點相關的,或者我們調用命令的時候,可以使用MCommandMessage,或者我們要綁定某一個節點上的事件,再比如說屬性變化的時候,我們可以使用NodeMessage,我們也可以使用多邊形的PolyMessage,或者當場景變化或者更新的時候。我們可以使用MSceneMessage
下面我們就以MTimerMessage,也就是說一個計時的事件,當我們註冊玩這個TimerMessage之後,Maya就會根據我們所註冊的事件的事件,一直調用我們所註冊的函數,下面來看一下幫助文檔:
他有一個addTimerCallback,也就是說,添加一個回調函數,那麼第一個參數就是我們要傳入的一個時間間隔,然後第二個我們可以看到是一個Function,也就是說要傳入我們的回調函數,其他的內容爲可選內容,我們不用填寫,那麼他返回的就是一個Callback的ID,如果我們要移除這個事件的話,我們就需要用CallbackID來進行移除
import maya.OpenMaya as OpenMaya
import pymel.core as pm
def func(*args):
"""
定義一個回調函數func,參數不限制他的輸入的數量
"""
print 1, args
callback_id = OpenMaya.MTimerMessage.addTimerCallback(1, func) #添加這個時間的ID,第一個參數是秒數,第二個參數爲傳入的函數
OpenMaya.MTimerMessage.removeCallback(callback_id) #移除當前事件
這是一個普通的計時器的函數,那麼除了一個計時的消息之外,我們還可以監控他的事件,那麼我們可以使用MEventMessage
第一個參數就是一個String類型的Event,第二個同樣是一個Function,那麼如何傳遞StringEvent
我們可以使用getEventName()來獲取他的事件
event_names = list()
OpenMaya.MEventMessage.getEventNames(event_names)
call_back_timer = OpenMaya.MEventMessage.addEventCallback('timeChanged', func)
OpenMaya.MMessage.removeCallback(callback_id)
先定義一個存放eventname的列表,來查看他有哪些事件可以供我們使用
event_names = list()
講得到的eventname存放在上面創建的列表中
OpenMaya.MEventMessage.getEventNames(event_names)
創建一個timeChanged的事件
call_back_timer = OpenMaya.MEventMessage.addEventCallback('timeChanged', func)
移除id爲callback_id的事件,因爲事件的removeCallback是繼承MMessage的,所有我們可以使用MMessage就可以移除任務
OpenMaya.MMessage.removeCallback(callback_id)
Message使用方法
定義函數
addCallback
removeCallback
那麼所有的Message裏面基本上都是這三個主要步驟,定義函數,然後添加回調,刪除回調,如果是常用的消息呢,我們就一般不會刪除他的回調,因爲當Maya關閉了,他就自然而然就沒有了。