在 Python 中打开 Maya callBacks 或C++查询内存中的所有回调



您好,我想知道是否有办法查询Maya中所有**用户创建的callbacks同样,如果我能查询哪些对象或节点连接到它们。我想在每次都更好地管理内存中的清洁度,并且不让任何回调在内存中丢失。

import maya.cmds as cmds
import maya.OpenMaya as OpenMaya
##########################################
class MayaSignals(object):
    def __init__(self):
        super(MayaSignals)       
        self.callback_list = []
    def setCallback(self, node):
        sel = OpenMaya.MSelectionList()
        sel.add(node)
        obj = OpenMaya.MObject()
        sel.getDependNode(0, obj)       
        idx = OpenMaya.MNodeMessage.addAttributeChangedCallback(obj, self.reading_node)
        self.callback_list.append(idx)
    def removeAllCallback(self):
        for idx,itm in enumerate(self.callback_list):
            print(idx, 'removed')
            OpenMaya.MMessage.removeCallback(itm)
    def reading_node(self, msg, plug, otherplug, *clientData):
        if msg & OpenMaya.MNodeMessage.kAttributeSet:
            print ('Attribute Changed On: %s' % plug.name())
        if msg & OpenMaya.MNodeMessage.kConnectionMade:
            print('Connection Created On: %s' % plug.name()) 
        if msg & maya.OpenMaya.MNodeMessage.kConnectionBroken:
            print ("Broken Connection On: %s" % plug.name())
################################################################################################        
node = cmds.ls(sl=True)[0]         #< ------ Node string type
#signal = MayaSignals()            # class to manage the callbacks
#signal.setCallback(node)
signal # # #                       # to keep the instance alive
signal.removeAllCallback()         # remove all into the array 

# ---------------------------------------------`-`---------------------------------------------- #

在这里,我创建了一个示例,其中我将对象标记为回调,并在发生某些条件时打印一些内容。 将每个回调 ID 添加到数组中,以便稍后将其删除。

我只需要一盏灯,即使C++我也可以查看有关此处建议的文档。

没有办法做你想做的事。最接近的方法是使用 MMessage::nodeCallbacks 来检索针对特定节点注册的回调 ID。

相关内容

  • 没有找到相关文章

最新更新