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