posted by cimple 2014. 12. 30. 17:34

Numpy 를 설치할 때 멀쩡히 Python 2.7 버전이 설치되어 있음에도 Python version 2.7 required, which was not found in the registry" 오류가 뜰 때가 있다.


원인은 여러 가지가 있는데 기존 2.6버전이 설치되어 있을 경우, 또는 Python 2.7 버전의 설치파일에 문제가 있다는 원인(...?) 등등이 예상되는데


해결방법은 윈도우 레지스트리 수정을 통해서 해결할 수 있다.


http://belitino.tistory.com/132


해결은 위 링크의 도움을 받아서 해결할 수 있었고...


요약하면 


HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath


라는 키를 생성해서 데이터를 


HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\InstallPath


안에 있는 패스 데이터 값으로 지정해 주면 된다. (아마 C:\Pyton27\ 일 것임)



Wow6432Node 가 뭐지.... 신기하다.

posted by cimple 2012. 2. 14. 15:49

사실 이 포스트는 Maya Python Script 에 해당한다기보다는 Python String 처리라고 할 수 있다. 그러나 Maya Python Script 에도 유용하게 사용되었으므로 포스팅해 본다.


polyinfo 정보를 슬라이싱

Python script 에서 mesh 가 어떤 구조로 연결되었나를 로 알기는 사실 생각보다 까다롭다. (API 를 사용한다면 쉽겠지만)

Python script 에서 mesh 의 연결 구조를 알려 주는 script 는 polyinfo 이다.

만약, Mesh 의 이름이 pCube 라면

import maya.cmds as mc
mc.polyInfo('pCube1.vtx[0]', ve=True)


라고 입력하면, pCube 의 0번째 vertex 에 연결되어 있는 edge 가 무엇인지 알려준다. 그런데 이게 골치아프게도 return 값이 list 같은 형태가 아니라 string 이다.

# Result: [u'VERTEX 0: 10 2 0 \n'] # 


위와 같은 결과를 얻게 된다. 

즉 이것을 사용하고 싶으면 Python string 처리를 해서 잘라 써야 하는데, 익숙하지 않으면 상당히 귀찮은 일이다.

귀찮지만, 위의 경우에는 찬찬히 생각해 보면 다음의 과정을 거치면 된다.

1. 콜론(:) 의 위치를 찾는다.
2. 콜론 앞으로는 다 잘라내고, 콜론 뒤에만 쓴다.
3. 공백은 삭제하고, 각각의 숫자들만 따로 받는다.

이것이 다음 4줄의 코드로 구현된다.

tmp = mc.polyInfo('pCube1.vtx[0]', ve=True)

idx = tmp[0].find(':')

sparse = tmp[0][idx+1:]

result = sparse.split()



즉, 먼저 string 의 .find() 함수는 해당 문자열의 위치를 반환한다.

다음, 해당 문자열 바로 다음부터 쓰기 위해 슬라이싱을 할 수 있다. 문자열[숫자:] 로 하면, 문자열에서 해당 숫자 다음부터 잘라내서 쓰겠다는 말.

그리고, 그 문자열에 .split() 함수는 공백 단위로 문자열을 분리해준다.

이렇게 하면 다음과 같은 훌륭한 결과를 얻을 수 있다.

# Result: [u'10', u'2', u'0'] # 


이제 리스트 형태로 각각을 사용하기만 하면 끝.


검색, 치환하기

오브젝트 이름에서 공통된 특정 부분을 잘라내거나, 다른 것으로 바꾸고 싶을 때 replace 명령을 사용하면 된다.

jntName = 'Bizzy_L_Eye_03_jnt'

skinJntName = jntName.replace("_jnt","_skin")

skinGrpName = jntName.replace("_jnt","_grp")


posted by cimple 2012. 1. 11. 22:14

환경 변수에 등록된 각각의 폴더에, 같은 실행 파일이 있으면 어떻게 될까?

파이썬 프로그래밍을 하다 보면 버전별로 다른 라이브러를 제공하는 경우가 있기 때문에 다른 버전의 파이썬을 설치할 일이 생긴다.

