表示・名前・色・ユーザ定義
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)
- 定義済みの色名:
redgreenbluewhiteblackorangeyellowbrowngrayの 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 "..."を使う(一意なのは次にノードが作られるまで)。
関連
- レイヤ単位の表示・フリーズ: 「階層・グループ」章
- 色やプロパティを一括変更する対象選び: 「選択・取得」章
コメント