v5.0
指定されたオブジェクトのインスタンス値を設定します。インスタンス値は共有化できる Property オブジェクトか共有された Shader オブジェクト下に接続された Material オブジェクトのみに適用することができます。たとえば、ImageShader.tspace_idパラメータはインスタンス値です。
オブジェクトバインディングをサポートするパラメータ(texturespace など)では、このメソッドのインスタンス値として有効なSIObjectを使用できます。このメソッドはオブジェクトがサポートされていることを確認した後、そのオブジェクト名を使用して値を設定します。オブジェクトがサポートされていない場合は false を戻します。
オブジェクトが存在しない場合は、オブジェクト名を使用してインスタンス値を設定し、Bind 引きしいを false に設定します。
注:インスタンス値はアニメートできないので、このメソッドは時間引数を実行できません。
Boolean Parameter.SetInstanceValue( Object in_obj, Object, Boolean ); |
oBoolean = Parameter.SetInstanceValue( Object, Value, [Bind] ); |
| パラメータ | タイプ | 説明 |
|---|---|---|
| Object | 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 = |