이 때, 환경 변수에 각각의 파이썬 폴더를 등록시켜 놓았을 경우.

C:\Python26;
C:\Python27; 

와 같이 2개 버전의 환경변수를 모두 등록시켜 놓았다면, 이 때 실행파일 python.exe 은 어떤 파이썬 폴더를 실행시키게 될까?

답은 환경 변수에 '먼저 써놓은' 파이썬 폴더의 실행파일을 실행하게 된다.



C:\Python26;C:\Python27;  

이렇게 해 두면 Python 2.6 버전의 실행파일을 먼저 실행하게 된다는 것이다.





그렇다면, 특정 버전의 파이썬을 실행시키고 싶다면 어떻게 해야 할까?

각각의 폴더 안에 있는 파이썬 실행 파일을 python26.exe, python27.exe 하는 식으로 복사해서 하나 더 넣어둔다.

그리고 실행을 할 때

python26   myscript.py
python27   myscript.py

이런 식으로 하면 각각 다른 버전으로 실행시킬 수 있을 것이다.




ThEnd. 
posted by cimple 2011. 6. 30. 17:11



비둘기 프로젝트를 하는데 다음과 같은 조건을 충족시킬 문제가 떨어졌다.

1. 타임라인이 움직이면 깃털들이 랜덤하게 팔락거렸으면 좋겠다.
2. 추가로 플러그인을 만들지 말고 마야에 있는 기능으로 만들었으면 좋겠다.

이런 문제에서는 Maya Expression 이 적당하다. 각각의 깃털들에 대해서 서로 다른 Expression 이 적용되어야 하므로, Python Script 를 이용해서 Expression 을 만들었다.

코드는 다음과 같이 간단하다.



먼저 날개 mesh 들을 모두 선택한 다음, 날개 메쉬 각각에 expression 을 만들어 주는 것이다.

물론 이러면 항상 일정한 값으로 (0.0~3.0 사이 랜덤하게) rotateX 값이 깃털에 들어가게 되는데

controllable 하게 만들어 줄 수도 있다.

하지만 이 정도면 python script 상에서 어떻게 expression 을 만들면 되는지 hello world 는 찍을 수 있을 것이다.


ThEnd.





p.s.

결국 추가로 최종적으로 만든 expression 은 다음과 같다.

expression 안에 다른 attribute 를 넣고 싶으면 getAttr 같은 것을 쓸 필요 없이 바로 쓰면 되고,

if 문으로 조건문 제어가 가능하다.

Python script 로 2줄 이상의 expression 을 넣고 싶으면 일단은 다음과 같이 죽 붙여 쓰는 형태로 짜야 하는 것 같은데

다른 방법이 있는지 찾아봐야겠다.








