맥스스크립트 심화

Selection Filter확장

스크립팅하는애님 2019. 9. 19. 16:04
728x90
반응형

안녕하세요.

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

오늘은 지난번에 얘기한 데로 맥스의 기본 선택 툴의 확장에 대해서 알아보겠습니다.

 

 

위 이미지가 맥스의 Selection Filter입니다.

가끔 작업을 하다 보면 더 세분화된 필터가 있어 원하는 것을 선택할 수 있으면 좋겠다는 생각을 합니다.(저만 그런가요?ㅎㅎ)

예를 들먼 헬퍼 중 더미나 포인트만 선택한다던지 본 중에서도 바이패드만 선택하고 싶다던지와 같이요.

물론 Layer를 사용하여 세분화 하여 나누기도 하지만 Layer처럼 파일마다 추가 작업없이 한번 작업으로 더 이상 제약 없이 사용할 수 있다면 매우 편리할 겁니다.

이를 위해서는 'registerSelectFilterCallback'라는 함수를 사용합니다.

맥스에서는 'Callback'라는 맥스 자체에서 어떤 이벤트가 발생하면 동작하는 함수가 있습니다.

(이게 내용이 복잡해서 사실 저도 잘 사용하지는 않습니다만, 익혀두면 매우 유용한 함수입니다. 나중에 시간이 된다면 설명을 따로 하겠습니다.)

'Callback'과 비슷한 것으로 'Select Filter'에만 작동하는 함수입니다.

즉 오브젝트를 선택했을 때 현재 'Select Filter'가 무엇인가에 따라 true와 false값을 반환하여 오브젝트의 선택을 유지할지 말지를 결정하는 것입니다.(대충 이렇게 이해하시면 됩니다.)

 

문법은 다음과 같습니다.

registerSelectFilterCallback <filterFunction> <name>

<filterFunction>은 'registerSelectFilterCallback'가 함수로 정의된 선택 조건을 불러와서 작동되기 때문에 사용자가 정의한 함수가 필요합니다.

<name>은 'Selection Filter'에 표시될 이름을 문자열로 적습니다.

 

간단하게 박스만을 선택하는 기능을 넣어 보겠습니다.

다음과 같이 스크립트를 작성하고 실행합니다.

 

1
2
3
4
5
6
fn selectfilter_bip node = 
    if classof node == Box then return true
    else return false
registerSelectFilterCallback selectfilter_bip "Box" 
cs

 

스크립트의 내용은 

1번 라인의 경우 사용자 정의 함수를 사용하는데 인수 node라는 것을 받아 옵니다.

사용자 정의 함수는 함수를 호출할 때 인수도 같이 넣어주지만 'registerSelectFilterCallback'경우 그렇지 않습니다.

node라는 인수에는 현재 선택한 노드가 들어오는 것이라고 이미 맥스 스크립트에서 약속을 했기 때문에 호출 시에는 따로 값을 넣어주지는 않습니다.

3번, 4번 라인에서 선택된 노드의 클래스가 박스인지를 확인하여 맞으면 true를, 틀리면 false를 돌려줍니다.

6번 라인의 'registerSelectFilterCallback'은 이렇게 돌려받은 값으로 선택을 할지 말지를 결정합니다.

 

실행하면 Selection Filter에 Box라는 항목이 제일 아래 나오는데 이것을 선택합니다.

 

 

그리고 맥스 뷰포트에 박스 몇 개랑 다른 여러 가지 오브젝트를 만들어 넣고 선택을 해봅시다.

 

 

위 이미지처럼 박스만 선택이 됐나요?

이런 식으로 자신의 원하는 클래스를 혹은 이름을 가진 노드를 선택할 수 있습니다.

이렇게 만들어진 스크립트는 맥스의 하위폴더인 'Scripts > Startup'폴더에 저장하시면 맥스를 실행할때마다 자동으로 실행되어 편리합니다.

(현재 맥스 2016버전에서는 작동에 딜레이가 발생합니다. 2009버전에서는 딜레이가 없었는데 2016만의 문제인지 아닌지 잘 모르겠네요.)

 

다음 시간에는 뭘하면 좋을지 모르겠네요.

그 고민은 다음시간에 하겠습니다.

728x90
반응형

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

슬롯머신(4)  (0) 2019.09.26
슬롯머신(3)  (0) 2019.09.25
슬롯머신(2)  (0) 2019.09.24
슬롯머신(1)  (0) 2019.09.23
자식노드 선택(4)  (2) 2019.09.18
자식노드 선택(3)  (0) 2019.09.17
자식노드 선택(2)  (0) 2019.09.16
자식노드 선택(1)  (0) 2019.09.15