맥스스크립트 심화

오브젝트의 선택(2)

스크립팅하는애님 2019. 9. 13. 02:48
728x90
반응형

안녕하세요.

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

계속해서 오브젝트의 선택에 대해서 알아보겠습니다.

 

지난번에 어색하게 선택하기는 하지만 뭔가 어색하게 선택 이 되는 것 같았습니다.

체크 버튼을 해제했을 때 해당 오브젝트의 선택도 해제돼야 할 것처럼 느껴지는데 그렇지가 않네요.

체크 버튼을 해제했을 때 오브젝트도 해제해 봅시다.

이전에 작업한 스크립트를 열어 줍시다.

 

'box_chbon box_chb changed state do'의 if문 다음에 else문을 넣을 것입니다.

당연히 else가 붙기 때문에 if~do는 if~then으로 바뀝니다.

 

1
2
3
4
5
6
7
8
9
else
(
    choObjs = #()
    for i = 1 to selObjs.count do
    (
        if(classof selObjs[i] == Box) do append choObjs  selObjs[i]
    )
    deselect  choObjs
)
 
cs

 

그리고 'on bone_chb changed state do'의 if문 다음에도 Box를 BoneGeometry로 바꾸고 똑같이 씁니다.

 

1
2
3
4
5
6
7
8
9
else
(
    choObjs = #()
    for i = 1 to selObjs.count do
    (
        if(classof selObjs[i] == BoneGeometry) do append choObjs  selObjs[i]
    )
    deselect  choObjs
)
 
cs

 

내용을 들여다보면 이전에 작업했던 선택과정과 비슷합니다.

다른 부분은 deselect choObjs인데 이것은 선택된 오브젝트를 해제합니다.

 

이제 실행해 보시면 선택하고 해제하는 것이 자연스러워 보입니다.

 

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
selObjs = $* as array
choObjs = #()
 
try(destroydialog SelObj_roll) catch()
 
rollout SelObj_roll "머지툴"
(
    checkbutton box_chb "Box" width:40 height:25 pos:[25,5]
    checkbutton bone_chb "Bone" width:40 height:25 pos:[25,35]
    
    on box_chb changed state do
    (
        if (state == true) then 
        (
            choObjs = #()
            for i = 1 to selObjs.count do
            (
                if(classof selObjs[i] == Box) do append choObjs  selObjs[i]
            )
            selectMore choObjs
        )
        else
        (
            choObjs = #()
            for i = 1 to selObjs.count do
            (
                if(classof selObjs[i] == Box) do append choObjs  selObjs[i]
            )
            deselect  choObjs
        )
    )
    
    on bone_chb changed state do
    (
        if (state == true) then 
        (
            choObjs = #()
            for i = 1 to selObjs.count do
            (
                if(classof selObjs[i] == BoneGeometry) do append choObjs  selObjs[i]
            )
            selectMore choObjs
        )
        else
        (
            choObjs = #()
            for i = 1 to selObjs.count do
            (
                if(classof selObjs[i] == BoneGeometry) do append choObjs  selObjs[i]
            )
            deselect  choObjs
        )
    )
)
createdialog SelObj_roll width:100 height:80
cs

 

지금까지 작업한 내용입니다.

비슷한 내용이 중복되다 보니 스크립트의 길이가 길어졌습니다.

이런 경우에는 사용자 정의 함수를 사용하여 스크립트의 내용을 줄여 주면 좋습니다.

 

다음 시간에는 사용자 정의 함수를 사용하여 스크립트의 길이를 줄여 보도록 하겠습니다.

728x90
반응형

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

자식노드 선택(3)  (0) 2019.09.17
자식노드 선택(2)  (0) 2019.09.16
자식노드 선택(1)  (0) 2019.09.15
오브젝트의 선택(3)  (0) 2019.09.14
오브젝트의 선택(1)  (0) 2019.09.12
오브젝트의 머지(7)  (0) 2019.09.11
오브젝트의 머지(6)  (0) 2019.09.10
오브젝트의 머지(5)  (0) 2019.09.09