안녕하세요.
애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다.
오늘은 지난 시간에 새롭게 찾은 문제를 해결하고 마무리 짓도록 하겠습니다.
1 '머지 파일 선택'을 하지 않고 '실행'버튼이 눌려지는 문제
2 현재 씬이 빈 상태에서 '실행(파일)'이 눌려져야 하는가?
3 소소하지만 '머지 파일 선택'후 파일 이름이 표기되는데 자꾸 잘리는 문제
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
|
fileName = ""
maxFiles = #()
fn merge_fn =
(
mergeMaxFile fileName #select quiet:true
if(Merge_Rollout.choParent_edt.text != "") do $.parent = (execute ("$'" + Merge_Rollout.choParent_edt.text + "'"))
)
rollout Merge_Rollout "Merge"
(
button selectMerge_btn "머지파일선택" pos:[5, 5]
label fileName_lab "FileName" style_sunkenedge:true height:15 width:155 pos:[5, 30]
edittext choParent_edt "부모이름" fieldWidth:105 pos:[5, 55]
button run_btn "실행(파일)" pos:[5, 90]
button runFolder_btn "실행(폴더)" pos:[80, 90]
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
if($'bip001' != undefined) do $'bip001'.transform.controller.figureMode = true
merge_fn()
if($'bip001' != undefined) do $'bip001'.transform.controller.figureMode = false
saveMaxFile maxFiles[i]
resetMaxFile #noPrompt
)
)
)
)
else messagebox "열려 있는 파일을 닫아주세요."
)
)
createdialog Merge_Rollout
|
cs |
(지난 시간까지 작업한 내용)
새로 찾은 문제 1번 ''머지 파일 선택'을 하지 않고 '실행'을 눌렀을 때 발생하는 오류'를 해결하겠습니다.
여러 가지 방법이 있겠지만 '머지파일선택'을 해서 'FileName'에 파일명이 표기되기 전엔 '실행' 버튼을 막는 것으로 하겠습니다.
다음과 같이 수정하겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
.....
rollout Merge_Rollout "Merge"
(
button selectMerge_btn "머지파일선택" pos:[5, 5]
label fileName_lab "FileName" style_sunkenedge:true height:15 width:155 pos:[5, 30]
edittext choParent_edt "부모이름" fieldWidth:105 pos:[5, 55]
button run_btn "실행(파일)" pos:[5, 90] enabled:false
button runFolder_btn "실행(폴더)" pos:[80, 90] enabled:false
on selectMerge_btn pressed do
(
fileName = getOpenFileName caption:"머지할파일선택:" filename:".max" types:"맥스파일(*.max)|*.max"
if(fileName != undefined)do
(
fileName_lab.caption = fileName
run_btn.enabled = true
runFolder_btn.enabled = true
)
)
.....
|
cs |
7, 8번 라인의 'enabled:false'은 UI를 생성할 때 해당 UI를 비활성화하는 내용입니다.
이후 16, 17번 라인에서 변수 'fileName'에 값이 들어오면 '실행'버튼을 활성화시켜준다는 내용입니다.
그다음으로 '2 현재 씬이 빈 상태에서 '실행(파일)'이 눌려져야 하는가?'입니다.
빈 파일에 다른 파일을 머지하는 것은 어떤 오류도 발생하지 않습니다.
하지만, 조금만 생각해도 빈 파일에 머지하지 말고 그냥 머지할 파일을 열면 동일한 결과를 볼 수 있기 때문에 이 문제는 해결을 해거나 말거나 큰 문제는 없습니다.
여기서는 '사람의 실수를 막는다.'는 생각으로 이러한 경우 메시지 박스를 띄워 막도록 하겠습니다.
1
2
3
4
5
6
7
8
|
on run_btn pressed do
(
if(($* as array).count != 0) then
(
merge_fn()
)
else messagebox "현재 씬이 비어있습니다."
)
|
cs |
씬 내에 있는 오브젝트의 수를 세어 0보다 클 경우에만 버튼을 누를 시 작동을 하고,
0과 같으면 메시지 박스를 띄우도록 하였습니다.
마지막으로 '3 소소하지만 '머지 파일 선택'후 파일 이름이 표기되는데 자꾸 잘리는 문제'는
표시를 두 줄 이상으로 하여 나타 낼 수 있는데 맥스 스크립트의 UI 기본 기능으로는 복수의 줄을 옵션으로 제공하는 것이 없었습니다.(제가 못 찾은 걸 수도 있고요. -_-;)
하려고 한다면 글자 수를 count 해서 몇 글자 이상은 다음 줄로 바꾸고 하는 기능을 만들면 되지만, 꽤나 귀찮습니다.
그래서 조금 더 쉬운 방법으로 접근하려고 합니다.
'tooltip'이라는 기능인데, 마우스가 해당 UI위에 올라가면 문자를 띄워주는 기능입니다.
'lable'에서는 파일의 이름만 표시하고 'tooltip'에서 패쓰를 표시하는 방식으로 하겠습니다.
다음과 같이 수정하여 봅시다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
.....
rollout Merge_Rollout "Merge"
(
button selectMerge_btn "머지파일선택" pos:[5, 5]
label fileName_lab "FileName" style_sunkenedge:true height:15 width:155 pos:[5, 30] tooltip:"FileName"
.....
on selectMerge_btn pressed do
(
fileName = getOpenFileName caption:"머지할파일선택:" filename:".max" types:"맥스파일(*.max)|*.max"
if(fileName != undefined)do
(
fileName_lab.caption = (filenameFromPath fileName)
fileName_lab.tooltip = (getFilenamePath fileName)
run_btn.enabled = true
runFolder_btn.enabled = true
)
)
.....
|
cs |
5번 라인에 'tooltip'을 만들어 주고 내용은 'FileName'으로 'lable'의 'cpation'과 동일하게 해 줍니다.
13, 14번 라인에 'filenameFromPath fileName'을 사용하여 파일 이름만, 'getFilenamePath fileName'을 사용하여 패쓰만 사용하도록 합니다.
이제 어느 정도 정리가 된 것 같네요.
곰곰이 찾으려면 아직도 숨겨진 문제와 오류는 있을 것입니다.
혹은 자신의 작업 스타일 때문에 제가 이게 맞다고 생각한 것이 틀리다고 하실 수도 있습니다.
그런 부분을 조금씩 자신에게 맞도록 수정하신다면 더 좋은 스크립트를 만들 실수 있을 겁니다.
수고하셨습니다.
'맥스스크립트 심화' 카테고리의 다른 글
배치스크립트 1 (2) | 2021.06.27 |
---|---|
Edit poly, Editablepoly, Edit Mesh, Editable Mesh 확인하고 분기나누기. (1) | 2021.05.12 |
오브젝트의 하이드와 박스모드 쉽게하기(2) (0) | 2021.05.11 |
오브젝트의 하이드와 박스모드 쉽게하기(1) (3) | 2021.05.10 |
파일머지 편하게하기(7) (0) | 2021.04.30 |
파일머지 편하게하기(6) (0) | 2021.04.29 |
파일머지 편하게하기(5) (0) | 2021.04.28 |
파일머지 편하게하기(4) (0) | 2021.04.27 |