リファレンス / 3ds Max / MaxScript チートシート

文字列・配列

  • 3dsMax
  • MaxScript
  • チートシート
MaxScript チートシート の章一覧

スクリプトの下ごしらえでよく使う、文字列と配列の操作です。MaxScript 特有の名前・記法に絞って収録します。

文字列の基本

"Hello" + " " + "World"           -- 連結
"abc".count                       -- 文字数
toUpper "abc"                     -- "ABC"
toLower "ABC"                     -- "abc"
(42 as string)                    -- 数値→文字列 → "42"
("3.14" as float)                 -- 文字列→数値

検索・置換・分割

findString "abcdef" "cd"                  -- 見つかった開始位置(無ければ undefined)
substituteString "a_b_c" "_" "-"          -- "a-b-c"(全置換)
replace "abcdef" 2 3 "XYZ"                -- 位置2から3文字を置換 → "aXYZef"
filterString "a, b, c" ", "               -- #("a","b","c")(区切り文字で分割)
trimLeft "  abc"                          -- 左の空白を除去
trimRight "abc  "                         -- 右の空白を除去
trimRight "Box001" "0123456789"           -- 末尾の数字を除く → "Box"
  • ⚠️ filterString の第2引数は 区切り文字の集合 です。", " はカンマと空白の両方が区切りになります。
  • また、区切りが連続しても空文字列は返りません("a,,b" → #("a","b"))。空要素も欲しいときは splitEmptyTokens:true を付けます。

数値の整形(ゼロ埋め・桁数)

formattedPrint 5 format:"03d"        -- "005"(3桁ゼロ埋め)
formattedPrint 3.14159 format:".2f"  -- "3.14"(小数2桁)
"Part_" + (formattedPrint i format:"03d")  -- 連番名 Part_001
  • format: は C 言語の printf 書式です。d が整数、f が小数、03 は「3 桁でゼロ埋め」、.2 は「小数 2 桁」です。

文字列を組み立てる(format / stringStream)

format "% を % 回処理\n" "Box" 3          -- リスナーに出力(% が引数で埋まる)

ss = stringStream ""                      -- 文字列バッファ(何行も format ... to:ss で書きため、最後に ss as string で 1 つの文字列にする。ログやファイル出力の組み立てに使う)
format "name=%, id=%\n" $.name 1 to:ss    -- バッファに書く
ss as string                              -- 文字列として取り出す
  • format の % は 引数で順に置換 されます。to: で出力先(ファイル・stringStream)を変えられます。format は改行を付けないので、行末に \n を書きます。

配列の基本

a = #(10, 20, 30)
a[2]              -- 20(1 始まり)
a.count           -- 3
append a 40       -- 末尾に追加(破壊的)
a[6] = 99         -- 要素数を超える添字に代入すると配列が伸び、間(a[5])は undefined になる
deleteItem a 1    -- 1 番目を削除
findItem a 30     -- 値 30 のインデックス(無ければ 0)
b = copy a        -- 別の配列を作る(a は変わらない)
  • ⚠️ インデックスは 1 始まり。findItem は見つからないと 0(undefined ではない)を返します。

集める・絞る・並べる

a = #(10, 20, 30)
for x in a where x > 15 collect x      -- 条件で集める → #(20,30)
for x in a collect (x * 2)             -- 変換して集める → #(20,40,60)
sort a                                 -- 昇順ソート(破壊的)
amin a                                 -- 最小値
amax a                                 -- 最大値
a + #(50, 60)                          -- 連結
  • for … where 条件 collect 式 は、条件を満たす要素だけについて式の値を集めて 新しい配列を返す 構文です。元の配列は変わりません。

重複を除く

makeUniqueArray #(1,2,2,3,3,3)   -- #(1,2,3)(新しい配列を返す)

seen = #()
appendIfUnique seen 1             -- 無いときだけ追加(追加したら true)
appendIfUnique seen 1             -- 既にあるので false(追加されない)
  • makeUniqueArray は元の配列を変えず、初出の順序を保ったまま重複を除いた新しい配列を返します。配列を作りながら重複だけ避けたいときは、空の配列に appendIfUnique で 1 つずつ足していきます。

落とし穴まとめ

  • 配列・文字列のインデックスは 1 始まり。
  • findItem / findString の「見つからない」戻り値は前者が 0、後者が undefined。
  • append / sort / deleteItem は破壊的。元を残すなら copy する。
  • filterString の区切りは「文字の集合」。意図しない分割に注意。

関連

← MaxScript チートシート へ