회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인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 - 7. random (for문)

artsone | 2008.02.26 01:37 | 조회 4760

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


random의 표준적인 모듈은 random과 whrandom 두개가 있는데 random 모듈을 추천한다.
자료를 무작위로 섞어 값을 얻어내는 방법으로 사용된다.

자료를 랜덤으로 y좌표로 이동해보겠다.
import maya.cmds as cmd
import random

sel_ = cmd.ls(assemblies=1)
random.shuffle(sel_)
cmd.move(0, 10, 0, sel_[:8], r=1)


항상 같지만 maya.cmds를 import하고, random 모듈도 import 한다.
sel_ = cmd.ls(assemblies=1)의 assemblies는 maya ls 명령어의 flag이며 최상위 object 값도 받게 된다.

sel_
# Result: [u'persp', u'top', u'front', u'side', u'nurbsSphere1', u'nurbsSphere2', u'nurbsSphere3', u'nurbsSphere4', u'nurbsSphere5', u'nurbsSphere6', u'nurbsSphere7', u'nurbsSphere8', u'nurbsSphere9', u'nurbsSphere10', u'nurbsSphere11', u'nurbsSphere12', u'nurbsSphere13', u'nurbsSphere14', u'nurbsSphere15', u'nurbsSphere16'] # 
리스트에 들어간 자료를 확인해 보면 카메라인 persp, top, front, side도 들어간 걸 알 수 있다.

random.shuffle(sel_) sel_ 리스트의 자료를 무작위로 섞는다.
다시 자료를 확인해 보면...
sel_
# Result: [u'top', u'nurbsSphere2', u'nurbsSphere13', u'nurbsSphere10', u'nurbsSphere3', u'nurbsSphere15', u'persp', u'side', u'nurbsSphere16', u'front', u'nurbsSphere4', u'nurbsSphere6', u'nurbsSphere7', u'nurbsSphere1', u'nurbsSphere5', u'nurbsSphere11', u'nurbsSphere14', u'nurbsSphere8', u'nurbsSphere12', u'nurbsSphere9'] # 
리스트의 자료들이 무작위로 섞여 버렸다.
cmd.move(0, 10, 0, sel_[:8], r=1) 
move는 maya의 명령어로 move x축 y축 z축 object명, ...으로 사용된다.
object는 sel_ 리스트 자료의 앞에서 8번째까지 고르게 되고, y축으로 10만큼 이동하게 된다.
r=1은 relative=True와 같고, move flag로 object의 현재 위치를 상대적으로 수행하는 것으로 즉, 현재 위치를 누적시키는 것을 말한다.
다시 한번 아래 위 코드를 실행하면 y축이 누적되어 20만큼 이동된 것을 알 수 있다.
relative flag를 사용하지 않으면 object의 위치가 0, 0, 0에서 부터 시작된다.

이제는 여러 자료들(object)의 y축을 random으로 움직여 보겠다.
sel_ = cmd.ls(assemblies=1)
random.shuffle(sel_)
for x in sel_[:10]:
    cmd.move(0, random.uniform(10, 20), 0, x, r=1)
위에 마찮가지로 random.shuffle()을 주어 랜덤으로 자료를 섞는다.
for문은 반복명령어로 for 타켓 in 객체: 문1 else: 문2로 사용한다.
객체는 리스트와 같은 스퀀스 자료형이여야 하며, 객체의 각 자료를 타겟에 치환되어 문1 또는 문2를 수행한다.
반복 횟수는 객체의 크기/갯수가 된다.
for x in sel_[:8]:
    cmd.move(0, random.uniform(10, 20), 0, x, r=1)
sel_[:8]에 의해 8번 반복되어 x(자료/object)에 치환되며,
random.uniform(10,20) 10이상 20미만의 실수를 수행한다.
즉, 리스트 앞에서 8개의 자료들을 8번 반복 하면서 y축이 10~20사이 실수 값을 랜덤으로 이동되어 지는 것이다.

