Parameter.SetInstanceValue

導入

v5.0

詳細

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

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

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

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

スクリプト 構文

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

戻り値

Boolean

パラメータ

パラメータ タイプ 詳細
オブジェクト 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