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

artsOne | 2009.04.22 00:26 | 조회 4708
Digital Dream ( http://cafe.naver.com/digitaldream ) 카페의
'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
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