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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值