## 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