v8.0 (2010)
UserDataBlob 上のバイナリユーザデータを符号なし整数の Safe Array として設定したり、戻したりします。このプロパティの操作に適した言語は Python です。
このデータは内部でコピーされ、シーンの一部として保存されます。ユーザデータのストラクチャのサイズに制限はありません。内部的には、UserDataBlob.Value、UserDataBlob.Array32、および ByteArray プロパティは同じデータを参照します。ただし、わかりやすいように、プラグインの全域でいずれか 1 つを使用するようにします。
UserDataBlob.Array32 プロパティは ByteArray プロパティの最適化です。また、これらの 2 つのプロパティの操作に適した言語は Python です。
戻り値は、指定されたスクリプト言語に対して予想外なものとして表示されることがあります。最終的な表示にかかわらず、戻されたコンテナには保存されたバイトごとに 1 つのエレメントが含まれ、値は 0 ~255 の範囲になります。
警告:明確にするために、ByteArray プロパティは SafeArrayオブジェクトのみを受け入れ、それ以外のデータが指定された場合は失敗するようになっています。Python の場合、推奨されるデータ構造は array.array('B')です。JScript の場合、ネイティブ配列が受け入れられます。Python および JScript の配列は、内部で SafeArray オブジェクトに変換されます。また、安全配列の各エレメントは内部でバイトに変換されます。これらの変換が不可能な場合は、プロパティの設定は失敗し、データは変更されないまま残ります。
注:データを適切に保持するために、符号なしバイト値(0 ~-255 の範囲)の安全配列を設定するようにしてください。
// get accessor Object rtn = UserDataBlob.ByteArray; // set accessor UserDataBlob.ByteArray = Object; |
# Setting the data using UserDataBlob.ByteArray # import array Application.NewScene("", False) n = Application.GetPrim("Null", "", "", "") Application.CreateModel("", "", "", "") blob = n.AddProperty("UserDataBlob", False, "Bytes"); # Create an array of bytes and set it as the blob data # WriteArray = array.array('B', [1,3,5,7]); blob.ByteArray = WriteArray; # Retrieve the data. In Python, the data comes back as a tuple # BlobTuple = blob.ByteArray; # Convert it back to an array # ReadArray = array.array('B'); ReadArray.fromlist(list(BlobTuple)); Application.LogMessage("ReadArray = " + str(ReadArray)); # Expected results: # INFO : ReadArray = array('B', [1, 3, 5, 7]) |