회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인PC가 아닐 경우 타인이 로그인할 수 있습니다.
PC를 여러사람이 사용하는 공공장소에서는 체크하지 마세요.
소셜네트워크 서비스를 통해서 로그인하시면 별도의 로그인 절차없이 회원서비스를 이용하실 수 있습니다.


최근 게시물

1.노션에서 작성 중

1.노션에서 작성 중

개편하기 전까지 노션에서 작성 중

2024.04.04//read more

2.ChatGPT

2.ChatGPT

OpenAI로 대규모 언어 모델대화형...

2023.03.16//read more

3.노코딩 게임 엔진 - 빌..

3.노코딩 게임 엔진 - 빌..

빌드 지원안드로이드iOS윈도우즈특이사...

2023.03.14//read more

4.(완료) 미접속 회원 정..

4.(완료) 미접속 회원 정..

[완료] 36명의 회원을 정리하였습니...

2023.02.16//read more

5.매뉴얼 플러스 - 전자제..



안정적인 DNS 서비스 DNSEver
DNS Powered by DNSEver.com


Python for Maya - 11. Lattice vertex random move (re.findall)

artsOne | 2009.04.17 12:12 | 조회 5259

Digital Dream ( http://cafe.naver.com/digitaldream ) 카페의 'Maya Python 시작하기'의
기반으로 복습하는 차원에서 재정리한 것입니다.



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 (난리난 괴짝 만들기)

466개(17/24페이지)
마야
번호 제목 글쓴이 조회 날짜
공지 마야 뷰포트 네비게이션 팁 푸딩뱃살 43905 2020.04.06 17:22
공지 Maya 버전 별 Python 버전 푸딩뱃살 65076 2014.01.08 17:59
144 [참고] Maya Online Help artsOne 3397 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 5395 2009.05.11 17:57
141 [Script] Python for Maya - 13. realtime lattice point random move 사진 첨부파일 artsOne 5094 2009.05.01 00:58
140 [Script] Python for Maya - 12. sphere를 이용한 random move 사진 첨부파일 artsOne 4694 2009.04.22 00:26
>> [Script] Python for Maya - 11. Lattice vertex random move (re.fin 사진 첨부파일 artsOne 5260 2009.04.17 12:12
138 [Rigging] Expression을 이용한 Flollow Through 사진 첨부파일 artsOne 2672 2009.04.14 20:24
137 [Script] MEL - UI / menu, frameLayout 첨부파일 artsOne 2955 2009.04.03 00:33
136 [Script] MEL, Python 표기 첨부파일 artsOne 3233 2009.03.30 01:26
135 [Script] 자료형 - list 이해 첨부파일 artsOne 2739 2009.03.30 01:12
134 [Script] Shape 변경하기 첨부파일 artsOne 2088 2009.03.11 00:13
133 [Rendering] Default Color 사진 첨부파일 artsOne 2283 2008.09.12 01:40
132 [Script] MEL - clear artsOne 2759 2008.09.12 00:12
131 [Script] MEL - window #2 사진 첨부파일 artsOne 2774 2008.09.01 23:49
130 [Rigging] Guide Line (Deform > Point On Curve) artsOne 2598 2008.08.13 02:16
129 [Base] Marking Menu Custom 사진 첨부파일 artsOne 2166 2008.08.04 12:48
128 [Rigging] Expression을 이용한 Stretch, Squash 사진 첨부파일 artsone 2863 2008.06.18 00:31
127 [Expression] MEL, Expression - pow artsone 2748 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