회원 로그인
|
Python for Maya - 12. sphere를 이용한 random move
'Maya Python 시작하기'의 기반으로 복습하는 차원에서 재정리한 것입니다.
lattice와 nurbsSphere를 선택한다.
script를 적용하면 nurbsSphere안에 들어간 lattice point가 random으로 move하게 된다.
* Code
# coding: utf-8 import maya.cmds as cmds import maya.mel as mm import random sel_ = cmds.ls(sl=1) # 선택된 것이 2개인지 확인 if len(sel_) == 2: # 첫번째 선택된 것이 lattice인지, 두번째 선택된 것이 nurbsSphere인지 확인 if cmds.nodeType(cmds.listHistory(sel_[0], lv=1)[0]) == 'lattice' and 'nurbsSphere' in (cmds.listHistory(sel_[1], lv=1)[0]): shape_ = cmds.listHistory(sel_[0], lv=1)[0] # lattice의 정보 추출 s_count = cmds.getAttr('%s.sd' % shape_) t_count = cmds.getAttr('%s.td' % shape_) u_count = cmds.getAttr('%s.ud' % shape_) nsp_ = cmds.listHistory(sel_[1], lv=1)[1] # nurbsSphere의 위치값 추출 pos_ = cmds.xform(sel_[1], q=1, ws=1, t=1) # nurbsSphere의 scale 추출 radius_ = cmds.getAttr('%s.radius' % nsp_) y_scale = radius_ * cmds.getAttr('%s.scaleY' % sel_[1]) for s_ in range(s_count): for t_ in range(t_count): for u_ in range(u_count): # lattice point의 위치값 추출 lpos_ = cmds.xform('%s.pt[%s][%s][%s]' % (sel_[0], s_, t_, u_), q=1, ws=1, t=1) # nurbsSphere의 위치값, lattice point의 위치값을 tuple로 전환하고 mag()함수로 거리값 추출 dis_ = mm.eval('mag(<<%s, %s, %s>> -<<%s, %s, %s>>)' % tuple(pos_ + lpos_)) # nurbsShpere 안에 있는 lattice point를 if radius_ > dis_: # random 범위 value_ = 1 - (dis_ / radius_) range_ = (-1 * value_, 1 * value_) # random move x_ = random.uniform(*range_) y_ = random.uniform(*range_) * y_scale z_ = random.uniform(*range_) cmds.move(x_, y_, z_, '%s.pt[%s][%s][%s]' % (sel_[0], s_, t_, u_), r=1) cmds.select('%s.pt[%s][%s][%s]' % (sel_[0], s_, t_, u_), tgl=1)* Comment
if cmds.nodeType(cmds.listHistory(sel_[0], lv=1)[0]) == 'lattice' and 'nurbsSphere' in (cmds.listHistory(sel_[1], lv=1)[0]):
흔히 사용되는 if문이다. 주의해서 볼 것은 cmds.listHistory(sel_[0], lv=1)[0] 문구인데, sel_[0]의 listHistory로 추출한 값의 첫번째 배열을 치환하게 된다.
import maya.cmds as cmds
sel_ = cmds.ls(sl=1)
selHis_ = cmds.listHistory(sel_[0], lv=1)
selHis_
# Result: [u'nurbsSphereShape1', u'makeNurbSphere1'] #
한 object의 listHistory를 하게 되면 1개 이상의 정보를 추출하게 되는데, 이것 또한 배열로 설정할 수 있다.
import maya.mel as mm
......
dis_ = mm.eval('mag(<<%s, %s, %s>> - <<%s, %s, %s>>)' % tuple(pos_ + lpos_))
python에서의 mag() 함수가 없으므로 maya의 mel을 사용할 수 있도록 eval 명령어를 사용한 것이다.
반대로 mel에서 python을 사용하려면 python(문법);으로 사용하면 된다.
<<%s, %s, %s>> - <<%s, %s, %s>>의 중간 - (마이너스)는 차집합의 의미이다.
(자세한 사항은 Python for Maya - 4. set (집합)을 참고한다.)
───────────────────────────────────────────────
source : http://cafe.naver.com/digitaldream/493
'Maya Python' 12) sphere를 이용한 random move
- mayaPython12.py (1.4KB) (0)
댓글 0개
| 엮인글 0개
466개(1/24페이지)
번호 | 제목 | 글쓴이 | 조회 | 날짜 |
---|---|---|---|---|
마야 뷰포트 네비게이션 팁 | 푸딩뱃살 | 44684 | 2020.04.06 17:22 | |
Maya 버전 별 Python 버전 | 푸딩뱃살 | 65512 | 2014.01.08 17:59 | |
464 | [Dev] Autodesk Maya Devkit 다운로드 | 푸딩뱃살 | 713 | 2023.01.28 14:28 |
463 | [Base] (해결 중) modules 환경설정 중 | 푸딩뱃살 | 664 | 2022.11.09 11:47 |
462 | [Script] pymel 딕셔너리형 사용 시 KeyError | 푸딩뱃살 | 883 | 2022.11.07 12:08 |
461 | [오류] Building Numpy for Maya Python 2.7.x | 푸딩뱃살 | 605 | 2022.10.23 14:38 |
460 | [Base] 뷰포트에서 조절자가 안 보일때 | 푸딩뱃살 | 805 | 2022.10.13 15:47 |
459 | [Rigging] mirror joints 사용 시 유의 사항 | 푸딩뱃살 | 817 | 2022.10.04 10:46 |
458 | [Script] 2022에서 enum34 모듈 설치 금지 | 푸딩뱃살 | 616 | 2022.08.17 18:08 |
457 | [Script] pymel 예제 | 푸딩뱃살 | 629 | 2022.07.05 19:20 |
456 | [Script] 인코드 / 디코드 - 2.7 한글 사용 | 푸딩뱃살 | 907 | 2022.03.08 17:52 |
455 | [Dev] ui 없이 mayapy로 자동화 | 푸딩뱃살 | 712 | 2022.02.17 13:56 |
454 | [Dev] mayapy로 ui파일 py로 | 푸딩뱃살 | 535 | 2022.02.15 18:20 |
453 | [오류] Error : MayaBonusTools | 푸딩뱃살 | 935 | 2022.01.21 17:52 |
452 | [오류] Error: ModuleNotFoundError | 푸딩뱃살 | 784 | 2022.01.21 16:24 |
451 | [Dev] mayapy | 푸딩뱃살 | 660 | 2022.01.19 20:08 |
450 | [Base] function selCom at 0x7f29c5c04aa0 | 푸딩뱃살 | 628 | 2022.01.19 17:24 |
449 | [Base] wireframe on shaded 단축키 만들기 | 푸딩뱃살 | 923 | 2022.01.04 10:55 |
448 | [오류] OpenCL Error | 푸딩뱃살 | 530 | 2021.12.28 01:40 |
447 | [Script] Easily Translate MEL Commands to Python | 푸딩뱃살 | 850 | 2021.12.02 11:22 |
446 | [Base] output window 띄우지 않기 | 푸딩뱃살 | 837 | 2021.11.24 21:44 |
445 | [Rigging] shapeEditorManager 삭제 안됨 | 푸딩뱃살 | 905 | 2021.11.12 23:30 |