【MAXScript】入門編「プロパティ」

前回は変数について書きましたが、変数とプロパティを理解するだけで一気に出来ることが増えます。スクリプトからしかアクセスできないプロパティや、初期化方法も存在しますので、非常に役にたつはずです。

プロパティとは?

【クラス】に定義されている【変数】の事です。

【クラス】という新しい言葉が出てきましたが、今はクラスが何なのか理解しなくても大丈夫です。変数なので、値を取得したり設定したりできます。プロパティを直訳すると「属性」や「特性」になるのですが、そう言われてもなんのこっちゃ分からないと思うので3dsMAXが最初から定義している変数だと理解するのが良いと思います。

 

3dsMAXのプロパティ

3dsMAXの標準機能で「オブジェクトプロパティ」という設定画面がありますよね。このオブジェクトプロパティで設定できるプロパティと、スクリプトで扱うプロパティは同じものです。違いは、設定画面というGUI(グラフィックスユーザーインターフェース)があるかどうかです。

他にも、レンダリング設定の項目は全てプロパティです。そして、プリミティブを作成する時に入力する幅、長さ、高さ、作成した3Dオブジェクトの位置、回転、スケールの数値、全てプロパティです。

3dsMAXの中で、数値や文字列を設定するもの、有効/無効を設定するものなど、いわゆる「設定値」があるものは全てプロパティであり、クラスに定義された変数なのです。

 

MAXScriptでプロパティを変えてみる

まず、新規シーンを作成し、適当な場所に適当なサイズのボックスを作成します。このボックスのプロパティをMAXScriptで変更してみましょう。

スクリーンショット 2016-06-30 14.05.09

ボックスを選択して、次のスクリプトを実行してみてください。

スクリーンショット 2016-06-30 14.05.09-2

ボックスが消えました!

【$】は、選択中のノードを意味する記号です。
【.】(ドット)は、オブジェクトのプロパティへアクセスする時に使う記号です。
【isHidden】は、ノードの表示・非表示を取得/設定するプロパティです。

このスクリプトでは、選択中のオブジェクトのisHiddenプロパティにtrueという値を入れています。変数の代入と同じ方法ですね。isHiddenプロパティは、オブジェクトプロパティの「非表示」に相当します。この「非表示」設定は、チェックボックスで有効/無効を切り替える様になっています。

「オブジェクト」と「ノード」について

3DCGでは、ポリゴン、メッシュ、スプライン、ライト、カメラ、エミッターなどは一般的に「オブジェクト」と呼ぶ方が多いですが、これらシーンを構成する要素の事を正確には「ノード」と言います。スクリプトでも「オブジェクト」という概念を扱う事になるので、混乱を避けるために3DCGで扱うシーンを構成する要素を「ノード」、スクリプトで扱うオブジェクトをそのまま「オブジェクト」と表記します。

 

変数の値について「BooleanClass 値」

変数で扱える値にはいくつかのタイプがあり、その値タイプによって扱えるデータが変わります。Number 値、String値、Name値など、色々あります。今回使用したisHiddenプロパティはBooleanClass 値と言うタイプで、trueかfalseかの2種類の値のみを持つ事ができます。つまり、有効か無効かの値を設定できるチェックボックスの挙動と同じです。

他のプログラミング言語を扱われる方はこの説明に少し戸惑うかもしれません…
他のプログラミング言語で【型】と呼ばれている概念は、MAXScriptのヘルプで【値】と表記されています。値型と参照型はまた別で存在しており、ややこしいです。

 

isHiddenプロパティについて調べる

isHiddenプロパティについては、MAXScriptのヘルプページの、インタラクティブ – 非表示/フリーズのプロパティの項目で説明されています。

こちらのページです。
http://docs.autodesk.com/3DSMAX/14/JPN/Rampage%20MAXScript%20Guide/index.html

スクリーンショット 2016-06-19 14.32.11のコピー

 

ヘルプの見方を簡単に説明します。

まず、<xxx>のカッコで囲まれた部分にはクラス型が入ります。この場合、nodeというクラスのプロパティだという事が分かります。つまり、nodeクラスのインスタンスであるオブジェクトに対して取得/設定できるという意味です。この辺り、最初は何を言っているのか分からないかもしれませんが、今後の記事でちょっとずつ説明していきます。

次に、isHiddenはプロパティ名です。ドットでつなげる事で、ノードのisHiddenプロパティにアクセスできる訳です。

その次のBooleanというのは、このプロパティがBoolean Class値である事、そしてその次のdefault: falseは初期値がfalseだという事を説明しています。

 

MAX Script ヘルプの表記について

MAX Scriptのヘルプは同じ意味でも異なる表記になっている事があります。Booleanと、Boolean Class値と、Bool値と、ブール値はほぼ同じ意味として使われています。String値と文字列値は同じです。翻訳者が違ったり、スクリプトとして英語のままの表記と、日本語訳された表記とが混在しているのが原因です。

 

 

プロパティ名の調べ方

スクリプトで操作したい設定値があった時、その設定値のプロパティ名を調べる方法について説明します。

MAX Scriptのヘルプから調べる

MAXScriptのヘルプページから検索すると、プロパティへのアクセス方法を調べる事ができます。たとえば、レンダリング設定のプロパティ名を調べたい場合は、検索タブから「レンダリング設定」で検索します。

スクリーンショット 2016-06-19 14.59.04のコピー

検索結果から、62:シーンをレンダリング ダイアログ ボックスを開いてみましょう。
レンダリング出力の保存ファイル名を取得/設定できるプロパティ名を調べてみます。

cap

ページの下の方に行くとそれらしきものが見つかります。

スクリーンショット 2016-06-19 16.00.43のコピー

このプロパティ名には、<xxx>で表記されるクラス名がありません。なので、プロパティ名単体で使用できます。— stringとなっているので、このプロパティ名に設定できるのはString値(文字列値)のみです。レンダリング出力の保存ファイル名をスクリプトで設定してみましょう。

 

ヘルプページの最上部に、次のような注意書きがあるので、レンダリング設定を閉じてから実行しましょう。

”MAXScript から[レンダリング設定]ダイアログ ボックスを変更するには、実際の[レンダリング設定]ダイアログ ボックスを閉じた状態で 行う必要があります。”

スクリプトを実行後、レンダリング設定を開いてちゃんと設定されているか確認してみてください。

 

スクリプトを使って、プロパティ名を調べる

インスタンス化されたオブジェクトからスクリプトでプロパティ名を調べる事ができます。慣れてくると、ヘルプファイルで調べるよりもこちらの方が早いです。例として、ボックスを作成してそのプロパティをスクリプトで調べてみましょう。

まず、新規シーンを作成して、適当な場所にボックスを作成します。次にボックスを選択した状態で、下記のスクリプトを実行してみてください。

showproperties は、オブジェクトのプロパティ一覧を取得する【メソッド】です。メソッドについても今後詳しく説明しますが…メソッドは特定の操作を実行するためのスクリプトの事です。このshowpropertiesを実行するとリスナーに結果が出力されます。

スクリーンショット 2016-06-30 14.38.48のコピー

ボックスが持っているプロパティ名と、その値タイプが表示されます。プロパティ名は基本英単語ですので、そのプロパティ名で何を設定できるのかなんとなく想像がつくと思います。

 

読み取り専用プロパティ

プロパティは変数ですので、基本的には取得/設定の両方が可能です。ですが、プロパティによっては取得のみで設定ができない、読み取り専用プロパティというものがあります。