[Maya API] lesson27_Maya API 中的事件捕獲 - MMessage

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關閉了,他就自然而然就沒有了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章