Maxscript를 만들다보면 사용 편의를 위해 MacroScript를 만들게 됩니다.
그런데 이런 MacroScript를 사용하려면 Customize User Interface에 들어가 Script를 가져와야 되는데요.
이런 불편을 줄이기위해 메인 툴바에 직접 등록하는 방법에 대해 이야기해 보겠습니다.
예상 결과 이미지
위처럼 HG란 메뉴 하위에 GoodLuck이라는 MacroScript를 등록해 보겠습니다.
먼저 MacroScript를 등록해야 겠죠.
아래 코드는 MacroScript를 등록하는 코드 입니다.
실행하면 작은 롤아웃 다이얼로그가 보여기게 될겁니다.
테스트용 MacroScript를 하나 만들어야 겠죠.
저는 GoolLuck이란 이름으로 하나 만들었습니다.
<GoodLuck.mcr>
macroScript GoodLuck
category:"Hwanggoon"
buttonText:"GoodLuck"
tooltip:"GoodLuck"
(
on execute do
(
global g_GoodLuckRollout
try (destroyDialog g_GoodLuckRollout) catch()
rollout g_GoodLuckRollout "Split Render"
(
button btn_Yamette "?" width:100
label lbl_Maker "Hwanggoon"
on btn_Yamette pressed do
(
messagebox "Yamette!!"
)
)
createDialog g_GoodLuckRollout width:150 height:150
)
)
이제 위 MacroScript를 MainMenu에 등록하는 스크립트가 필요한데요.
사용 편의를 위해서 MainMenu의 메소드를 바로 사용하지 않고 살짝 랩핑 했습니다.
랩핑하는 방식이 무조건 좋은 건 아니에요.
버그를 찾는다던가, 오래간만에 코드를 볼 경우 시간이 더 걸리기도 합니다.
반대로 더 빨리 찾기도 하구요.
이건 성향인 것 같으니 원하는 방식으로 하시면 될 것 같네요.
<MainMenuClass.ms>
--------------------------------------------------------------------------------------------------------
-- MainMenuClass
--------------------------------------------------------------------------------------------------------
struct MainMenuClass
(
--------------------------------------------------------------------
-- FindMenu
--------------------------------------------------------------------
fn FindMenu menuName =
(
local menu = menuMan.findMenu menuName -- 없으면 undefined
return menu
),
--------------------------------------------------------------------
-- AddMenu
--------------------------------------------------------------------
fn AddMenu menuName =
(
local newMenu
-- 중복 추가 방지 --
if FindMenu menuName != undefined then
return undefined
-- Menu 추가 --
newMenu = menuMan.createMenu menuName
mainMenu = menuMan.getMainMenuBar()
subMenuItem = menuMan.createSubMenuItem menuName newMenu
subMenuIndex = mainMenu.numItems() + 1
mainMenu.addItem subMenuItem subMenuIndex
return newMenu
),
--------------------------------------------------------------------
-- AddItem
--------------------------------------------------------------------
fn AddItem menuName item =
(
local newIndex
menu = FindMenu menuName
-- Menu가 없으면 패스 --
if menu == undefined then
return undefined
newIndex = menu.numItems() + 1
menu.addItem item newIndex
return newItem
),
--------------------------------------------------------------------
-- RemoveMenu
--------------------------------------------------------------------
fn RemoveMenu menuName =
(
menu = menuMan.findMenu menuName
if menu != undefined do
menuMan.unRegisterMenu menu
return ok
),
--------------------------------------------------------------------
-- UpdateMenuBar
--------------------------------------------------------------------
fn UpdateMenuBar =
(
menuMan.updateMenuBar()
return ok
),
--------------------------------------------------------------------
-- CreateActionItem
--------------------------------------------------------------------
fn CreateActionItem macroScriptName categoryName =
(
local actionItem
actionItem = menuMan.createActionItem macroScriptName categoryName
return actionItem
)
)
저 처럼 랩핑해서 사용해도 되고 아니면, 직접 만들어 사용하도 됩니다.
자 그럼 MacroScript 와 랩핑된 MainMenuClass를 만들었으니 화면에 보이게 해볼까요~
<등록 코드>
(
menuName = "HG"
macroScriptName = "GoodLuck"
categoryName = "Hwanggoon"
MainMenu = MainMenuClass()
-- menu 만들기 --
MainMenu.AddMenu menuName
-- Item 만들기 --
item = MainMenu.CreateActionItem macroScriptName categoryName
-- menu에 Item 등록 하기 --
MainMenu.AddItem menuName item
-- 화면 갱신 하기 --
MainMenu.UpdateMenuBar()
)
<삭제 코드>
(
menuName = "HG"
-- menu에 Item 등록 하기 --
MainMenu.RemoveMenu menuName
-- 화면 갱신 하기 --
MainMenu.UpdateMenuBar()
)
이렇게 하면 MacroScript를 메인 메뉴에 등록할 수 있습니다.
메인 메뉴 안에 섭브 메뉴 등록도 가능해요.
(서브 메뉴는 직접해 보세요.)
코드가 복잡하지 않으니 이해하는데 어렵진 않을 겁니다.
'Max' 카테고리의 다른 글
Maxscript) Time Config 기능 추가 (프레임 단위로 화면 확인하는 기능) (0) | 2016.03.30 |
---|---|
Maxscript) editText의 Enter 처리방식[팁] (0) | 2015.05.12 |
Maxscript) Animation Range 쉽게 조절하기 (0) | 2015.01.26 |
Autocomplete Maxscript Editor(자동완성) (1) | 2014.10.29 |
Maxscript Editor의 색상을 변경해보자 (1) | 2014.08.13 |