2013-08-02 2 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

약간 다른 효과로 내 문제가 귀하의 것 같아서 좋습니다. delete 키를 사용하여 노드 (MPxNode)를 삭제하면 Maya가 충돌합니다. 코드 (mdg.deleteNode)를 통해 삭제하면 작동합니다. 그러나 nodeRemoveCallback을 방해하는 것으로는 충분하지 않습니다. –

관련 문제