У меня небольшая проблема с пользовательским узлом, который я создал в Maya. Если я сделаю что-то вроде:
createNode -n "MyInstance" "MyNode";
delete "MyInstance";
Это не вызывает деструктор класса. Но если вы создаете новую сцену, открываете новый файл или делаете что-либо, что вызывает разрушение текущей сцены, деструктор наконец вызывается.
Дело в том, что у меня есть некоторые выделения памяти, которые я хотел бы очистить сразу, а не ждать до конца, чтобы фактически очистить их. Потому что они больше не нужны, поэтому они должны быть очищены.
Я посмотрел в документации, и я не вижу каких-либо виртуальных функций, которые я мог бы переопределить, которые были бы вызваны, когда узел фактически удален, или подобное событие. Есть такая функция для отслеживания связи между атрибутами (в действительности используется в этом случае), но нет такой вещи для удаления.
Так что, если у кого-то из вас есть идея обойти или смоделировать это, пожалуйста, поделитесь!
Благодарю.
W
Так, ребята,
Наконец-то нашел. Это совсем не то, что должно быть. У Autodesk есть какой-то странный способ сделать что-то.
Вот:
void removeMyNode(MObject &node, void *clientData)
{
MFnDependencyNode nodeFn(node);
MGlobal::displayInfo(MString("Removal callback node: ") + nodeFn.name());
}
MDGMessage::addNodeRemovedCallback(removeMyNode, "MyNode", NULL, &status);
Итак, если узел удален, этот обратный вызов фактически вызывается. Тем не менее, я бы предпочел способ сделать это непосредственно в определении узла путем переопределения функции.
Спасибо всем, кто взглянул на этот вопрос. Надеюсь, что это может помочь некоторым из вас в конце концов!
Других решений пока нет …