Hallo, ich frage mich, ob es eine Möglichkeit ist, alle ** Benutzer abfragen Erstellt callbacks
in Maya?, Und auf die gleiche Weise, wenn Ich kann abfragen, welche Objekte oder Knoten mit ihnen verbunden sind. Ich mag zu jeder Zeit die Sauberkeit im Speicher besser verwalten und keinen Rückruf im Speicher verloren lassen. **öffnen Maya Rückrufe in Python oder C++ Abfrage alle Rückrufe in Speicher
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
# ---------------------------------------------`-`---------------------------------------------- #
Hier habe ich ein Beispiel, wo ich ein Objekts auf einen Callback-Tag und Druck etwas, wenn einige Bedingungen passieren auch. Fügen Sie jede Callback-ID zum Array hinzu, um sie später zu löschen.
Ich brauche nur ein Licht, auch wenn in C++ Ich konnte auf die Dokumente über die Empfehlungen hier überprüfen.
Sobald Sie die Adresse des Rückrufs verlieren, ist es weg. – user1767754