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() 가 해당 기능을 가지고 있다.
import maya.cmds as mc mc.undoinfo(openChunk=True) #Code Code Code mc.undoinfo(closeChunk=True)
위 #Code Code Code 에 해당하는 부분을 한방에 Undo 시켜 주는 것이다.
그런데 openChunk 기능은 maya 의 UndoQueue 를 직접 건드리는 상당히 위험한 기능이기 때문에 안전하게 사용할 필요가 있다. 그래서 열고 닫기가 확실하게 진행될 수 있도록
mc.undoInfo(openChunk=True) try: #CODE CODE CODE finally: mc.undoInfo(closeChunk=True)
위와 같은 방식으로 작성하는 것이 안전하다.
또는 다음과 같이 context class 를 만들어서
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 가 안전하게 열고 닫히도록 할 수도 있다.