맥스스크립트 심화

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

스크립팅하는애님 2021. 4. 26. 16:58
728x90
반응형

안녕하세요.

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

지난 시간에 이어 파일 머지를 편하게 하는 방법을 계속 설명하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
fileName = ""
 
rollout Merge_Rollout "Merge"
(
    button selectMerge_btn "머지파일선택" pos:[5, 5]
    label fileName_lab "FileName" style_sunkenedge:true height:15 width:155 pos:[5, 30]
    button run_btn "실행" pos:[5, 60]
    
    on selectMerge_btn pressed do
    (
        fileName = getOpenFileName caption:"머지할파일선택:" filename:".max" types:"맥스파일(*.max)|*.max"
        fileName_lab.caption = fileName
    )
    
    on run_btn pressed do
    (
        mergeMaxFile fileName #select quiet:true
        $.parent = $'Bip001 R Hand'
    )
)
createdialog Merge_Rollout 
cs

 

 

지난 시간에 배운 내용은 위와 같습니다.

 

지금까지 한 작업은 일반 적으로 맥스에 있는 머지 방식보다 크게 편하지 못합니다.

만약 여기에 파일과 파일이 1 : 1로 매칭이 되는 것이 아니라 파일 하나를 한 폴더에 매칭 하는 1 : n 방식이라면 맥스의 머지보다는 훨씬 편할 것 같습니다.

극단적으로 파일이 수백개가 된다면 수작업으로 2 ~ 3일 걸릴 일이 스크립트를 실행하고 담배 한대 태우고 오는 쉬는 시간이 되겠네요.

그럼 폴더에 대응되도록 버튼을 하나 더 만들겠습니다.

원본 스크립트 7번 라인을 수정하고 밑에 다음과 같이 입력하겠습니다.

 

1
2
button run_btn "실행(파일)" pos:[5, 60]
button runFolder_btn "실행(폴더)" pos:[80, 60]
cs

 

'실행(폴더)'는 이벤트 핸들러가 없어 아직 작동하지 않습니다.

 

이렇게 버튼이 하나 만들어졌습니다.

여기까지 읽어 오신 분이라면 다음에 이벤트 핸들러가 따라오는걸 눈치채셨겠죠?

원본 스크립트의 19번 라인 아래에 '실행(폴더)' 버튼의 'pressed' 이벤트 핸들러를 만들고 폴더를 선택하는 스크립트를 넣겠습니다.

 

1
2
3
4
on runFolder_btn pressed do
(
    getFolder = getSavePath caption:"머지될 폴더 선택"
)
cs

 

('getSavePath' 명령은 설명을 했는지 안 했는지 애매 한데 했네요. ㅎㅎ'맥스 스크립트 기본' '파일 열기와 저장(5) 다이얼로그로 폴더 지정'에 있습니다.)

'getSavePath'는 폴더를 지정하여 해당 폴더의 위치(path)까지만 알려주기 때문에 지금은 실행하여 위치를 지정해도 별다른 작동을 하지 않습니다.

작동을 하기 위해서 우리는 다음과 같은 과정이 필요합니다.

1 지정한 폴더에서 맥스 파일을 모두 변수에 넣는다.

2 저장한 모든 파일을 for문을 이용해서 모두 불러온다.

3 불러온 파일들에게 머지를 적용한다.

4 머지한 파일을 그냥 닫지 않고 저장을 하고 닫는다.

 

1번의 작업을 하겠습니다.

폴더에 있는 맥스 파일을 기준으로 하기 때문에 당연히 파일은 1개 이상을 생각해야 합니다.

변수 형태는 배열형으로 합니다.

그리고 맥스에는 'getFiles'라는 파일을 수집하는 명령이 있으므로 이것을 사용하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fileName = ""
maxFiles = #()
 
rollout Merge_Rollout "Merge"
(
.....

    on runFolder_btn pressed do
    (
        getFolder = getSavePath caption:"머지될 폴더 선택"
        maxFiles = getFiles (getFolder + "\\*.max")
format "Filse = %\n" maxFiles
    )
)
createdialog Merge_Rollout 
cs

(중간에 '.....'은 동일한 내용이라 생략했습니다.)

 

위 스크립트 11번 라인의 내용은 우리가 선택한 폴더(getFolder)에서 모든(*) 맥스 파일(. max)을 찾아서 'maxFiles' 변수에 저장하라입니다.

아까도 언급했지만, 폴더에는 맥스 파일이 1개 이상 있을 수 있기 때문에 2번 라인에 'maxFiles'를 배열형 변수로 지정한 것입니다.

12번 라인의 'format'문은 값이 제대로 저장됐는지 확인하기 위해 적은 것입니다.

실행을 하여 보면 우리가 머지시킬 파일들의 목록이 나오게 됩니다.

 

 

사람마다 다르겠지만 대충 이런 식으로 나옵니다.

 

약간 애매하지만 오늘은 여기서 끊고 다음 시간에 계속하겠습니다.

728x90
반응형