## MoveTextureLayers

### Introduced

v4.0

### Description

Moves texture layers up or down in the ordered stacks of layers. This considers the overall order of layers in other containers that share the given texture layers.

### Scripting Syntax

    MoveTextureLayers( [InputObjs], [Offset] );

### Parameters

Parameter | Type | Description
--- | --- | ---
InputObjs | String | List of texture layers to be moved up or down in the overall list of layers. Default Value: Current selection.
Offset | Long | Amount to move the specified layers. A negative value moves them up in the list, positive moves them down. The absolute value is the number of steps to move them in that direction. Default Value: -1

### Examples

#### VBScript Example

    '
    ' This example creates two shaders in a simple render tree, and applies
    ' texture layers to them.  Then it moves some of the layers up and down,
    ' illustrating the MoveTextureLayers command.
    ' In particular, it builds the following stacks of layers.
    '
    ' Phong      Fractal
    '   A           A
    '   B           E
    '   C           B
    '   D           D
    '
    option explicit
    dim oSph, oPhong, oFractal, oLyr(4)
    ' Build our shaders (a Phong and a Fractal), which will be the "texture
    ' layer containers" that will each be able to hold a stack of layers.
    NewScene , False
    set oSph = CreatePrim( "Sphere", "MeshSurface" )
    set oPhong = SIApplyShader( "Phong", oSph )
    set oFractal = BlendInPresetsInsp( "Fractal", , , True, siReplaceNoBlend, False, False, True )
    ' Now create and add all the layers, as indicated above.
    ' Add 'A', 'B' and 'D' to both containers at the end.
    set oLyr(0) = AddTextureLayer( , oPhong & "," & oFractal, "A", True )
    set oLyr(1) = AddTextureLayer( , oPhong & "," & oFractal, "B", True )
    set oLyr(3) = AddTextureLayer( , oPhong & "," & oFractal, "D", True )
    ' Add 'C' before 'D' in the first container.
    set oLyr(2) = AddTextureLayer( , oPhong, "C", False, oLyr(3) )
    ' Add 'E' after 'A' in the second container.
    set oLyr(4) = AddTextureLayer( , oFractal, "E", True, oLyr(0) )
    '
    ' Now start moving layers around.  Note that they dependencies
    ' as expressed when we were adding layers will be maintained at all
    ' times.
    ' Start by moving 'D' up two spots. -2 means move up two steps.
    MoveTextureLayers oLyr(3), -2
    ' It is likely now above 'B' and 'C'.  The two steps could equally well have
    ' moved it above 'C' and 'E' -- either is valid, based on the relationships
    ' expressed above.  Which one actually happens depends on how the moving
    ' algorithm is implemented and the order in which the containers and layers
    ' were created.
    ' Now let's move 'A' and 'E' down a bunch of slots, ensuring they are
    ' at the end.  We'll just provide a big number for the number of steps down
    ' to make, if we can't guess the exact number...
    MoveTextureLayers oLyr(0) & "," & oLyr(4), 10
    PrintTextureLayersInContainer oPhong
    PrintTextureLayersInContainer oFractal
    sub PrintTextureLayersInContainer( in_cont )
            dim oStack, oItem, oStr
            oStr = "Texture Layers in Container: " & in_cont & vbCrLf
            set oStack = EnumElements( in_cont & ".TextureLayers" )
            for each oItem in oStack
                    oStr = oStr & "    " & oItem.name & vbCrLf
            next
            logmessage oStr
    end sub
    '
    ' The output from the example should look something like this:
    '
    'INFO : "Texture Layers in Container: sphere.Material.Phong
    '    D
    '    B
    '    C
    '    A
    '"
    'INFO : "Texture Layers in Container: sphere.Material.Phong.Fractal
    '    D
    '    B
    '    A
    '    E
    '"

### See Also

AddTextureLayer RemoveTextureLayers AddTextureLayerPorts TextureLayer.Move