맥스스크립트 기본

Interface: actionMan

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

안녕하세요.

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

오늘은 ActionMan이라는 것을 배워 보겠습니다.

이전에 이야기해드렸던 '3ds MAX Commands'와 같이 일반적인 스크립트와는 다른 개념을 가지고 있습니다.

이것은 Customize User Interface 대화 상자를 이용하여 도구 모음, 메뉴, 쿼드 메뉴 및 키보드 단축키에 액션을 할당하는 역할을 합니다.

말이 어렵네요.

사실 정확한 개념을 알고 있는것은 아니고 사용도 아주 한정적으로 했었습니다.

그런데 잘 모른다고 넘어가기에는 이게 생각보다 중요합니다.

간단히 예를 들면 얼마전 바이 패드의 'Track Selection > Lock COM Kyeing'이라는 버튼과 같은 역할을 하는 스크립트를 찾아보았지만 찾을 수가 없었습니다.

결국 구글님을 통해 조사를 했는데 해당 역할을 하는 스크립트는 발견할 수 없었고(단순히 제가 못 찾은 걸수 있지만) 'Lock COM Kyeing'이라는 아이콘을 클릭하는 스크립트를 발견 할 수 있었습니다.

일반적인 스크립트에서 해결 할 수 없는 일을 해결할 수 있는 명령어라는 거죠.

 

맥스 창에 바이패드를 생성 한 다음 아무 부위나 선택하고 'Commond Panel > Motion'을 선택하고 

 

1
actionMan.executeAction 972555510 "40185"
cs

 

을 입력하고 실행하면 

 

 

이렇게 선택되는 것 을 볼 수 있습니다.

기본적으로 토글 형태이기 때문에 다시 실행하면 선택 해제가 됩니다.

다시 얘기하지만 이것은 특별한 작동을 한다기보다는 단순하게 그 버튼이 클릭되는 역할을 합니다.

 

오늘 내용은 제가 사용한 부분만 아주 간략하게 설명하려고 합니다.

자세한 내용이 궁금하시면 맥스 헬프 사이트에서 'Interface: actionMan'를 찾으시면 됩니다.

 

중요 : ActionMan은 맥스가 패치되거나 사용자의 스크립트 사용환경에 따라 ID값이 변경되는 경우가 있습니다.

잘 작동하다가도 오류가 발생한다면 해당 ID의 변경이 있었는지 확인하시면 해결에 도움이 됩니다.

 

<boolean>actionMan.executeAction <integer>tableId <string>persistentId

테이블 ID와 영구 ID로 지정된 작업을 수행합니다.

작업에 성공하면 부울 형태로 반환되며 성공 시 true, 실패 시 false가 됩니다.

'MAXScript Listener > MacroRecorder'에서 'Enable'를 선택하면 몇몇 동작에서는 actionMan을 출력하기도 합니다.(정상적으로 출력하는 것도 있지만 그렇지 못한 것도 있습니다. 메인 메뉴의 'Tools > Display Floater...'는 출력됩니다.)

 

위 명령은 사용 방법만 적혀 있지 사용하고 싶은 기능은 찾을 수 없습니다.

기능을 표시하는 방법은 다음과 같습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
for i = 1 to actionMan.numActionTables-1 do 
(
    atbl = actionMan.getActionTable i
    format "% ID:% Name:'%' ContextID:% ContextName:'%' NumActionItems:%\n" i atbl.id atbl.name atbl.contextID atbl.contextName atbl.numActionItems
    for j = 1 to atbl.numActionItems do
    (
        aitm = atbl.getActionItem j
        aitm.getDescription &desc 
        aitm.getCategory &cat
        aitm.getButtonText &btn
        aitm.getMenuText &mnu
        hasicon = aitm.hasIcon()
        if hasicon then
        (
            aitm.getIconFileName &iconfile 
            iconfile = filenamefrompath iconfile 
            iconindex = aitm.getIconIndex()
            format "\t% ID:% Desc:'%' Cat:'%' BtnTxt:'%' MnuTxt:'%' Icon:[%,%] \n" j aitm.id desc cat btn mnu iconfile iconindex
        )
        else
            format "\t% ID:% Desc:'%' Cat:'%' BtnTxt:'%' MnuTxt:'%'\n" j aitm.id desc cat btn mnu 
    )
)
cs

 

길고 복잡한 스크립트가 나왔습니다.

변수들이 생성되고 format문으로 그 변수들이 출력되라고 한 것을 보니 무언가의 내용을 정리하여 표시하라는 것 같네요.

자세한 내용을 설명하기엔 제가 중간에 건너뛴 내용이 많으니 이렇게 써야 한다고만 생각하시고 실행해 보겠습니다.

내용이 한참 출력이 되고 중간에 무슨 연산을 하는지 잠시 멈췄다가 또 출력이 됩니다.

 

아마 많은 양이 출력돼서 당황스러울 것입니다.

 

이런식으로 나옵니다.

 

가장 크게 보면 숫자와 ID가 붙어 나온 줄과 그것보다 한단 드려 쓰기를 한 줄들이 있습니다.

한눈에 봐도 숫자 ID가 묶음이고 드려 쓰기 한 내용이 그 내용이라는 것은 알 수 있습니다.

우선은 이 정도만 알아도 충분합니다.

 

다음으로 원하는 내용을 찾는 방법을 알아보겠습니다.

저는 바이 패드에 대한 내용을 찾아보고 싶습니다.

그럼 MAXScript Listener의 메인 메뉴의 'Search > Find'를 열어 'Biped'를 입력하고 찾아보겠습니다.

 

이게 먼저 찾아졌습니다.

'Biped AnimationWorkbench'라는 내용이 있는 것을 보니 바이패드 워크벤치가 나오나 봅니다.

드려 쓰기 된 하위 내용이기도 하니 여기는 바이패드구역은 아닌 것 같습니다.

흥미 있지만 찾는 부분이 아니라 다음으로 넘어가겠습니다.

 

 

'79 ID'라고 나온 줄을 찾았으니 여기가 바이패드와 관련된 영역인 것 같습니다.

'actionMan.executeAction'에 대해 위에 설명이 있었죠.

우선 바로 아랫줄인 피규어 모드가 작동하나 실행해 보겠습니다.

 

1
actionMan.executeAction 972555510 "40144"
cs

 

상위 ID 번호와 하위 ID 번호를 기억하고 사용했습니다.

 

저는 바이패드 피규어 모드가 잘 작동합니다.

한번 더 누르면 해지가 되며 undo도 정상적으로 작동합니다.

 

이런 방법을 응용한다면 자신이 원하는 아이콘을 사용자 정의 대화 상자에 모아 사용하여 작업 효율을 올릴 수 있습니다.

다음 시간에 간단한 사용 예제를 알려드리겠습니다.

다음 내용은 심화학습에 올리게 되겠네요.

728x90
반응형

'맥스스크립트 기본' 카테고리의 다른 글

맥스의 유닛 변경하기  (3) 2022.10.19
3ds MAX Commands(7)  (0) 2021.04.02
3ds MAX Commands(6)  (0) 2021.04.01
3ds MAX Commands(5)  (1) 2021.03.31
3ds MAX Commands(4)  (0) 2021.03.30
3ds MAX Commands(3)  (0) 2021.03.29
3ds MAX Commands(2)  (0) 2021.03.26
3ds MAX Commands(1)  (0) 2021.03.25