Parameter.SetInstanceValue

Parameter.SetInstanceValue

導入

v5.0

詳細

指定されたオブジェクトのインスタンス値を設定します。インスタンス値は共有化できる Property オブジェクトか共有された Shader オブジェクト下に接続された Material オブジェクトのみに適用することができます。たとえば、ImageShader.tspace_idパラメータはインスタンス値です。

オブジェクトバインディングをサポートするパラメータ(texturespace など)では、このメソッドのインスタンス値として有効なSIObjectを使用できます。このメソッドはオブジェクトがサポートされていることを確認した後、そのオブジェクト名を使用して値を設定します。オブジェクトがサポートされていない場合は false を戻します。

オブジェクトが存在しない場合は、オブジェクト名を使用してインスタンス値を設定し、Bind 引きしいを false に設定します。

注:インスタンス値はアニメートできないので、このメソッドは時間引数を実行できません。

C#構文

Boolean Parameter.SetInstanceValue( Object in_obj, Object, Boolean );

スクリプト構文

oBoolean = Parameter.SetInstanceValue( Object, Value, [Bind] );

戻り値

Boolean

パラメータ

パラメータ タイプ 説明
Object X3DObject のようなオブジェクト 共有プロパティでネストしたオブジェクト
Value Variant インスタンスから新規の値オブジェクトの UVW テクスチャプロパティや名前など、オブジェクト本体の値です。
Bind Boolean インスタンス値がオブジェクトバインディングをサポートしていて、渡される値が文字列の場合、このメソッドは文字列によって指定されている有効なオブジェクトが存在するかどうかをテストします。オブジェクトが存在しない場合は false が戻されます。

デフォルト値: False

JScript の例

/*

	This example illustrates how to set instance values on a shared material parameter

	Applies to parameters: ImageShader.tspace_id, Material.ImageClipName, Material.UV, Material.CAV.

*/

NewScene( null, false );

var app = Application;

var scene = app.ActiveProject.ActiveScene;

var root = scene.Root;

// Create cube with a texture projection (not connected)

var cube = root.AddGeometry( "Cube", "MeshSurface", "MyCubeWithTexture" );

// Create projection for cube

CreateProjection( 

	cube, 

	siTxtCubic, 

	siTxtDefaultCubic , 

	"MyCubicTextureSupport", 

	"MyCubicTextureProjection" ); 

// Create sphere with a texture projection (not connected)

var sphere = root.AddGeometry( "Sphere", "MeshSurface", "MySphereWithTexture" );

// Create projection for sphere

CreateProjection( 

	sphere, 

	siTxtSpherical, 

	siTxtDefaultSpherical, 

	"MySphericalTextureSupport", 

	"MySphericalTextureProjection" ); 

// Create a group with a material hooked up to texture image

var objs = XSIFactory.CreateObject( "XSI.Collection" );

objs.Add( cube );

objs.Add( sphere );

var group = root.AddGroup( objs, "MyGroup", false );

var mat = group.AddMaterial( "Blinn", false, "MyGroupMaterialWithTexture" );

var shaders = mat.Shaders;

var blinn = shaders(0);

var ambient = blinn.Parameters("ambient");

var diffuse = blinn.Parameters("diffuse");

// Create image clip

var strFileName = app.InstallationPath( siFactoryPath ) + "\\Data\\XSI_SAMPLES\\Pictures\\xsilogo.jpg";

var imageclip = CreateImageClip( strFileName, "MyImageClip" );

// Connect imageshader1 to blinn.ambient

var imageshader1 = ambient.ConnectFromPreset( "Image", siTextureShaderFamily );

// Connect imageshader2 to blinn.diffuse

var imageshader2 = diffuse.ConnectFromPreset( "Image", siTextureShaderFamily );

// Connect the imageshader1.tex to imageclip

var tex = imageshader1.Parameters("tex");

tex.Connect( imageclip );

// get tspace_id from imageshader

var tspace_id = imageshader1.Parameters("tspace_id");

// set the cube.material.image.tspace_id = MyCubicTextureProjection

tspace_id.SetInstanceValue( cube, "MyCubicTextureProjection" );

// set the sphere.material.image.tspace_id = MySphericalTextureProjection

tspace_id.SetInstanceValue( sphere, "MySphericalTextureProjection" );

// Dump all shader parameter instance values for each objects found using 

// a material from the active  material library

var matlib = scene.ActiveMaterialLibrary;

for ( var i=0; i<matlib.Items.Count; i++ ) {

	var mat = matlib.Items(i);

	// Get all shaders in materials shader tree

	var shaders = mat.FindShaders( siShaderFilter );

	for ( j=0; j<shaders.Count; j++ ) {	

		var shader = shaders(j);

		for ( var k=0; k<shader.Parameters.Count; k++ ) {

			var shader_param = shader.Parameters(k);

			// If the shader parameter has an instance value look up

			// its object value

			if ( shader_param.HasInstanceValue ) {

				var eObjs = new Enumerator( mat.UsedBy );

				for ( ; !eObjs.atEnd(); eObjs.moveNext() ) {

					var obj = eObjs.item();

					var instancevalue = shader_param.GetInstanceValue( obj );

					// Log parameter instance value for object

					app.LogMessage( obj.name + " " + shader.Name + " " + shader_param.Name + " = " + instancevalue  );

				}

			}

		}

	}	

}

// Expected results:

//INFO : MyCubeWithTexture Image tspace_id = MyCubicTextureProjection

//INFO : MySphereWithTexture Image tspace_id = MySphericalTextureProjection

//INFO : MyCubeWithTexture Image1 tspace_id = 

//INFO : MySphereWithTexture Image1 tspace_id =

関連項目

Parameter.HasInstanceValue Parameter.IsSupportedInstanceValue Parameter.GetInstanceValue