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

标签 python c++ callback maya maya-api

你好,我想知道是否有办法在Maya中查询所有**User Created 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。

关于python - 在 Python 或 C++ 中打开 Maya callBacks 查询内存中的所有回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46896907/

相关文章:

python - 从 Gunicorn worker 本身获取 worker id

python - 制作一个元素列出 "Groupe"表的一个属性,其中元素是 "Etudiant"表的记录(元组)

c++ - 以编程方式访问笔记本电脑上的 CPU 风扇? ( Windows )

javascript - 如何在分页事件中突出显示数据表中的单词

python - Pycharm错误 "Process finished with exit code -1073740791 (0xC0000409)"

c++ - 如何在arm平台的c程序中调试全局变量损坏?

c++ - 这在 Opencv 文档中意味着什么?

java - 异步 SQL 查询返回结果 (Java)

javascript - 回调函数没有被调用

python - 尝试安装旧的 python 应用程序时出现 libevent 错误