posted by cimple 2017. 6. 28. 12:55

파이썬의 클래스나 함수에 대해 __doc__ 을 통하여 documentation 을 할 수 있다.

재미있는 것은 쌍따옴표 3개 """ 를 통해서도 가능한 것인데 다음 코드를 보면 알 수 있다.


def foo():
    """
    This is function!
    """
    return 

print function.__doc__
help(function)    


위와 같이 함수 맨 앞에 쌍따옴표 3개를 넣는 것만으로도 해당 함수에 대한 설명을 __doc__ 인자에 넣어줄 수 있다.



posted by cimple 2017. 6. 19. 16:09

PyCharm 에서 Maya API 및 Script 의 Autocompletion 이 가능하게 하는 셋팅이다.

다음 링크를 참조하였다.


https://stackoverflow.com/questions/39072433/how-to-reference-maya-commands-in-pycharm

https://forums.autodesk.com/t5/maya-programming/maya-python-api-2-0-ide-code-complete/td-p/6239681


1) Maya Python Interpreter 연결하기

Pycharm 의 Python 인터프리터를 Maya Python 인터프리터로 연결한다.

물론 Maya 가 하는 기능을 모두 하지는 못하지만, 오류가 발생하는 것을 막을 수 있다.


Setting > Project Interpreter 들어가서

톱니바퀴 > More... > Project Interpreter 를 Maya 의 것으로 선택한다.

현재 내 리눅스 Maya2015 버전의 경우 다음과 같다.


/usr/autodesk/maya2015-x64/bin/mayapy


2) Maya autocompletion 연결하기

이 경우 좀 직관적이지 않은데, 다음과 같이 수행한다.

- 위의 Project Interpreters 메뉴에서 사다리 계층구조 모양 아이콘 클릭

- /usr/autodesk/maya2015-x64/lib/python2.7/site-packages 를 지움

- /..../devkit/other/pymel/extras/completion/py

를 추가한다.

그런데 현재 내 maya2015 devkit 의 경우 추가했을 때 MPxNode 를 인지못하는 버그가 있다. 이유불명.

그래서 인터넷에서 Maya2017 Devkit 을 다운로드 받은 뒤 해당 autocompletion 을 추가하였다.


.../site-packages 를 지우는 과정이 좀 직관적이지 않은데, 지우지 않을 경우 제대로 autocompletion 이 되지 않는다.

그러나 이 경우 numpy 와 같은 external library 들을 설치했을 경우 해당 라이브러리의 autocompletion 이 어떻게 이루어지는가는 지켜 보아야 할 것 같다.


posted by cimple 2017. 6. 16. 17:08

Maya 뿐만 아니라 많은 아이콘들을 마음에 드는 이미지들로 바꿀 수 있다.

일단 아이콘을 선택해서 우클릭 > 속성(p) 에 들어가면 다음과 같은 화면을 볼수 있는데

여기에서 나는 이미 아이콘 이미지를 바꾸어 놓았는데, 왼쪽 위의 마야 아이콘 이미지가 있는 곳을 클릭하면 사용자 아이콘을 선택할 수 있는 창이 뜨게 된다.

인터넷에서 Maya 아이콘을 다운로드 받아서 여기에 연결시켜서 쓰면 된다. 다른 아이콘들도 이쁘게 해서 쓰도록 하자.



posted by cimple 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 가 안전하게 열고 닫히도록 할 수도 있다.