p.s.2. 3중 따옴표 (""") 의 사용

재밌는 기능을 발견했다. Maya Python Script 에만 있는 기능은 아니고, Python 자체에 있는 기능인데 3중 따옴표를 쓰면 여러 줄의 문자열을 한 string 에 입력할 수 있다.



여러 줄의 expression 을 입력하고 싶을 때 스크립트로 다른 expression 을 입력해서 기존의 expression 을 수정하는 방법은 없는 것 같다. 그러면 또 다른 expression 이 생겨버린다. expression 을 수정하기 위해서는 expression editor 를 이용하는 방법 뿐인듯.

ThEnd.

posted by cimple 2011. 1. 31. 01:00
  • 무비킴 감사합니다. (_ _)(그저 인사만) 2010-12-14 02:06:00
  • 저는 오늘, 삼성 코엑스에서 열리는 시그라프 아시아 2010 에 갑니다. 부스 만들어놓고 있을테니 혹시 참석하시는 분들 서울에서 뵙죠.(오랜만에 대전 벗어난다 으하하) 2010-12-15 11:04:32
  • 여기는 시그라프 아시아 2010 랩부스!!(me2mms me2photo) 2010-12-16 15:57:29

    me2photo

  • 정신을 차리고 보니 12월 23일이었다.(너무 일찍 정신을 차렸어) 2010-12-23 23:34:05
  • 크리스마스 이브에 논문을 쓰며, 연구에 대해 느끼는 것 2가지. 하나. 세상에 혼자 할 수 있는 일은 아무것도 없다. 둘. 그럼에도 불구하고, 결국 모든 것은 스스로 해내야만 한다.(폭풍 라이팅!) 2010-12-24 16:30:49
  • 연구실에서 혼자논문쓰고있는데 카이스트학생들이 연구실에 새벽송을돌면서불러주네요 참 좋은일하는 친구들입니다 그들이주고간 먹거리(me2mms me2photo) 2010-12-25 01:31:44

    me2photo

  • 앗 화이트 크리스마스(깨알같은 하얀눈) 2010-12-25 23:09:37
  • 크리스마스가 지난 지금, 내년의 크리스마스를 맞을 나에게 부탁한다. 제발, 올해처럼 기숙사에서 홀로 너구리에 햇반을 말아먹는 우울하고 청승맞은 크리스마스는 보내지 말라고.(그렇다면 즐겁고 경쾌하게 짜파게티를 끓이고 있을지도 모르지.) 2010-12-26 03:27:10
  • 엇, 너무 멋지게 나왔다. 라비, 벤머, 디지털 미개인까지… 닭사줘서 special thanks 에 들어간 Crescendo 까지 포함하면 연을 두고 있는 작품이 4개나 되네 . 크~;
    [영상] Ajou Univ. Division of Digital Media Demo Reel http://durl.me/4fzrp by 서리 에 남긴 글 2010-12-26 23:18:59
  • 무비킴 님의 말을 듣고 문득 그려보고 싶어서 만들어낸 꼬마시인 님의 찐빵 캐릭터. 발로 슥삭 그렸는데, ㅡ_ㅡ 엇 왜 닮았지(일단 좀 크게 그리면 됩니다. me2photo) 2010-12-28 03:03:07

    me2photo

  • 좋은 아이디어가 생각난 찐빵맨(찐빵맨 시리즈 1 me2photo) 2010-12-28 03:08:07

    me2photo

  • 여자친구로 인해 발그레해진 찐빵맨(찐빵맨 시리즈 2 me2photo) 2010-12-28 03:08:28

    me2photo

  • 연구가 잘 안되는 찐빵맨(찐빵맨 시리즈 3 앞으로 계속 업데이트예정 me2photo) 2010-12-28 03:08:54

    me2photo

  • 셀라비(네이버 영화 셀라비. 혹시나 했는데 정말 있네; me2movie 셀라비) 2010-12-29 12:48:09
    셀라비
    셀라비
  • 내가 요즘 어지간히 조급한가보다. 목소리가 커지고, 안절부절 못하며, 짜증이 늘고, 소란스러워지기 시작했다.(차분해지자. 침묵하라.) 2010-12-30 12:21:40
  • 시온의 자녀들아 너희는 너희 하나님 여호와로 말미암아 기뻐하며 즐거워할지어다. 그가 너희를 위하여 비를 내리시되 이른 비를 너희에게 적당하게 주시리니 이른 비와 늦은 비가 예전과 같을 것이라 (요엘 2:23) - 2011년 올해, 내게 주어진 말씀.(새해는 언제나 교회에서 송구영신 예배로 맞는 것이, 나에게 가장 맞게 느껴진다. 올해 내게 주어진 말씀. 이른 비와 늦은 비.) 2011-01-01 03:13:51
  • CASA2011 에 논문을 제출했습니다. 도와 주신 모든 분들. 특히 헌신스럽게 수고해주신 병국이형, 그리고 영호에게 정말로 감사하다는 말씀을 전합니다.(그리고, 다시 시작!) 2011-01-04 22:08:43
  • 이런 메일이 와 있더라고요. 뭔가, 되게 기분이 좋았습니다. 'Author' 라니. 내가.(후아;; me2photo) 2011-01-05 07:14:39

    me2photo

  • 요청받은 투덜 찐빵맨(투덜투덜 나는 잘 본적없지만 me2photo me2photo) 2011-01-05 07:33:07

    me2photo

  • 영화를 사랑하는 찐빵맨 (응?)(남들보다 더욱 각별한 찐빵맨의 영화사랑 me2photo) 2011-01-05 07:33:37

    me2photo

  • 연구실에 일찍 출근한 날이면 맛볼수있는, 연구실에서 바라보는 일출.(me2mms me2photo) 2011-01-07 08:04:24

    me2photo

  • 새다(새다 새 me2photo) 2011-01-09 20:43:44

    me2photo

  • 마야에서 손쉽게 Skeleton 을 렌더링 할 수 있도록 만들어 주는 파이썬 스크립트를 짜 보았습니다. 필요하신 분들은 자유롭게 사용하세요~(Maya Python Script Solid Skeleton me2photo) 2011-01-10 21:32:23

    me2photo

  • Solid Skeleton using Python 이 하루만에 버전 2.0 이 나왔습니다; (요구에 의해) UI 가 추가되었고, 실시간으로 조인트 크기와 모양을 변경할 수 있습니다. 유용하게 쓰세요!(Maya Skeleton Rendering Solid Skeleton using Python Script me2video) 2011-01-11 03:46:53

  • 이번겨울은 참 눈도많이오고 춥군요 딱히 누가 결혼한대서 이러는건 아니야(me2sms) 2011-01-15 04:46:18
  • 잔혹한 날씨고, 잔혹한 시간이다.(힘들어 하는 사람을 지켜볼수밖에 없다니;) 2011-01-16 02:34:44
  • 영화가 너무 보고싶다. 그래서 혼자서 극장으로 달려갈 계획임(자전거 타고 둔산 CGV까지 고고고고거곡) 2011-01-17 19:19:06
  • 영하10도의 날씨를 뚫고 자전거를 타고 학교에서 여기까지 온건 객기였나 끝나면 열두시 넘을텐데 어떻게가지 ㅠㅠ(me2mms me2photo) 2011-01-17 21:01:09

    me2photo

  • 하루종일 폰을 기숙사에 두고왔는데 열어봐도 별다를게 없구나. 미투나 해야지.(me2sms) 2011-01-25 08:32:52
  • '반쪽바리' 소리를 들으면서도 '이충성'이라는 이름을 버리지 않은, 일본에 귀화한 한 축구선수. 그의 인터뷰와, 그의 일대기가, 기성용의 저열함과 왜 이렇게 극명히도 대비될까.(이번 대회의 승리자라는 영예는 그의 몫으로 예비되어 있었을지도.) 2011-01-30 13:18:25

이 글은 cimple님의 2010년 12월 14일에서 2011년 1월 30일까지의 미투데이 내용입니다.

posted by cimple 2011. 1. 10. 21:23




캐릭터의 Skeleton 을 렌더링 하고 싶을 때가 있지요. 하지만 조인트는 렌더링 되지 않습니다, 따라서 해당 위치에 sphere 와 cylinder 를 넣어주는 마야 파이썬 스크립트를 짜 보았습니다.

원래 Solid Skeleton 이라는 멜이 있지만, 해당 스크립트는 cone 을 생성하는 방식으로 되어 있어서, 파이썬 버전으로 새롭게 만들었습니다.

사용 방법은 간단합니다.



1. root 조인트를 선택
2. makeSolidSkeleton() 실행



이렇게 하면 됩니다,
(물론, 파이썬 스크립트이므로 스크립트 에디터의 파이썬 탭에서 실행해야 하는 건, 다들 아시죠?)

그리고 파라미터를 조절해서 스켈레톤의 구와 막대의 크기를 조절하는 것이 가능합니다.

makeSolidSkeleton(ballScale, edgeScale)

여기 ballScale 과 edgeScale 의 값을 바꾸어 주면 됩니다. 기본값은 둘다 1.0 으로 되어 있습니다.

ex) makeSolidSkeleton(2, 0.5)
이렇게 하면 구는 두배로 커지고 edge 는 절반으로 가늘어 질 것입니다.


마음껏 사용하시고, 버그나 수정사항이 발견되면 말씀해 주세요!

ThEnd.
posted by cimple 2010. 8. 17. 14:29

Python Script 로 처음 구현해 본 Fibonacci 수열이다.

List 를 사용해서 손쉽게 구현할 수 있었다.



fibonacci = [1, 1]
max_range = 7;

for i in range(0, max_range-2, 1):
   a1 = fibonacci[i];
   a2 = fibonacci[i+1];
   fibonacci.append(a1+a2);

print fibonacci



그리고 이 Fibonacci 수열을 이용해서 구를 extrude 시키는 기능을 구현해 보았다.


코드는 다음과 같다.





numFace = 0;

for i in range (0, len(fibonacci), 1): 
   mc.select(cl = True); 
   for j in range(0, fibonacci[i], 1):
      mc.select("pSphere1.f[%d]" % numFace, add=True)
      numFace = numFace+1   
   mc.polyExtrudeFacet(ltz = 0.1*fibonacci[i]);


그런데 이 때, 2번째 for 문의 range 를 1로 시작하는 실수를 했더니 계속해서 문제가 발생했다.
즉, 이런 형태의 for 문이 만들어지면

for i in range (1, 1, 1)

for 문은 아무런 기능을 하지 못하고, 만약 그 안에서 특정 기능을 수행해야 할 경우 error 를 발생시키게 된다.

좌우지간 위의 코드를 실행하면 다음과 같은 결과를 얻는다.








그리고 다음은 피보나치 수열을 11번 항까지, 그리고 extrude 에 keepFacesTogether = 0 을 주고 실행한 모습.




별 거 아니지만 재밌다.


ThEnd.

posted by cimple 2010. 8. 13. 16:03

(어쩐지 좀 두서없는 포스팅같기는 한데;; 그리고 요즘 R 프로그래밍을 함께 공부하고 있는데 Python 과 문법이 유사하다는 생각을 무척 많이 하고 있다.)


1. Python 의 List 생성.

Python 의  List 는 데이터를 저장하는데 훌륭한 자료구조를 제공해주고 있다.
일단 Python List 에 데이터를 저장하기 위해서는 다음과 같이 저장한다.


myFirstList = ["red", 21.00, 1]


myFirstList 라는 list 이름을 정해주고, 대괄호 [] 로 묶어주면 그 안에 원하는 data 를 넣어주면 된다. 이 때 data 의 type 이 위의 예제처럼 달라도 상관이 없다.

MEL 에서는 이것이 불가능했지만, python list 에서는 가능하고, 심지어 list 도 list 안에 들어가기 때문에 간편하게 데이터를 관리할 수 있다.


list 에 있는 데이터에 접근하기 위해서는 c 의 배열에 접근하는 방법과 비슷하게 접근하면 된다.

myFirstList[0];

위에는 "red" 가 들어있게 된다.



재미있는 것은, maya 에서 현재 내가 선택하고 있는 object 를 list 안에 등록할 수 있다.
다음과 같이 등록하면 된다.

import maya.cmds as mc;
listObject = mc.ls(sl=True);

MEL 커맨드로 ls -sl 을 하면 현재 내가 선택하고 있는 object 를 반환하는 기능을 이용한 것이다.
print 해 보면 다음과 같이 나온다.

print listObject;

[u'pSphere1', u'pCube1']


pSphere1 을 먼저 선택하고, pCube1 을 다음에 선택한 다음 list 에 등록하면 위와 같이 들어간다.

u가 붙은 이유는 잘 알수 없으나, 실제로 값을 빼 보면 u 는 빠져있고 pSphere1 만 나온다.






2. List 의 크기 받아오기

언제나 자료의 크기를 아는 것은 중요하다. Python Script 에서는 len() 이라는 함수를 사용한다.

len(custom_list);

이것으로 사용자가 생성한 list 의 크기를 알 수 있다.







3. List 의 data 에 iterative 하게 접근하기

List 의 data 에 대하여 iterative 하게 접근할 수 있다. 이는 for 문으로 가능한데, Python Script 에서 for  문은 다음과 같은 형태를 가진다.


for i in range(start, end, increment)


그리고 Python Script 의 for 문은 조금 독특한 문법을 가지고 있는데, for 문 다음에 콤마 (:) 로 시작해서 들여쓰기로 해당 scope 를 표시한다. 즉


for i in range(0, 5, 1) :
          print i
print "done"



위와 같은 코드가 있을 때, i 는 1, 2, 3, 4, 5 로 반복문을 돌면서 찍히겠지만 "done" 은 한 번만 찍힌다.


for i in range(0, 5, 1) :
          print i
          print "done"


위와 같은 경우는 done 도 5번 찍히는 것이다.

이 반복문을 이용해서 list 안에 있는 data 들에 접근하기 위해서는



for i in range(0, len(custom_list), 1):
          print(custion_list[i])




이렇게 하면 list 에 있는 요소들에 순차적으로 간편하게 접근할 수 있다.







ThEnd.




p.s. 다음 링크로 가면 파이썬의 기본 데이터 유형인 사전, 리스트, 터플에 대해서 소개하고 있다.

http://coreapython.hosting.paran.com/dive/chap03.html#d0e5887
 
posted by cimple 2010. 8. 12. 19:52


1. 변수의 선언

Maya Python Script 에서 변수는 따로 자료형을 선언해주지 않고, 바로 이름을 적고 값을 할당해 주면 된다.

myFirstVariable = 10
myFirstVariable = "Text"


MEL 과 같이 자동으로 자료형이 정해지며, 숫자로 시작하거나 이미 커맨드로 등록되어 있는 단어는 사용할 수 없다.

Python 의 변수는 MEL 보다 더 많은 자료형을 담을 수 있어서 더 강력하다고 하는데, 그건 더 활용해봐야 할 일인듯.


2. 변수의 활용 예제

특정 script 가 반환하는 자료형을 변수에 담아서 스크립트에 활용할 수 있다.
예를 들어, polyCube 같은 경우는 반환값이 string 형태이다. 그리고 이 string 은 해당 object 의 이름을 반환한다.

특정 명령어의 반환값과 그 type 을 알고 싶다면, 해당 명령어를 드래그>우클릭 하여 Quick Help 탭을 연 후, 그 Quick Help 창 위에서 다시 우클릭>Show Command Documentation 하면 바로 Documentation 에 연결되어 해당 명령어가 Return 하는 값에 대한 정보를 볼 수 있다.

cubeToBevel = mc.polyCube( w=1 , h=1, ... , ch=1)

이런 형태로 polyCube 가 반환하는 오브젝트 이름의 string 을 cubeToBevel 이라는 사용자 정의 변수에 담아 놓고,

mc.polyBevel(cubeToBevel, offset=0.5, ... , ch=1)

이런 식으로 쌍따옴표 " "  형태의 string 이 들어가던 부분에 변수를 넣어 놓는 형태로 스크립트를 작성할 수 있다.


3. 변수의 출력

각종 변수를 출력하는 방법은 전통적인 C 의 문법과 크게 다르지 않다.
다음과 같이 출력하면 된다.

intLife = 42
fPI = 3.14
hexColor = 0xFFCC00

print "My values are %d and %f" % (intLife, fPI)
print "The value of hexColor is ... %f" % hexColor



출력할 스트링 뒤에 % 를 붙여주고, 2개 이상일 경우에는 괄호로 묶어주면 된다.


ThEnd.

posted by cimple 2010. 8. 12. 19:12

1. Python Scripting 시작하기

Maya 에서 Python Scripting 을 가장 간단히 할 수 있는 방법은 MEL 과 똑같이 Script Editor 를 사용하는 방법과 Command Line 을 사용하는 방법이다.

하지만 Python Script 를 실행하기 위해서는 해당 실행창에서만 실행 가능하다.

Script Editor 에서는 Python 탭에서 실행해야 하고,



Command Line 에서는 좌측의 MEL 글자를 클릭하면 Python 스크립트 입력창으로 바뀌게 된다.




2. Hello World 찍어보기

Script Editor 의 Python 탭에서 간략하게 Hello World 를 찍어보자.
다음과 같이 입력하면 된다.


print "Hello, World!"






이렇게 입력한 뒤 실행하면 위쪽의 History 창에 실행 결과가 표시될 것이다.
다음도 가능하다.


print 25
print 25 / 2
print 25.0 / 2
print 25 / 2.0






3. Cube 하나 만들어보기

Python Script 를 실행하기 위해서는 maya 의 특정한 모듈들을 import 해야 한다.
그리고 그 모듈 안에 들어 있는 명령어를 실행하는 방식으로 이루어진다.

요약하면

Step 1) 필요한 Maya 모듈 import
Step 2) 필요한 명령어 실행


순으로 이루어지는데, 큐브를 하나 생성하려고 하면

ex)
import  maya.cmds
maya.cmds.polyCube()


이런 식으로 실행해야 한다.



import 는 한 번만 해도 되지만, 명령어를 실행할 때에는 매번 위와 같이
maya.cmds.명령어()
의 형태로 입력해야 하며, 커맨드를 하나의 function 처럼 인식하므로 뒤에 괄호 () 를 붙여 주어야 한다.

물론 저렇게 입력하는 것이 tedious 한 일이므로, 좀더 간결하게 입력하기 위해서

import maya.cmds as mc

이렇게 mc 라는 단축어로 import 하면 앞으로

mc.polyCube()

로 실행해도 정상적으로 실행할 수 있다.





4. MEL command 의 Echo 를 Phython Command 에서 실행하는 방법
(Phython Command 에 각종 Flag 를 추가하여 실행하는 방법)


마야의 메뉴를 클릭하거나 Shelf 에 있는 버튼 등을 눌러서 특정 명령을 실행하면, Script Editor 에서 그에 해당하는 커맨드가 표시되는 것을 확인할 수 있다.

이러한 식으로 커맨드의 Echo 를 받아 스크립트를 작성하는 방법을 자주 활용하게 되는데, Python Command 에서 이러한 MEL command 의 Echo 를 받아서 실행하는 방법은 다음과 같다.

MEL command 에서는 polyCube 를 생성할 때

polyCube -w 1 -h 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 1

이런 식으로 명령어가 호출되는데, Phython command 에서는 다음과 같이 하면 된다.

(위에서 import 를 단축어로 받아왔다고 가정한 후)

mc.polyCube (w=1, h=1, d=1, sx=1, sy=1, sz=1, ax = (0, 1, 0), cuv = 4, ch = 1)

여기서 ax = (0, 1, 0)  과 같이 하나 이상의 배열 형태로 되어 있는 Flag 에 주목하자.



이 외에, scale 을 조정할 때 Maya command 에는 다음과 같이 표현된다.

scale -r 4 4 4;

하지만 여기서 -r 은 numeric value 를 attribute 로 받는 Flag 가 아니라, relative 하게 크기를 조절할 것인지를 결정하는 Boolean type Flag 이다. 따라서 이를 Python script 에서 실행하고 싶으면

mc.scale(4, 4, 4, r=True)

이런 식으로 실행해야 한다.



또 한 가지. polyBevel 같은 명령어의 경우, 커맨드의 맨 마지막에 해당하는 오브젝트의 이름이 오게 된다.

polyBevel -offset 0.5 -offsetAsFraction 1  ......... -angleTolerance 180 -ch 1 pCube1;

python script 에서는 이 때 해당하는 오브젝트의 이름을 맨 앞으로 가지고 오고, 쌍따옴표를 붙인다.

mc.polyBevel ("pCube1", offset=0.5, ...., ch=1)



MEL 과 마찬가지로 Script Editor 에서 완성된 Python script 를 드래그 한 후 가운데 버튼을 클릭하고 shelf 에 드래그&드랍하면 아이콘이 생성된다. 이것을 클릭해서 스크립트를 실행할 수 있다.





Script Editor 에서 각종 명령어들 (예를 들면 scale 등) 의 flag 를 확인하고 싶다면 해당 명령어를 드래그하고, 우클릭을 하고 있으면 나타나는 메뉴에서 Quick Help 라는 메뉴를 확인할 수 있다. 클릭하면 우측 하단에 해당 명령어에 해당하는 flag 들이 표시된다. 하지만 어떤 type 을 사용하는지까지는 표시되지 않아서 효용성을 잘은 모르겠다;






ThEnd.