2013-08-02 82 views
3

我在Maya中創建的自定義節點有一個小問題。如果我這樣做:Maya:刪除節點不直接調用析構函數

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

它不調用類析構函數。但是,如果你做了一個新場景,打開一個新文件,或者做任何迫使當前場景被破壞的東西,那麼析構函數最終會被調用。

事情是我有一些內存分配,我想立即清除,而不是等到結束才真正清除它們。因爲他們不再需要,所以他們應該被清除。

我查看了文檔,並沒有看到任何虛擬函數,我可以重寫,這將在節點被實際刪除時調用,或者類似的事件。有這樣的函數來跟蹤屬性之間的連接(在這種情況下實際使用它),但沒有這樣的事情來刪除。

因此,如果您有任何人有一個繞過想法或模擬這種方式,請分享!

謝謝。

W¯¯

回答

4

所以,球員,

終於找到了。這完全不是它應該在的地方。 Autodesk有一些奇怪的做法。

這就是:

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

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

所以,如果一個節點被刪除,這個回調實際上是調用。儘管如此,我仍然希望通過重寫一個函數來直接在節點定義中執行此操作。

感謝大家,拍了一下這個問題。希望這能最終幫助你們中的一些人!

+0

這是足夠的代碼,或者你必須調用回調具體的析構函數? –

+0

如果您在構造函數中或在該節點的任何其他位置分配了任何內容,則需要在那裏釋放它。特別是如果在內部,您的數據可以由多個節點共享。有點類似於共享指針,請確保您減少計數並在需要時刪除。 – widgg

+0

好吧,因爲我的問題看起來像你的,效果稍有不同。使用刪除鍵刪除節點(MPxNode)時,Maya會崩潰。如果我通過代碼(mdg.deleteNode)刪除它,那麼它可以工作。但是中斷nodeRemoveCallback似乎不夠。 –