맥스스크립트 심화

바이패드 Bip파일 불러오거나Bip파일과 XML파일 불러오기(3)

스크립팅하는애님 2021. 3. 11. 19:12
728x90
반응형

안녕하세요.

애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다.

지금 만드는 스크립트는 이번으로 마무리 짓도록 하겠습니다.

 

지난 시간에 작업하려다 멈춘 '불러오기' 버튼을 작업하겠습니다.

불러오기 버튼의 할일을 먼저 적어 보겠습니다.

1 파일 불러오기 대화창을 열겠습니다.

2 단 대화창을 열때 'animType' 값을 확인하여 'Bip'와 'Xaf'파일을 구분하여 대화창을 열겠습니다.

3 대화창에서 얻은 파일의 위치와 파일명을 가지고 실제 파일을 열겠습니다.

4 만약 'animType' 값이 'Xaf'면 'insertStartFrame' 값을 적용하여 원하는 프레임에 애니메이션이 적용되도록 하겠습니다.

 

파일 불러오기 대화창

맥스 스크립트에서 기본적인 파일을 불러오는 대화창을 사용할 때는 'getOpenFileName'라는 명령어를 사용합니다.

맥스 핼프에서 'Standard Open and Save File Dialogs'를 검색하면 나오니 자세한 내용은 거기서 확인하시면 됩니다.

'MAXScript Editer'에서 새 에디터를 열고 다음과 같이 입력하고 실행해 보겠습니다.

 

1
getOpenFileName caption:"애님파일 열기:"
cs

 

이런식으로 파일을 선택할 수 있는 창이 나옵니다.

저는 이미지에서 제일 아래 쪽에 있는 'audio.log' 파일을 선택하고 'Open' 버튼을 눌러보겠습니다.

 

 

'MAXScript Listener'에 결과 값으로 해당 파일의 위치와 파일명을 반환했습니다.

적당한 변수를 생성하여 반환되는 정보를 저장하면 좋을 것 같습니다.

조금 더 꾸며 보겠습니다.

반환되는 정보를 받을 변수를 생성하고 'File of type :' 부분에'*. bip'가 나오도록 변경해 보겠습니다. (바이패드 Bip파일 불러오거나 Bip파일과 XML 파일 불러오기(2)에서 사용한 변수를 쓰겠습니다.)

 

1
bipFileName = getOpenFileName caption:"애님파일 열기:" types:"Bip(*.bip)|*.bip|"
cs

 

창이 생성된 후 확인해 보면 'Files of type'에 지정하지 않은 파일은 창에서 보이지 않게 됩니다.

여러 파일이 섞여있지 않아 선택하기 편해졌습니다.

이것을 응용하면 'if'문을 사용하여 상화에 맞게 원하는 파일을 선택할 수 있습니다.

이전에 작업한 'BipnXafLoad_Roll'의 스크립트가 있는 창을 선택하여 다음과 같이 수정하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
animType = 1
insertStartFrame = 0
 
rollout BipnXafLoad_Roll "Bip&Xaf Load"
(
    radiobuttons choiceTyope_rad labels:#("Bip", "Xaf")
    spinner insertStartFrame_spi "입력 프레임" range:[-9999, 9999, 0] type:#integer
    button load_btn "불러오기"
    
    on choiceTyope_rad changed state do
    (
        animType = state
    )
    
    on insertStartFrame_spi changed state do
    (
        insertStartFrame = state
    )
    
    on load_btn pressed do
    (
        if(animType == 1) then
        (
            bipFileName = getOpenFileName caption:"애님파일 열기:" types:"Bip(*.bip)|*.bip|"
        )
        else
        (
            xafFileName = getOpenFileName caption:"애님파일 열기:" types:"Xaf(*.xaf)|*.xaf|"
        )
    )
)
createdialog BipnXafLoad_Roll
cs

 

20 ~ 30번 라인에 새로운 내용을 추가했는데

20번 라인은 버튼을 마우스 클릭했을 때 21 ~ 30번 라인이 실행됩니다.

if ~ else의 내용은 변수 'animType'을 확인하여 1일 때는 'Bip' 파일을 2일 때는 'Xaf'파일의 위치와 이름을 얻어 오도록 했습니다.

 

실제 파일열기

파일의 위치와 이름을 받아 올 수 있으니 실제 적용 불러오도록 하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
animType = 1
insertStartFrame = 0
 
rollout BipnXafLoad_Roll "Bip&Xaf Load"
(
    radiobuttons choiceTyope_rad labels:#("Bip", "Xaf")
    spinner insertStartFrame_spi "입력 프레임" range:[-9999, 9999, 0] type:#integer
    button load_btn "불러오기"
    
    on choiceTyope_rad changed state do
    (
        animType = state
    )
    
    on insertStartFrame_spi changed state do
    (
        insertStartFrame = state
    )
    
    on load_btn pressed do
    (
        if(animType == 1) then
        (
            bipFileName = getOpenFileName caption:"애님파일 열기:" types:"Bip(*.bip)|*.bip|"
            bipNodeCtrl = $.controller
            biped.loadBipFile bipNodeCtrl bipFileName
        )
        else
        (
            xafFileName = getOpenFileName caption:"애님파일 열기:" types:"Xaf(*.xaf)|*.xaf|"
            LoadSaveAnimation.loadAnimation xafFileName (selection as array) insertTime: insertStartFrame
        )
    )
)
createdialog BipnXafLoad_Roll
cs

 

새로 추가된 내용은 25, 26, 31번 라인이고 25번 라인 이외의 것은 이전 시간에 설명을 드렸습니다.

25번 라인은 현재 선택된 오브젝트(바이패드)의 컨트롤러를 변수 'bipNodeCtrl'에 저장하는 것입니다.

 

이제 실행을 하면 정상적으로 작동하는 스크립트를 확인할 수 있습니다.

 

모든 프로그램과 스크립트가 에러가 없을 수는 없습니다.

지금 작업한 스크립트도 실행할 때마다 창이 겹친다던가, 잘못된 값을 넣는다던가, 파일 선택을 하지 않고 취소한다던가, 하면 에러가 발생할 것입니다.

당연히 에러를 확인하면 원인을 찾아 해결할 수 있습니다.

그 부분까지 정리하려면 배보다 배꼽이 더 커질 수 있기 때문에 이 정도에서 마치도록 하겠습니다.

 

열려 있는 맥스의 초당 프레임과 bip의 초당프레임이 달라 창이 하나 중간에 뜨네요. 신경쓰면 지는 겁니다. ㅎㅎㅎ

728x90
반응형