Открытые вызовы Maya в Python или C ++ запрашивают все обратные вызовы в памяти

Здравствуйте, мне интересно, если есть способ запросить все ** Создано пользователем 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# ---------------------------------------------`-`---------------------------------------------- #

Здесь я создал пример, где я помечаю объект для обратного вызова и печатаю что-то, когда выполняются некоторые условия. добавить в массив каждый идентификатор обратного вызова, чтобы удалить его позже.

Мне просто нужен свет, даже если в C ++ Я мог бы проверить документы о рекомендациях здесь.

0

Решение

Там нет никакого способа делать то, что вы хотите. Самое близкое, что вы можете прийти, это использовать MMessage :: nodeCallbacks чтобы получить идентификаторы обратного вызова, зарегистрированные для определенного узла.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]