[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关闭了,他就自然而然就没有了。

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