Maya Node 를 개발할 때, attribute 로 모든 데이터를 저장하기에는 무겁고 처음 한번만 initialize 하면 되는 경우, 별도의 멤버변수를 만들어서 저장해 줄 수 있다.
그러나 이 때, Scene 을 저장했다가 open 할 때 initilize 가 되어 있지 않아서 연산되지 않는 경우가 발생한다. 이를 위해 Scene 이 열릴 때 한 번 더 업데이트를 해주면 된다.
이 때 사용되는 것이 MSceneManager 콜백 함수이다.
나는 다음과 같은 예제에서 활용하였다.
먼저 pluginMain.cpp 에
..
#include <maya/MSceneMessage.h>
MCallbackId openCallback;
..
MStatus initializePlugin(MObject obj){
...
openCallback = MSceneMessage::addCallback(MSceneMessage::kAfterOpen, lightFollicleNode::sceneOpenSetup)
...
}
MStatus uninitializePlugin(MObject obj){
...
MSceneMessage::removeCallback(openCallback);
...
}
위와 같이 Plugin 에서 Callback 함수를 add 해 주고, Plugin 을 deregister 할 때 반드시 removeCallback 을 해주어야 한다.
이제 Scene 이 열렸을 때 sceneOpenSetup() 이라는 함수를 호출하게 된다.
void lightFollicleNode::sceneOpenSetup(void *data){
cout << "***lightFollicleNode:scene open***" << endl;
isSceneOpen = true;
}
위와 같이 단순하게 flag 를 바꾸어주는 함수이다. 이를 통해서 compute function 에서 간단하게 업데이트 컨트롤을 해 줄수 있다.