회원 로그인
|
Python for Maya - 11. Lattice vertex random move (re.findall)
기반으로 복습하는 차원에서 재정리한 것입니다.
Deform Lattice 제어한다.
알고리즘은 대략..
lattice point를 하나를 선택하면 ffd1Lattice.pt[5][5][0]라고 나오는데 re.findall 함수를 사용하여 앞에 ffd1Lattice.pt를 head_ 변수에 넣고, 뒤의 위치값을 num_ 변수에 넣고 random을 하게 된다.
object에 Deform Lattice를 적용한다.
Lattice Point를 일부 선택한다.
스크립트를 적용하면 랜덤으로 lattice point가 이동된다.
* Code
import maya.cmds as cmds import re, random latt_ = cmds.ls(sl=1) # 선택된 것이 있는지 묻는다. if latt_: # 선택한 Lattice 앞 정보를 추출하여 head_ 변수에 치환한다. head_ = re.findall(r'(.*?)[.*?][.*?][.*?]', latt_[0])[0] for pt_ in latt_: # 선택한 Lattice 뒷 정보를 추출하여 num_ 변수에 치환한다. num_ = re.findall(r'[(.*?)]', pt_) # num_에 정보가 있는지 묻는다. if num_: range_set = [] for n_ in num_: # num_ 변수에 :가 있는지 묻는다. if ':' in n_: # : 앞뒤의 문자를 리스트로 뽑아낸다. range_set.append([int(x) for x in n_.split(':')]) range_set[-1][1] += 1 else: range_set.append([int(n_), int(n_) + 1]) for one_ in range(*range_set[0]): for two_ in range(*range_set[1]): for three_ in range(*range_set[2]): range_ = (-1, 1) x_ = random.uniform(*range_) y_ = random.uniform(*range_) z_ = random.uniform(*range_) cmds.move(x_, y_, z_, '%s[%s][%s][%s]' % (head_, one_, two_, three_), r=1)* Comment
head_ = re.findall(r'(.*?)[.*?][.*?][.*?]', latt_[0])[0]Lattice Point를 선택하면 ffd1Lattice.pt[5][5][0] 포멧을 가지는데 re.findall로 ffd1Lattice.pt를 추출하게 된다.
[ 은 [를 문자열을 표현 해주기 위한 기호이고, (.*?)은 특수 문자를 포함한 모든 문자의 위치를 말한다.
ex)
re.findall(r'(.*?)[.*?][.*?][.*?]', cmds.ls(sl=1)[0]) # Result: [u'ffd1Lattice.pt'] #
num_ = re.findall(r'₩[(.*?)]', pt_)[ ] 안에 있는 문자를 추출하게 된다.
ex)
re.findall(r'[(.*?)]', cmds.ls(sl=1)[0]) # Result: [u'2:4', u'2:4', u'0:1'] #
if ':' in n_: range_set.append([int(x) for x in n_.split(':')]) range_set[-1][1] += 1 else: range_set.append([int(n_), int(n_) + 1])Lattice Point를 여러개 선택하면..
ffd1Lattice.pt[4:5][4:5][0] 형식으로 나오는데 중간에 있는 :을 구별하여 숫자들을 split로 분리, 리스트에 넣기 위함이다.
for one_ in range(*range_set[0]): for two_ in range(*range_set[1]): for three_ in range(*range_set[2]): range_ = (-1, 1) x_ = random.uniform(*range_) y_ = random.uniform(*range_) z_ = random.uniform(*range_) cmds.move(x_, y_, z_, '%s[%s][%s][%s]' % (head_, one_, two_, three_), r=1)
각 ffd 포인트 갯수만큼 for문을 돌려 랜덤하게 move를 해주게 된다.
random 내장 모듈은..
seed - 무작위수 생성기에 세 개의 선택적인 인수를 가지고 씨값을 매긴다; 기본값은 현재 시간
random - 다음의 무작위 수를 0 과 1 사이의 부동소수점수로 반환한다.
randint - 주어진 두 개의 정수 사이에 있는 무작위 수를 반환한다.
uniform - randint와 동일, 오직 부동소수점수와만 작동한다.
choice - 지정된 리스트 혹은 터플로부터 한 요소를 무작위로 선택한다.
(참고 : http://coreapython.hosting.paran.com/etc/Python%20for%20Newbies.htm )
───────────────────────────────────────────────
source : http://cafe.naver.com/digitaldream/492
'Maya Python 시작하기' 11) Lattice vertex random move (난리난 괴짝 만들기)
- maya_python11.py (748B) (1)
댓글 0개
| 엮인글 0개
466개(17/24페이지)
번호 | 제목 | 글쓴이 | 조회 | 날짜 |
---|---|---|---|---|
마야 뷰포트 네비게이션 팁 | 푸딩뱃살 | 44067 | 2020.04.06 17:22 | |
Maya 버전 별 Python 버전 | 푸딩뱃살 | 65184 | 2014.01.08 17:59 | |
144 | [참고] Maya Online Help | artsOne | 3399 | 2009.08.11 01:02 |
143 | [참고] Maya 2009 Service Pack 1a | artsOne | 3611 | 2009.07.20 12:22 |
142 | [Script] Python for Maya - 14. Expression에서 python 사용 | artsOne | 5401 | 2009.05.11 17:57 |
141 | [Script] Python for Maya - 13. realtime lattice point random move | artsOne | 5099 | 2009.05.01 00:58 |
140 | [Script] Python for Maya - 12. sphere를 이용한 random move | artsOne | 4697 | 2009.04.22 00:26 |
>> | [Script] Python for Maya - 11. Lattice vertex random move (re.fin | artsOne | 5266 | 2009.04.17 12:12 |
138 | [Rigging] Expression을 이용한 Flollow Through | artsOne | 2672 | 2009.04.14 20:24 |
137 | [Script] MEL - UI / menu, frameLayout | artsOne | 2959 | 2009.04.03 00:33 |
136 | [Script] MEL, Python 표기 | artsOne | 3234 | 2009.03.30 01:26 |
135 | [Script] 자료형 - list 이해 | artsOne | 2740 | 2009.03.30 01:12 |
134 | [Script] Shape 변경하기 | artsOne | 2089 | 2009.03.11 00:13 |
133 | [Rendering] Default Color | artsOne | 2283 | 2008.09.12 01:40 |
132 | [Script] MEL - clear | artsOne | 2760 | 2008.09.12 00:12 |
131 | [Script] MEL - window #2 | artsOne | 2779 | 2008.09.01 23:49 |
130 | [Rigging] Guide Line (Deform > Point On Curve) | artsOne | 2599 | 2008.08.13 02:16 |
129 | [Base] Marking Menu Custom | artsOne | 2167 | 2008.08.04 12:48 |
128 | [Rigging] Expression을 이용한 Stretch, Squash | artsone | 2864 | 2008.06.18 00:31 |
127 | [Expression] MEL, Expression - pow | artsone | 2751 | 2008.06.16 16:09 |
126 | [Script] MEL 기초 #02 - 함수, 라이브러리, 클래스 | artsOne | 3804 | 2008.04.18 02:27 |
125 | [FX] Lesson 1: Creating nCloth collisions Step 3 | artsOne | 2143 | 2008.04.13 17:56 |