MAXWrapper AppData 機能へのアクセス

AppData アクセス メソッドには、3ds Max SDK の AppData 機能にアクセスするための簡単な形式があります。

AppData 機能は、プラグインが、シーン内の任意の 3ds Max オブジェクト(ノード、マテリアル、モディファイヤ、コントローラなど)に任意のデータを付加する手段を提供します。 付加されたデータは、オブジェクトとともに 3ds Max シーン ファイルに永久的に保管されます。

   

次のメソッドは、MAXWrapper オブジェクトで AppData の読み込みや保存に使用されます。

setAppData <MAXWrapper_object> <integer_ID> <string> 	 

指定された 3ds Max オブジェクト上の指定された ID 番号の AppData 項目を <string> 値に設定します。これによって、必要な場合には新しい項目が作成され、すでにその ID の項目が存在する場合には、文字列の内容を置換します。

   

getAppData <MAXWrapper_object> <integer_ID>   

指定された 3ds Max オブジェクトから指定された ID 番号の AppData 項目の文字列を返します。ID で指定された項目が存在しない場合は、値 undefined を返します。

   

deleteAppData <MAXWrapper_object> <integer_ID> 

指定された 3ds Max オブジェクトから ID 番号が指定された場合に、AppData 項目を削除します。

   

clearAllAppData <MAXWrapper_object> 

指定された MAXWrapper オブジェクトから、すべての MAXScript 関連の AppData 項目を消去します。

AppData 文字列は必要なだけオブジェクトに追加できます。 これらの文字列を最初に追加するときに個別の整数識別番号を割り当てて、その ID を使って後でアクセスできるようにします。

AppData 文字列は、シーン ノード、モディファイヤ、コントローラ、マテリアル、周囲などを含む任意の MAXWrapper サブクラス インスタンスに付加できます。

注:AppData は、そのオブジェクトがシーン内にある場合だけ、シーン ファイルに保管されます。 たとえば、MAXScript でマテリアルを作成して、それをどのオブジェクトまたはマテリアル エディタにも割り当てなかった場合、それはシーン ファイルにも、その AppData にも保管されません。

特定の AppData 文字列をシーン全体に関連付けたい場合は、隠されたダミー ノードを作成してそれに固有名をつけ、シーン AppData をそのノードに付加することをお勧めします。

C++ プラグイン開発者は AppData の機能を最大限に活かして、オブジェクトと一緒に任意のバイナリ データを保管することができます。これは MAXScript では直接処理できないため、StringStream 値を使って複雑な MAXScript オブジェクトに組み込んだり、解析できる AppData テキスト文字列を保管し、検索するなどの手段を取ります。

たとえば、シーン ノード上の配列にいくつかの数字を保管する場合は、次のようにします。

ss = StringStream""
for v in data_values do print v to:ss
setAppData $foo 1 ss

そして、シーンを保管して再ロードした後で、次のようにして読み込みます。

ss = StringStream (getAppData $foo 1)
data_values = #()
while not eof ss do
append data_values (readValue ss)