用Python或C ++打开Maya callBacks查询Memory中的所有回调

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Python或C ++打开Maya callBacks查询Memory中的所有回调相关的知识,希望对你有一定的参考价值。

您好,我想知道是否有办法在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。

以上是关于用Python或C ++打开Maya callBacks查询Memory中的所有回调的主要内容,如果未能解决你的问题,请参考以下文章

CMD下输入python依然是提示不是内部或外部命令,也不是可运行的程序或批处理文件

win10无法将mklink/J项识别为mdlet、函数、脚本文件或可运行程序的名称。

用 gcc 编译 C 程序;无法打开输出文件 _.exe:没有这样的文件或目录

怎么用pycharm打开浏览器?

用c或c++播放wav文件,怎么实现

怎样用bat 生成打开文件里的指定程序或打开文件?