2017. 6. 16. 11:17
참고링크 :
http://discourse.techart.online/t/undo-in-maya-mel-python-execution/2431/7
Maya 의 Undo 는 Queue 에 순차적으로 작업을 쌓는다. 그런데 Undo 를 수행했을 때 Undo 를 여러번 누르는 것이 아니라 Ctrl+Z 한번에 Undo 되기를 원하는 작업이 있을 수 있다. 예를 들어 오브젝트를 한 백개쯤 복사했다던가.... 이럴 때 Undo 를 100번을 눌러야 한다면 그닥 유쾌한 일이 아닐 것이다.
Maya command 의 undoInfo() 가 해당 기능을 가지고 있다.
1 2 3 4 | import maya.cmds as mc mc.undoinfo(openChunk = True ) #Code Code Code mc.undoinfo(closeChunk = True ) |
위 #Code Code Code 에 해당하는 부분을 한방에 Undo 시켜 주는 것이다.
그런데 openChunk 기능은 maya 의 UndoQueue 를 직접 건드리는 상당히 위험한 기능이기 때문에 안전하게 사용할 필요가 있다. 그래서 열고 닫기가 확실하게 진행될 수 있도록
1 2 3 4 5 | mc.undoInfo(openChunk = True ) try : #CODE CODE CODE finally : mc.undoInfo(closeChunk = True ) |
위와 같은 방식으로 작성하는 것이 안전하다.
또는 다음과 같이 context class 를 만들어서
1 2 3 4 5 6 7 8 | class UndoContext( object ): def __enter__( self ): mc.undoInfo(openChunk = True ) def __exit__( self , * exc_info): mc.undoInfo(closeChunk = True ) with UndoContext(): ... your code here.... |
UndoChunk 가 안전하게 열고 닫히도록 할 수도 있다.