Autocomplete Maxscript Editor

 

 

Maxscript Editor에 자동완성 기능을 넣을 수 있습니다.

(Visual Studio의 Intellisense 정도는 안되는 너무 큰 기대는 하지 마시길)

 

구현 방법은 단순합니다.

3ds max에서 이미 선언되어 있는 global 값들을 추출해 데이터로 만듭니다.

그리고 그 데이터를 기반으로 내가 입력한 문자를 자동 완성해 주는 방식인데요.

그렇다보니 스마트 하진 않습니다. 

 

이런 식이죠.

 

이 방법을 응용하면 내가 만든 fn과 struct를 자동완성 할 수 있습니다.

HGDirClass는 제가 만든 struct class입니다.

여기뒤에 .을 찍으면 하위 목록들을 볼 수 있는데요.

나름 편하고 좋습니다.

 

이런식으로 내가만든 함수를 등록하기 위해서는 변수나 함수 들이 global로 선언되어 있어야 합니다.

매번 global로 선언하기 힘드니 자주 쓰는 기능은 startup 폴더에 넣어주세요.

startup 폴더에 넣으면 맥스가 실행되는 동시에 같이 실행되니 global로 등록 되겠죠.

 

아래 스크립트도 같이 startup 폴더에 넣으주면 새로운 기능이 자동으로 추가됩니다.

 

 

 

적용 방법

 

 

1. Maxscript API 만들기

 

아래 내용을 Maxscript Editor에 넣고 실행(Ctrl + E)하거나 Start 폴더에 넣어주세요.


 --------------------------------------------------------------------
 -- AutocompleteMaxscript
 --------------------------------------------------------------------
 fn AutocompleteMaxscript =
 (
  -- API File 생성 -----------------------------------
  -- 정보 추출 전에 api를 만들어야 저장 할 때 오류를 피할 수 있다.
  filePath = getDir #maxRoot + @"\maxscript.api"
  if not doesFileExist filePath then
   createFile filePath
  
  if getFileAttribute filePath #readOnly then
   setFileAttribute filePath #readOnly false
  --------------------------------------------------
  
  -- 정보 추출 --------------------------------------
  ssAPI = stringstream ""
  ss = stringstream ""
  apropos "" to:ss
  seek ss 0
  
  sName = undefined
  while not eof ss do
  (
   ssLine = readLine ss
   
   if matchPattern ssLine pattern:"*#struct:*" then
   (
    sName = (filterString ssLine " ")[1]
    format "%\n" sName to:ssAPI
   )
   else if matchPattern ssLine pattern:"*public,*" then
   (
    varName = trimLeft (filterString ssLine ":")[1]
    format "%.%\n" sName varName to:ssAPI
   )
   else if matchPattern ssLine pattern:"*(const *" then
   (
    constName = (filterString ssLine " ")[1]
    format "%\n" constName to:ssAPI
   )
   else if matchPattern ssLine pattern:"*(MAXScriptFunction)*" then
   (
    fnName = (filterString ssLine " ")[1]
    format "%\n" fnName to:ssAPI
   )
  )
  --------------------------------------------------
  
  -- API 정보 저장 -----------------------------------
  fStream = openFile filePath mode:"w+"
  format "%" (ssAPI as string) to:fStream
  close fStream
  --------------------------------------------------
  
  print "Autocomplete Maxscript"
 )


AutocompleteMaxscript()

 

이렇게되면 Max 루트 폴더에 maxscript.api파일이 생성됩니다.

(열어보면 추출한 정보를 확인 가능)

global로 선언된 모든 걸 다 API로 만들면 너무 과한 듯 해서 사용하는 몇가지로 추려 정리되게 했습니다.

 

 

 

2. Maxscript Editor 설정 추가

 

Maxscript Editor -> Tools -> Open User Option File 선택

MXS_EditorUser.properties이 열리고, 여기에 아래 내용을 적용하고 Save!

 

#자동완성
autocompleteword.automatic=1
autocomplete.*.ignorecase=1
autocomplete.choose.single=0
autocomplete.*.start.characters=$(chars.alpha)$(chars.numeric)$_@#.
api.*.ms=maxscript.api


 

이제 맥스를 재실행하면 자동완성 기능을 사용 할 수 있습니다.

Sublime Text도 써보고 있는데 맥스와 연동되는 부분에서 아쉬움이 좀 있네요.

오토데스크는 언제즘 에디터를 손봐줄지...

 

Posted by Hwanggoon
,