안녕하세요.
애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다.
맥스 스크립트 UI에는 버튼을 누른고 그다음으로 선택하는 오브젝트에 효과를 적용하는 버튼이 있습니다.
저는 쓴적이 없지만 용도상 알아 두면 좋은 기능입니다.
문법
pickbutton <name> [<caption>] [message:<string>] [filter:<function>] [toolTip:<string>] [autoDisplay:<boolean>]
[message:<string>]는 pickbutton을 누른 후 오브젝트를 선택할 때까지 3ds Max의 하단 상태바에 표시될 메시지입니다.
[filter:<function>]는 오브젝트의 선택 여부를 결정할 수 있는 조건이 포함된 함수를 넣을 수 있습니다.
[autoDisplay:<boolean>]는 오브젝트를 선택하면 버튼에 오브젝트의 이름이 버튼에 표시됩니다.
한번 만들고 나서 확인해 봅시다.
1
2
3
4
5
|
rollout testRoll "Test!"
(
pickbutton test_pkb "픽버튼" message:"오브젝트를 선택하세요."
)
createdialog testRoll
|
cs |
하위 속성으로 message가 있는데 오브젝트를 클릭하면 맥스 하단에 내용이 출력됩니다.
나머지 속성은 오브젝트가 있어야 확인할 수 있기 때문에 적용하지는 않았습니다.
버튼을 눌러봅시다.
checkbutton과 비슷하게 눌려 있다가 다시 누르면 원래 상태로 복구됩니다.
다음으로는 박스 하나와 더미를 만들어 보겠습니다.
스크립트를 이용해서 만들 필요는 없습니다.(스크립트로 이용해도 상관은 없습니다.)
위 이미지 같이 만든 다음에 다음과 같이 스크립트를 수정합시다.
1
2
3
4
5
6
7
8
9
10
|
rollout testRoll "Test!"
(
fn filterObj_fn obj =
(
if(classof obj == Box) do return true
)
pickbutton test_pkb "픽버튼" message:"오브젝트를 선택하세요." filter:filterObj_fn autoDisplay:true
)
createdialog testRoll
|
cs |
3번 라인부터 6번 라인까지 'fn filterObj_fn obj = ~'가 추가되고,
8번 라인에 'filter:filterObj_fn'가 추가됩니다.
3번 라인부터 6번 라인까지 내용을 확인해 보겠습니다.
라인이 여러 개 여서 복잡해 보이지만 한 줄로 줄이면,
fn filterObj_fn obj = (if(classof obj == Box) do return true)
이렇게 됩니다.
즉 'A = B다'인데 '앞에 fn을 붙여 함수로 취급하겠다.'입니다.
이전에 '함수는 특정 동작을 하는 기능을 말합니다.'라고 이야기를 하고 대충 넘어갔습니다.
오늘도 잠깐 설명을 하겠지만 대충 넘어가겠습니다.
바로 다음 시간에 따로 설명을 하겠습니다.
어쨌든 특정 동작을 하는 함수로서 'filterObj_fn'라는 이름이고 인수(함수가 작동하기 위해 필요한 변수)로서 obj를 사용합니다.
obj는 pickbutton UI를 이용해서 선택한 오브젝트가 됩니다.
if(classof obj == Box) do
는 pickbutton UI로 선택된 오브젝트인 obj의 class가 Box가 맞다면
return true
true값을 반환합니다.
반환 한 값은 filterObj_fn에 저장되어 pickbutton에 전달됩니다.
이제 실행된 다이얼로그에서 버튼을 눌러 더미를 선택해 보고 박스를 선택해 봅시다.
더미는 선택에서 제외되고 박스만 석택 되는 것을 확인할 수 있습니다.
autoDisplay:true
박스를 선택하고 나면 버튼의 글씨가 박스의 이름으로 바뀝니다.
이벤트
on <pickbutton> picked <arg> do <expr>
오브젝트를 선택하면 발생하는 이벤트입니다.
그동안 <arg>에는 state나 value가 들어왔지만, pickbutton에서는 오브젝트가 저장됩니다.
on <pickbutton> rightclick do <expr>
마우스 오른쪽 버튼을 클릭하면 발생하는 이벤트입니다.
다음과 같이 입력하고 실행하여 확인해봅시다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
rollout testRoll "Test!"
(
fn filterObj_fn obj =
(
if(classof obj == Box) do return true
)
pickbutton test_pkb "픽버튼" message:"오브젝트를 선택하세요." filter:filterObj_fn autoDisplay:true
on test_pkb picked obj do
(
freeze obj
format "Click %\n" obj.name
)
on test_pkb rightclick do
(
format "Mouse Right Click!!\n"
)
)
createdialog testRoll
|
cs |
픽 버튼을 클릭하고 박스를 선택해 봅시다.
박스를 선택하면 박스가 freeze가 되고 MAXScript Listener에 Click Box001라고 선택된 오브젝트의 이름이 출력됩니다.
그 후에 마우스 오른쪽 버튼으로 버튼을 누르면 Mouse Right Click!!이 출력됩니다.
내용을 좀 보겠습니다.
on test_pkb picked obj do
는 오브젝트를 선택했을 때 발생하는 이벤트로 선택된 오브젝트(obj)를 저장합니다.
freeze obj
저장한 오브젝트(obj)를 freeze 시키고
format "Click %\n" obj.name
format문으로 오브젝트(obj) 이름을 출력합니다.
마우스 오른쪽 버튼 클리은 설명을 생략하겠습니다.
오늘은 Pickbutton에 대해서 이야기해보았습니다.
다음은 UI는 아니지만 잠깐 이야기한 함수에 대해서 제대로 이야기해보겠습니다.
'맥스스크립트 기본' 카테고리의 다른 글
UI(18) 기타 설명 할것들1 (0) | 2019.08.17 |
---|---|
UI(17)Rollout Floater Windows (0) | 2019.08.16 |
UI(16)groupBox (0) | 2019.08.15 |
UI(15) ProgressBar (0) | 2019.08.14 |
UI(13) Dropdownlist (2) | 2019.08.09 |
UI(12) MultiListbox (0) | 2019.08.08 |
UI(12) Listbox (9) | 2019.08.07 |
UI(11) Slider (2) | 2019.08.06 |