UserDataBlob

Object Hierarchy | 関連する C++クラス:UserDataBlob

継承

SIObject

ProjectItem

Property

UserDataBlob

導入

v3.5

詳細

The UserDataBlob は、シーンのさまざまなパーツにアタッチできる Property であり、CameraLight、その他の X3DObject、および Cluster などがあります。プラグインを有効にして、シーンの一部としてバイナリのユーザ データの読み込み、書き込み、保持を行います。

UserDataBlob は、SceneItem.AddProperty を呼び出して作成できます。複数の UserDataBlob を単一オブジェクトに保存することもできますし、単一 UserDataBlob にブランチを適用することもできます。

UserDataBlob の内容は、mental ray に取り込むことができます。シェーダが必要とするコンテキスト情報は UserDataBlob に保存され、Mental Ray ユーザデータ API を介して取得されます。この機能は、UserDataBlob が CameraLightX3DObject のいずれかの直下にネストされている場合にのみ使用できます。"RenderData"という名前の Parameter は必ず True に設定し、"UserDataID"パラメータはシェーダが予測する mental ray ユーザデータタグの値にする必要があります。リアルタイムシェーダにはこのデータを取り込む必要はありません。リアルタイムシェーダは C++ API を介して UserDataBlob の内容を直接読み取りできるためです。

C++開発者が UserDataBlob のバイナリデータに簡単かつ効率よくアクセスするには、COM オブジェクトモデルインターフェイスではなく、C++ API(xsi_userdatablob.h を参照)を使用します。

CustomProperty オブジェクトは、バイナリデータをサポートしないオブジェクトに代わる「ローレベル」オブジェクトとして考えられます。UserDataMapは UserDataBlob に似ていますが、オブジェクトレベルのバイナリデータではなく、コンポーネント別のバイナリデータの保存をサポートしています。たとえば、あるユーザデータが頂点クラスタ内のすべてのポイントに適用される場合、そのユーザデータは UserDataBlob に保存されます。一方、ユーザデータが単一の頂点に適用される場合、ユーザデータは UserDataMap の適切なインデックスに保存されます。

メソッド

AddCustomOp AddICEAttribute AddScriptedOp AddScriptedOpFromFile
AnimatedParameters2 BelongsToオペレータ Clearオペレータ EvaluateAt
GetICEAttributeFromName IsA IsAnimated2 IsClassOfオペレータ
IsEqualToオペレータ IsKindOf IsLockedオペレータ IsSelectedオペレータ
LockOwners RemoveICEAttribute SetAsSelectedオペレータ SetCapabilityFlagオペレータ
SetLock TaggedParameters UnSetLock  
       

プロパティ

Application Array32オペレータ Branchオペレータ BranchFlagオペレータ
ByteArrayオペレータ Capabilitiesオペレータ Categories EvaluationID
Familiesオペレータ FullNameオペレータ Help HierarchicalEvaluationID
ICEAttributes IsEmptyオペレータ LockLevelオペレータ LockMastersオペレータ
LockTypeオペレータ Model Nameオペレータ NestedObjects
ObjectID Origin OriginPath Owners
PPGLayoutオペレータ Parametersオペレータ Parent Parent3DObject
Selectedオペレータ Singletonオペレータ Sizeオペレータ Typeオペレータ
Valueオペレータ      
       

1. VBScript の例

'Example of the UserDataBlob

'Store some user data directly under the scene root

set oBlob = ActiveSceneRoot.AddProperty( "UserDataBlob", , "data" )

'Save a string.  Because strings are represented as widecharacters

'this takes 12 bytes on Windows and 24 bytes on Linux

oBlob.Value = "xyz123"

logmessage oBlob.fullname & " is storing this string: " & oBlob.Value & _

				 " which takes " & oBlob.Size & " bytes."

'Flush that user data

ActiveSceneRoot.Properties( "data" ).Clear

2. JScript の例

//Example of UserDataBlob

//Place the blob on a null

var oNull = ActiveSceneRoot.AddPrimitive( "Null" ) ;

var oBlob1 = oNull.AddProperty( "UserDataBlob", false, "nulldata" ) ;

oBlob1.Value = "xyz123" ;

var oBlob2 = oNull.AddProperty( "UserDataBlob", false, "emptynulldata" ) ;

//Find all UserDataBlobs on the object and print out their values

var e = new Enumerator( oNull.Properties ) ;

var item ;

for ( ;!e.atEnd();e.moveNext() )

{

	item = e.item();

	if ( item.Type == "UserDataBlob" )

	{

		if ( item.IsEmpty )

		{

			logmessage( "Found empty UserDataBlob called " + item.Name );

		}

		else

		{

			logmessage( "Found user data blob called " + item.Name + 

						  " with value " + item.Value );

		}	 

	}	

}

関連項目

UserDataMap CustomProperty