I don't think you can register your own events into the maya callback
system. Maya wouldn't know when to trigger the event, and I don't know of a
way to do that explicitly (there's no OpenMaya.MMessage.*triggerEvent* method
for you to call).

Developing a loose callback/dispatch (aka slot/signal) system isn't too
difficult in python:

CALLBACKS = defaultdict()

def registerCallback(eventName, callback, *args, **kwargs):
     CALLBACKS[eventName].append((callback, args, kwargs))

def triggerEvent(eventName, **moreKwargs):

     for (callback, args, kwargs) in (CALLBACKS.get(eventName) or []):
         finalKwargs = kwargs.copy()           # so we don't modify the
original
         finalKwargs.update(moreKwargs)
         try:
              callback(*args, **kwargs)
         except:
              import logging
              logging.exception("Error in callback %s" % callback)   # using
'logging.exception' is better than 'print'


I've previously developed a dispatching module on top of python's own *logging
*module, which already has the [robust] mechanics for doing that at it's
core. I found that worked pretty well and was easy to extend.

- Ofer
www.mrbroken.com


On Wed, Jan 26, 2011 at 11:18 PM, Donal McMullan <[email protected]>wrote:

> I'm working on a Python plugin and I'd like it to be able to emit an event
> so that other python scripts running in Maya can respond to this event.
>
> I guess what I want is to be able to define and then emit a custom
> OpenMaya.MSceneMessage - say for example kCoffeeReady. My other scripts
> would be able to do something like:
>
> OpenMaya.MSceneMessage.addCallback(OpenMaya.MSceneMessage.kCoffeeReady,
> self.add_milk)
>
> Is that possible? I'm having a hard time grokking the documentation.
>
> D
>
> --
>
> Donal McMullan
> Production Engineer
>  Desk: x3310
>  Direct: +64 4380 3810
>  Mobile: +64 2166 1254
>
> --
> http://groups.google.com/group/python_inside_maya
>

-- 
http://groups.google.com/group/python_inside_maya

Reply via email to