맥스스크립트 심화

오브젝트의 머지(7)

스크립팅하는애님 2019. 9. 11. 16:31
728x90
반응형

안녕하세요.

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

오늘은 머지하는 파일이 스크립트 내부에 적혀 있는데 이것을 외부에서 정하는 작업을 하겠습니다.

 

지난번에 작업한 스크립트를 MAXScript Editer에서 열어 줍니다.

3번 라인 'button run_btn "실행" height:20 width:40'을 수정하고 위에 입력을 받을 수 있는 라인을 추가하겠습니다.

다음과 같이 수정하겠습니다.

 

3
4
5
edittext mgMaxFileName_edt "MergeFile" text:"" fieldWidth:70 height:20 pos:[5,5]
label max_lab ".max" pos:[128,5]
button run_btn "실행" height:20 width:40 pos:[70,30]
cs

 

실행해 보면

 

 

이렇게 나옵니다.

보시면 입력하는 부분이 앞의 글자와 높이가 맞지 않는데, 이것이 못 참겠다면(?) label로 MergeFile문자를 출력하고 edittext에서는 입력 부분만 출력하고 다시 label로 .max를 출력하여 높낮이를 사용자 입맛에 맞게 수정할 수 있습니다.

다이얼로그의 사이즈도 조정해 보시고 내부에 들어가는 UI도 값들을 조절해보면서 UI와 친해지시면 좋습니다.

 

이제 edittext에 입력한 값을 내부에서 사용하도록 스크립트를 수정합시다.

다음과 같이 추가해서 실행해 봅시다.

 

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
rollout merge_roll "머지툴"
(
    edittext mgMaxFileName_edt "MergeFile" text:"" fieldWidth:70 height:20 pos:[5,5]
    label max_lab ".max" pos:[128,5]
    button run_btn "실행" height:20 width:40 pos:[70,30]
    
    on run_btn pressed do
    (        
        if(mgMaxFileName_edt.text != ""then -- 수정 부분
        (
            mgFN = mgMaxFileName_edt.text -- 수정 부분
            pName = getSavePath caption:"바뀔 파일" initialDir:"D:\\"
            if(pName != undefined) then
            (
                -- pName에 값이 입력된다면
                maxFiles = getFiles (pName + "\\*.max")
                if((maxFiles.count > 0)and(doesFileExist (pName + "\\" + mgFN + ".max"== true)) then -- 수정 부분
                (
                    format "%\n" maxFiles
                    for i = 1 to maxFiles.count do
                    (
                        if(matchPattern maxFiles[i] pattern:("*" + mgFN + ".max")  == falsedo -- 수정 부분
                        (
                            loadmaxfile maxFiles[i] quiet:on
                            figLayerNum = biped.getCurrentLayer $'Bip001'.controller
                            if(figLayerNum != 0do biped.setCurrentLayer $'Bip001'.controller 0
                            $'bip001'.transform.controller.figureMode = true
                            mergeMAXFile (pName  + "\\" + mgFN + ".max") quiet:true -- 수정 부분
                            $'Point Head'.parent = $'Bip001 Head'
                            $'Point Spine3'.parent = $'Bip001 Spine3'
                            $'Point L Hand'.parent = $'Bip001 L Hand'
                            $'Point R Hand'.parent = $'Bip001 R Hand'
                            $'Point L Pelvis'.parent = $'Bip001 Pelvis'
                            $'Point R Pelvis'.parent = $'Bip001 Pelvis'
                            $'bip001'.transform.controller.figureMode = false
                            if(figLayerNum != 0do biped.setCurrentLayer $'Bip001'.controller figLayerNum
                            saveMaxFile (maxFilePath + maxFileName)
                            resetMaxFile #noPrompt
                        )
                    )
                )
                else
                (
                    messagebox "맥스파일이 없습니다."
                )
            )
 
            else
            (
                -- pName에 값이 없다면
                messagebox "취소를 선택하셨습니다."
            )
        )
        else messagebox "머지파일을 정해주세요." -- 수정 부분
 
    )
)
createdialog merge_roll
cs

 

수정 부분이 스크립트 여기저기에 있으니 잘 확인하세요.

그리고 if~else문이 추가됐기 때문에 괄호들도 추가됐고 줄 맞춤이 됐으니 찬찬히 확인하세요.

 

마지막으로 실행할 때마다 다이얼로그가 계속 생기는데 이전에 이야기했던 try문을 추가하여 수정하겠습니다.

제일 윗줄에 다음과 같이 입력하겠습니다.

 

1
try(destroydialog testRoll) catch()
cs

 

이렇게 하면 다이얼로그가 겹쳐서 만들어지지 않습니다.

 

그리고 추가할 내용은 자주 사용하게 된다면 '맥스 스크립트 기초 > 맥스 스크립트의 유형(1) > *.mcr(매크로)'를 확인하시고 단축 키나 단축 아이콘으로 지정해주시면 됩니다.

 

오늘로서 파일의 머지는 마무리하겠습니다.

다음에는 또 다른 이야기로 오겠습니다.

728x90
반응형

'맥스스크립트 심화' 카테고리의 다른 글

자식노드 선택(1)  (0) 2019.09.15
오브젝트의 선택(3)  (0) 2019.09.14
오브젝트의 선택(2)  (0) 2019.09.13
오브젝트의 선택(1)  (0) 2019.09.12
오브젝트의 머지(6)  (0) 2019.09.10
오브젝트의 머지(5)  (0) 2019.09.09
오브젝트의 머지(4)  (0) 2019.09.08
오브젝트의 머지(3)  (0) 2019.09.07