v5.0
Sets an instance value for specified object. Instance values
only applied to Property objects that
can be shared or Shader objects connected
under shared Material object. For
example, the ImageShader.tspace_id parameter is an instance
value.
For parameters supporting object binding (such as a texturespace
parameter) this method will accept a valid SIObject as an instance value. It will validate
that the object is supported and will set the value using the name
of the object. If the object is not supported it will return
false.
If the object does not exist you can set the instance value using
the name of the object and set the Bind argument to false.
Note: Instance values cannot be animated, so this method doesn't
take a time argument.
oBoolean = Parameter.SetInstanceValue( Object, Value, [Bind] ); |
| Parameter | Type | Description |
|---|---|---|
| Object | Object such as a X3DObject | Object nesting the shared property |
| Value | Variant | New value for instance. This may be the object itself, such as the UVW texture property or the name of the object. |
| Bind | Boolean | If the instance value supports object binding and the value
passed is a string then the method will attempt to test for the
existence of a supported object specified by the string. If the
object does not exist the method will return False.
Default Value: 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 =
|