posted by cimple 2015. 12. 13. 02:49



일단 위의 링크에서 몇 개의 example을 확인할 수 있다. 

posted by cimple 2015. 12. 11. 23:11

기본적으로 Maya Python Command 는 '실행해야' 동작하는 구조를 가지고 있다. 즉, 무언가 Maya 로부터 Active 하게 기능을 실행하는 데에는 주로 Node 를 활용해야 한다는 것이다.


가장 쉬운 예로, 내가 Maya 의 Time Slider 를 이리저리 왔다갔다 했을 때, 현재 프레임이 찍히도록 하고 싶다, 라고 하면 일단 난감하다. 기본적으로 Python command 는 'maya.cmds.currentTime(q=True)' 라는 명령어를 실행해야 현재 프레임을 받아올 수 있기 때문이다.


그러나, Active 한 기능을 비교적 쉽게 구현할 수 있다. 바로 마야에서 제공하는 Callback 함수를 이용하는 것이다.


위의 쉬운 예제를 코드로 짜면 다음과 같다.


import maya.cmds as mc
import maya.OpenMaya as om
def customFtn2(msg):
    print 'currentTime : ', int(mc.currentTime(q=True))
frameCallback = om.MEventMessage.addEventCallback('timeChanged', customFtn2)


이렇게 하면 타임 슬라이더바를 움직이는 것 만으로도 스크립트를 실행할 수 있다.

그러나 여기에서 유의할 것은 한번 연결해준 콜백 함수는 마야가 꺼질때까지 동작한다. 그러므로 더 이상 이 기능을 사용하고 싶지 않으면, 내가 연결해준 콜백 연결을 해제해야 한다. 이 해제는 콜백 넘버를 통해서 할 수 있는데, addEventCallback 함수가 리턴하는 것이 바로 이 콜백 넘버이다. 

그러므로 아래와 같이 콜백 연결을 삭제할 수 있다.


om.MEventMessage.removeCallback(frameCallback)



이렇게 해 주면 된다.





Maya command 중에 scriptjob 커맨드를 사용하면 이와 유사한 효과를 낼 수 있다.

그러나 api 를 사용하는 것과 달리, 명령이 종료한 후에 효과를 발휘한다.

쉽게 말해, 위의 예제에서 타임 슬라이더바를 움직이는 동안에는 효과가 없고, 마우스 버트를 놓는 순간부터 효과가 발휘된다는 뜻이다.