4

我在 Maya 中创建的自定义节点有一个小问题。如果我这样做:

createNode -n "MyInstance" "MyNode";
delete "MyInstance";

它不调用类析构函数。但是,如果你做一个新场景,打开一个新文件,或者做任何强制破坏当前场景的事情,最终会调用析构函数。

问题是我有一些内存分配我想立即清除,而不是等到最后才真正清除它们。因为不再需要它们,所以应该清除它们。

我查看了文档,但没有看到任何可以覆盖的虚拟函数,这些虚拟函数会在节点被实际删除或类似事件时调用。有这样的功能来跟踪属性之间的连接(在这种情况下实际使用它),但没有这样的删除。

因此,如果你们中的任何人有绕过的想法,或模拟它的方法,请分享!

谢谢。

W

4

1 回答 1

6

所以各位,

终于找到了。它完全不是它应该在的地方。Autodesk 有一些奇怪的做事方式。

这里是:

void removeMyNode(MObject &node, void *clientData)
{
  MFnDependencyNode nodeFn(node);
  MGlobal::displayInfo(MString("Removal callback node: ") + nodeFn.name());
}

MDGMessage::addNodeRemovedCallback(removeMyNode, "MyNode", NULL, &status);

所以,如果一个节点被删除,这个回调实际上会被调用。尽管如此,我还是希望通过覆盖函数直接在节点定义中执行此操作。

感谢所有看过这个问题的人。希望这最终可以帮助你们中的一些人!

于 2013-08-02T16:04:16.777 回答