맥스스크립트 심화

파일머지 편하게하기(7)

스크립팅하는애님 2021. 4. 30. 19:17
728x90
반응형

안녕하세요.

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

오늘은 지난 시간에 해결하지 못한 문제를 해결하고 그 외에 또 있을만한 것들을 해결하려고 합니다.

 

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
fileName = ""
maxFiles = #()
 
fn merge_fn =
(
    mergeMaxFile fileName #select quiet:true
    $.parent = (execute ("$'" + choParent_edt.text + "'"))
)
 
rollout Merge_Rollout "Merge"
(
    button selectMerge_btn "머지파일선택" pos:[55]
    label fileName_lab "FileName" style_sunkenedge:true height:15 width:155 pos:[530]
    edittext choParent_edt  "부모이름" fieldWidth:105 pos:[555]
    button run_btn "실행(파일)" pos:[590]
    button runFolder_btn "실행(폴더)" pos:[8090]
    
    on selectMerge_btn pressed do
    (
        fileName = getOpenFileName caption:"머지할파일선택:" filename:".max" types:"맥스파일(*.max)|*.max"
        if(fileName != undefined)do fileName_lab.caption = fileName
    )
    
    on run_btn pressed do
    (
        merge_fn()
    )
    
    on runFolder_btn pressed do
    (
        if((($* as array).count == 0)and(maxFileName == "")) then
        (
            getFolder = getSavePath caption:"머지될 폴더 선택"
            if(getFolder != undefined) do
            (
                maxFiles = getFiles (getFolder + "\\*.max")
                for i = 1 to maxFiles.count do
                (            
                    if(fileName != maxFiles[i]) do
                    (
                        loadmaxfile maxFiles[i] quiet:on
                        $'bip001'.transform.controller.figureMode = true
                        merge_fn()
                        $'bip001'.transform.controller.figureMode = false
                        saveMaxFile maxFiles[i]    
                        resetMaxFile #noPrompt
                    )
                )
            )
        )
        else messagebox "열려 있는 파일을 닫아주세요."
    )    
)
createdialog Merge_Rollout 
cs

 

이전에 해결하지 못한

'3 '머지할' 파일 중 바이패드가 없는 녀석이 끼어 있다면?'

을 해결하겠습니다.

지금까지 바이패드가 있다는 기준으로 작업을 진행했습니다.

만약 기준 자체가 바이패드의 유무와는 관계가 없다면 바이패드 피겨 모드와 같은 부분에서 다른 방법을 생각해야 할 겁니다.

파일을 불러오고 바이패드가 없으면 아예 실행을 막는 방법도 있지만 범용성을 생각해서 바이패드가 없다면 바이패드의 피겨 모드 부분만 막는 것이 좋을 것 같습니다.

다음과 같이 수정하여 해결해 보겠습니다.

 

1
2
3
4
5
6
7
8
on runFolder_btn pressed do
(
    .....
    if($'bip001' != undefined) do $'bip001'.transform.controller.figureMode = true
    merge_fn()
    if($'bip001' != undefined) do $'bip001'.transform.controller.figureMode = false
    .....
)
cs

 

이전에 이야기한 것과 동일하게 바이패드가 있는지 없는지 확인하고 없는 것이 아니라면 다음 명령을 실행하도록 하였습니다.

보통 'if'문은 괄호를 사용하여 하위에 사용할 내용을 적어 두지만 하위에 사용할 내용이 한 줄 일 경우엔 괄호를 생략하고 한 줄로 표현할 수 있습니다.

 

이렇게 수정하고 폴더 머지를 실행했는데 에러가 발생했습니다.

 

내용이 주욱 나오네요.

 

빨간 글씨의 3번째 줄을 보면 "text"가 문제라는군요.

'알 수 없는 속성 : 정의되지 않은 "텍스트"'라고 하는데 이것은 맥스 스크립트의 변수나 정의가 자신의 영역을 넘기지 못하기 때문입니다.

'rollout Merge_Rollout "Merge"'의 하위 내용인 'choParent_edt'은 'rollout Merge_Rollout "Merge"'의 밖에서는 인식을 할 수없습니다.

'rollout Merge_Rollout "Merge"'을 전역으로 취급하거나 'choParent_edt'이 어느 소속인지 확실히 해야 합니다.

 

1
2
3
4
5
fn merge_fn = 
(
    mergeMaxFile fileName #select quiet:true
    if(Merge_Rollout.choParent_edt.text != "") do $.parent = (execute ("$'" + Merge_Rollout.choParent_edt.text + "'"))
)
cs

 

'Merge_Rollout.choParent_edt'라고 소속을 명확히 하여 에러를 수정했습니다.

그리고 갑자기 생긴 'if'문은 머지할 때 부모가 되는 노드를 적지 않아 해당 내용이 빈 공란일 경우 링크를 생략한다는 의미입니다.

 

이런저런 문제를 꽤 해결했습니다.(그랬나?)

 

하지만 아직 해결해야 할 것들이 있습니다.

1 '머지 파일 선택'을 하지 않고 '실행'버튼이 눌려지는 문제

2 현재 씬이 빈 상태에서 '실행(파일)'이 눌려져야 하는가?

3 소소하지만 '머지 파일 선택'후 파일 이름이 표기되는데 자꾸 잘리는 문제

 

다음 시간에는 위 문제를 해결하고 머지를 마무리하겠습니다.

728x90
반응형