## ShaderArrayParameter

Object Hierarchy | Related C++ Class: ShaderArrayParameter

### Inheritance

###

SIObject

Parameter

ShaderParameter

ShaderArrayParameter

### Introduced

v9.0 (2011)

### Description

Represents an array parameter for a Shader. An array parameter is a special kind of ShaderParameter which contains a set of ShaderParameter objects. These types of parameters are useful for supporting a dynamic number of instances of parameters. For example, the Volume Effects shader includes an array parameter of light references labeled 'scatter_lights_input' that allows you to add any number of lights.
You get this object when you iterate over the ParameterCollection property (via Shader.Parameters) when the collection item is a shader array parameter.
These type of parameters can be defined using the ShaderArrayParamDef interface.

### Methods

Add | AddCustomOp | AddExpression | AddFCurve
AddFCurve2 | AddScriptedOp | AddScriptedOpFromFile | AnimatedParameters
Clear | Connect | ConnectFromFile | ConnectFromFile2
ConnectFromPreset | ConnectFromPreset2 | ConnectFromProgID | ConnectFromProgID2
Disconnect | Enable | GetInstanceValue | GetValue2
IsAnimated | IsClassOf | IsEqualTo | IsLocked
IsSupportedInstanceValue | Move | PutValue2 | Remove
SetCapabilityFlag | SetInstanceValue | SetLock | Show
UnSetLock |  |  |

### Properties

Animatable | Application | Capabilities | Categories
Count | DataType | Default | Definition
Definition2 | Description | FullName | HasInstanceValue
Help | Item | Item2 | Keyable
LockLevel | LockType | Marked | Max
Min | Model | Name | NestedObjects
Origin | OriginPath | OriginalValue | OverridenObject
OverridingObject | Parameters | Parent | Parent3DObject
ReadOnly | ScriptName | Source | Sources
SuggestedMax | SuggestedMin | Tags | Targets
Type | Value | ValueType |

### Examples

#### 1. Python Example

    #

    # This example demonstrates how to work with a ShaderArrayParameter by instantiating

    # a shader that implements a shader array parameter, adding 2 elements to that array,

    # setting some values on the new elements, and then finding them again by iterating

    # over the shader parameters.

    #

    from win32com.client import constants as si

    app = Application

    app.NewScene("", False)

    # Set up a cylinder with a Volume Effects shader

    app.GetPrimLight("Light_Box.Preset", "Light_Box")

    app.GetPrimLight("LightFlat.Preset")

    app.CreatePrim("Cylinder", "MeshSurface")

    sh = app.CreateShaderFromProgID("Softimage.March_Fractal_vol.1.0", "Sources.Materials.DefaultLib.Scene_Material")

    app.SIConnectShaderToCnxPoint("Sources.Materials.DefaultLib.Scene_Material.Volume_Effects.out",

    	"Sources.Materials.DefaultLib.Scene_Material.volume", False)

    # Add 2 instances of the input array parameters and set some values on them

    ap = sh.Parameters("scatter_lights_input");

    app.SIAddArrayElement("Sources.Materials.DefaultLib.Scene_Material.Volume_Effects.scatter_lights_input")

    app.SetReference2("Sources.Materials.DefaultLib.Scene_Material.Volume_Effects.scatter_lights_input.scatter_lights_input", "Light_Box")

    app.SIAddArrayElement("Sources.Materials.DefaultLib.Scene_Material.Volume_Effects.scatter_lights_input")

    app.SetReference2("Sources.Materials.DefaultLib.Scene_Material.Volume_Effects.scatter_lights_input.scatter_lights_input[1]", "light1")

    # Now we can iterate over the list of items

    for param in sh.Parameters :

    	if (param.IsClassOf(si.siShaderParameterID)) :

    		if (app.ClassName(param) == "ShaderArrayParameter") :

    			app.LogMessage("'" + param.ScriptName + "' is an array with " + str(param.Count) + " members")

    # Expected output:

    # INFO : 'scatter_lights_input' is an array with 2 members

    # INFO : 'shadow_lights_input' is an array with 0 members

    # INFO : 'trans_model' is an array with 0 members

#### 2. JScript Example

    /*

    	This example demonstrates how to work with a ShaderArrayParameter by instantiating

    	a shader that implements a shader array parameter, and then manipulating the array

    	using the Add and Remove methods.

    	NB: This example manipulates the ParameterCollection directly instead of getting a

    	pointer to it (eg., var pArrayParam = sh.Parameters("inputs")) because the proxy

    	object (pointer) is not dynamic.

    */

    app = Application;

    NewScene(null, false);

    // Set up a cylinder with a Volume Effects shader

    CreatePrim("Cylinder", "MeshSurface");

    var sh = CreateShaderFromProgID("Softimage.March_Fractal_vol.1.0", "Sources.Materials.DefaultLib.Scene_Material");

    SIConnectShaderToCnxPoint("Sources.Materials.DefaultLib.Scene_Material.Volume_Effects.out",

    	"Sources.Materials.DefaultLib.Scene_Material.volume", false);

    // Add 3 instances of the inputs array parameters

    sh.Parameters("shadow_lights_input").Add();

    sh.Parameters("shadow_lights_input").Add();

    sh.Parameters("shadow_lights_input").Add();

    app.LogMessage("Found " + sh.Parameters("shadow_lights_input").Parameters.Count

    	+ " element(s) on the inputs array parameter");

    // Remove one of the elements

    sh.Parameters("shadow_lights_input").Remove(1);

    app.LogMessage("Now there are " + sh.Parameters("shadow_lights_input").Parameters.Count + " element(s)");

    // Expected output:

    // INFO : Found 3 element(s) on the inputs array parameter

    // INFO : Now there are 2 element(s)

### See Also

ArrayParameter ShaderParameter