v5.0
指定されたオブジェクトのインスタンス値を設定します。インスタンス値は共有化できるPropertyオブジェクトか共有されたShaderオブジェクト下に接続されたMaterialオブジェクトのみに適用することができます。たとえば、ImageShader.tspace_idパラメータはインスタンス値です。
オブジェクトバインディングをサポートするパラメータ(texturespace
など)では、このメソッドのインスタンス値として有効なSIObjectを使用できます。このメソッドはオブジェクトがサポートされていることを確認した後、そのオブジェクト名を使用して値を設定します。オブジェクトがサポートされていない場合は
false を戻します。
オブジェクトが存在しない場合は、オブジェクト名を使用してインスタンス値を設定し、Bind引きしいをfalse
に設定します。
注:インスタンス値はアニメートできないので、このメソッドは時間引数を実行できません。
oBoolean = Parameter.SetInstanceValue( Object, Value, [Bind] ); |
パラメータ | タイプ | 詳細 |
---|---|---|
オブジェクト | X3DObjectのようなオブジェクト | 共有プロパティでネストしたオブジェクト |
Value | Variant | インスタンスから新規の値オブジェクトの UVWテクスチャプロパティや名前など、オブジェクト本体の値です。 |
Bind | Boolean |
インスタンス値がオブジェクトバインディングをサポートしていて、渡される値が文字列の場合、このメソッドは文字列によって指定されている有効なオブジェクトが存在するかどうかをテストします。オブジェクトが存在しない場合は
false が戻されます。
デフォルト値: False |
/* 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 = |