사실 이 포스트는 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")