'Python Maya'에 해당되는 글 1건

  1. 2012.02.14 Maya Python Script - String 의 처리
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")