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

表示・名前・色・ユーザ定義

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

ノードの見た目と識別にまつわる操作です。表示・フリーズは 関数(hide/freeze) とプロパティのどちらでも操作できます。この章の例は Box001 を 1 つだけ選択した状態($ = Box001)を前提にしています。複数選択のときは for o in selection do ... で回してください。

表示 / 非表示

hide $Box001       -- 非表示
unhide $Box001     -- 表示
hide objects       -- 全部非表示
unhide objects     -- 全部表示
$.isHidden         -- 非表示かどうか(読み取り)
$.isHidden = true  -- プロパティで切り替えてもよい
$.isHidden = false -- (続けて他の例を試すときのために戻しておく)
  • hide / unhide にはノード 1 つでも objects / selection / 配列でも渡せます。
  • ⚠️ isHidden はレイヤごと非表示のときも true になります。ノード自身の非表示フラグだけを見たいときは isNodeHidden。isHidden = false にすると、ノードのフラグとレイヤのフラグの両方が解除されます。
  • ⚠️ 非表示・フリーズのノードも objects には含まれます。見えているものだけ欲しいときは where not o.isHidden で絞り込みます(「選択・取得」章参照)。

フリーズ / 解除

freeze $Box001     -- フリーズ(選択・編集不可に)
unfreeze $Box001   -- 解除
$.isFrozen         -- フリーズしているかどうか(読み取り)
$.isFrozen = true
  • ⚠️ フリーズしたノードは既定でグレー表示になります。元のワイヤフレームカラーを保ちたいときは $.showFrozenInGray = false。

名前

$Box001.name         -- 名前を読む
$.name = "Body"       -- リネーム(選択中のノード)
$.name = uniqueName "Part"  -- 衝突しない一意名を作って付ける("Part001" など。桁数は numDigits: か maxOps.nameSuffixLength で変えられる)

連番でリネームする

  • selection の並び順は選択した順で変わります。並び順を決めてから番号を振りたいときは、先に配列を並べ替えてから回します(「文字列・配列」章参照)。
i = 1
for o in selection do
(
    o.name = "Part_" + (formattedPrint i format:"03d")  -- "03d" = 3 桁ゼロ埋め(i as string だと "Part_1" になる)
    i += 1
)
  • ⚠️ 同名ノードは作れてしまいます。一意にしたいときは o.name = uniqueName "..." のように代入します。一意なのは次にノードが作られるまでの間だけです。

色(ワイヤフレームカラー)

$.wirecolor = red                  -- 定義済みの色名
$.wirecolor = color 255 128 0      -- RGB 指定(0〜255)
$.wirecolor = (random black white) -- ランダム(black〜white の間の色)

-- 選択をまとめて色分け
for o in selection do o.wirecolor = color (random 0 255) (random 0 255) (random 0 255)
  • 定義済みの色名: red green blue white black orange yellow brown gray の 9 つ。

ビューポート表示プロパティ

$.xray             = true   -- 半透明表示
$.boxmode          = true   -- 簡易ボックス表示
$.backfacecull     = true   -- 裏面カリング
$.renderable       = false  -- レンダリング対象から外す(表示は残す。詳細は下記)
$.showFrozenInGray = false  -- フリーズしてもグレーにしない
プロパティ 効果
xray 半透明表示
boxmode 簡易ボックス表示(重いシーンの軽量化)
backfacecull 裏面カリング
renderable レンダリングに含めるか(表示とは別)
  • ⚠️ renderable = false は 表示は残したままレンダリングから除外 します。非表示(hide)とは別物です。
  • ノードの displayByLayer(既定 true)が true のときは、レイヤ側の設定が優先されることがあります。xray などを変えても見た目が変わらないときは $.displayByLayer = false にしてから試してください(wirecolor は colorByLayer、renderable は renderByLayer が対応します)。

ユーザ定義プロパティ(ノードにメモを持たせる)

setUserProp $Box001 "export" true              -- 書き込む(キー = 値の 1 行になる)
setUserProp $Box001 "lod" 2
getUserProp $Box001 "lod"                      -- 2(数値などに自動で変換される。⚠️ 下記)
getUserPropVal $Box001 "lod" asString:true     -- "2"(文字列のまま読む)
getUserPropBuffer $Box001                      -- 全文(「ユーザ定義」タブの内容そのもの)

-- 目印の付いたノードだけを集める
for o in objects where getUserProp o "export" == true collect o
  • ユーザ定義プロパティは、右クリック → [オブジェクト プロパティ] の [ユーザ定義] タブに書かれる「キー = 値」の行です。シーンファイルに保存される ので、書き出し設定やツール用の目印をノードに持たせるのに使えます。
  • ⚠️ getUserProp は値を数値や true / false などに 自動で変換 します。文字列のまま読みたいときは getUserPropVal ... asString:true を使います。公式ヘルプでも、3ds Max 2019.1 Update 以降は getUserPropVal / setUserPropVal を使うよう勧めています。
  • 1 つのキーだけを消す関数はありません。getUserPropBuffer で全文を読んで行を取り除き、setUserPropBuffer で書き戻します(setUserPropBuffer $Box001 "" で全部消えます)。

落とし穴まとめ

  • isHidden はレイヤごと非表示のときも true になる。ノード自身のフラグだけなら isNodeHidden。
  • 非表示・フリーズのノードも objects に含まれる。グループヘッドも同様(「階層・グループ」章参照)。
  • フリーズ時のグレー表示を止めるなら showFrozenInGray = false。
  • renderable と hide は別。レンダリング除外と表示除外を混同しない。
  • getUserProp は値を自動で変換する。文字列のまま欲しいなら getUserPropVal ... asString:true。
  • 同名ノードは作れてしまう。一意にしたいときは o.name = uniqueName "..." を使う(一意なのは次にノードが作られるまで)。

関連

← MaxScript チートシート へ