random.uniform(작은 수, 큰 수) 작은 수 이상 큰 수 미만의 실수를 랜덤으로 섞는다.
random.uniform(10, 20)
# Result: 11.7159376229 # 
random.uniform(10, 20)
# Result: 16.2973377856 # 
for문을 이해하기 위해서 예를 들어보자.
ex = ['cat', 'cow', 'tiger']
for x in ex:
    print len(x), x

# 3 cat #
# 3 cow #
# 5 tiger #
ex에 3개의 자료가 넣어지고, for문에서 ex(자료 갯수인 3번)을 반복하면서 x에 치환되어 진다.
print len(x), x x의 문자 길이와 x의 자료를 출력한다.

mel에서의 for문은 상당히 복잡한 구조로 사용할 변수 선언과 반복 횟수, 범위, 때로는 배열을 사용해야 하지만 python의 for문은 아주 간단한 구조로 되어 있어 사용하기가 편하다. (이래서 python을 사용하나 보다. ^-^/)

이번에는 무작위로 한개의 object를 선택하고 랜덤하게 y축으로 이동해 보자.
cmd.move(0, random.uniform(10, 20), 0, random.choice(cmd.ls(assemblies=1)), r=1)



random.choice()를 사용하여 자료들 중 한개를 선택하게 한다.

──────────────────────────────────────────────────────────
source : http://cafe.naver.com/digitaldream/452 - 'Maya Python 시작하기' 7) random

466개(1/24페이지)
마야
번호 제목 글쓴이 조회 날짜
공지 마야 뷰포트 네비게이션 팁 푸딩뱃살 43260 2020.04.06 17:22
공지 Maya 버전 별 Python 버전 푸딩뱃살 64533 2014.01.08 17:59
464 [Dev] Autodesk Maya Devkit 다운로드 첨부파일 푸딩뱃살 695 2023.01.28 14:28
463 [Base] (해결 중) modules 환경설정 중 푸딩뱃살 636 2022.11.09 11:47
462 [Script] pymel 딕셔너리형 사용 시 KeyError 푸딩뱃살 847 2022.11.07 12:08
461 [오류] Building Numpy for Maya Python 2.7.x 푸딩뱃살 589 2022.10.23 14:38
460 [Base] 뷰포트에서 조절자가 안 보일때 첨부파일 푸딩뱃살 773 2022.10.13 15:47
459 [Rigging] mirror joints 사용 시 유의 사항 푸딩뱃살 787 2022.10.04 10:46
458 [Script] 2022에서 enum34 모듈 설치 금지 첨부파일 푸딩뱃살 595 2022.08.17 18:08
457 [Script] pymel 예제 푸딩뱃살 615 2022.07.05 19:20
456 [Script] 인코드 / 디코드 - 2.7 한글 사용 푸딩뱃살 894 2022.03.08 17:52
455 [Dev] ui 없이 mayapy로 자동화 첨부파일 푸딩뱃살 695 2022.02.17 13:56
454 [Dev] mayapy로 ui파일 py로 푸딩뱃살 523 2022.02.15 18:20
453 [오류] Error : MayaBonusTools 푸딩뱃살 908 2022.01.21 17:52
452 [오류] Error: ModuleNotFoundError 푸딩뱃살 761 2022.01.21 16:24
451 [Dev] mayapy 첨부파일 푸딩뱃살 639 2022.01.19 20:08
450 [Base] function selCom at 0x7f29c5c04aa0 첨부파일 푸딩뱃살 604 2022.01.19 17:24
449 [Base] wireframe on shaded 단축키 만들기 첨부파일 푸딩뱃살 906 2022.01.04 10:55
448 [오류] OpenCL Error 푸딩뱃살 516 2021.12.28 01:40
447 [Script] Easily Translate MEL Commands to Python 첨부파일 푸딩뱃살 818 2021.12.02 11:22
446 [Base] output window 띄우지 않기 첨부파일 푸딩뱃살 813 2021.11.24 21:44
445 [Rigging] shapeEditorManager 삭제 안됨 푸딩뱃살 885 2021.11.12 23:30