## ClusterElementCollection.Array

### Description

Sets or returns an array of element values.
In the case of a Cluster, this provides read-only access to a 1-dimensional Array of the associated geometry indices (Integers) for each component.
In the case of a ClusterProperty, this allows you to get or set a 2-dimensional Array containing all the data of the cluster property (Doubles). The size of the first dimension depends on the ClusterProperty. For example for a weight map there is only 1 element but for an envelope weight map the size is equal to the number of deformers. The second dimension is the size of the cluster.

### C# Syntax

    // get accessor
    Object rtn = ClusterElementCollection.Array;
    // set accessor
    ClusterElementCollection.Array = Object;

### Examples

#### 1. VBScript Example

    dim oRoot, oGrid, oCluster, aElements
    set oRoot = Application.ActiveProject.ActiveScene.Root
    set oGrid = oRoot.AddGeometry("Grid","MeshSurface")
    set oCluster = oGrid.ActivePrimitive.Geometry.AddCluster( _
            siPolygonCluster, "PolygonClusterOnGrid", _
            array(59,60,61))
    aElements  = oCluster.Elements.Array
    LogMessage "lbound(aElements,1) " & lbound(aElements,1)
    LogMessage "ubound(aElements,1) " & ubound(aElements,1)
    for iIndex=lbound(aElements,1) to ubound(aElements,1)
            iElement = aElements(iIndex)
            LogMessage "element(" & iIndex & ") = " & _
                    oCluster.Type & "(" & iElement & ") "
    next

#### 2. JScript Example

    /*
            This example demonstrates how to work with the safearray returned
            from ClusterElementCollection.Array using the GridData object
    */
    // ***************************************
    //
    //              SETUP
    //
    // Create scene with sphere
    NewScene( null, false );
    var obj = ActiveSceneRoot.AddGeometry( "Grid", "MeshSurface" ) ;
    obj.subdivu = 2;
    obj.subdivv = 1;
    AddVertexColorsToMesh( obj )
    // ***************************************
    //
    //              FIND VERTEX COLORS
    //
    // Get current polygon mesh geometry
    var polymesh = obj.ActivePrimitive.Geometry;
    // Returns a ClusterPropertyCollection
    var vertexcolors = polymesh.VertexColors;
    Application.LogMessage( vertexcolors.Count );
    for ( var j=0; j<vertexcolors.Count; j++ ) {
            // Gets a ClusterProperty
            var vertexcolor = vertexcolors(j);
            Application.LogMessage( vertexcolor.Fullname );
            // Returns a ClusterElementCollection
            var cls_prop_elems = vertexcolor.Elements;
            // Returns a VBArray
            var vbValues = cls_prop_elems.Array;
            Application.LogMessage( "# of dimensions: " + vbValues.dimensions() );
            for ( var d=1; d<=vbValues.dimensions(); d++ ) {
                    Application.LogMessage( "range of dimension " + d + ": " + vbValues.lbound(d) + ".." + vbValues.ubound(d) );
            }
            // DISPLAY INFO
            var gridtable = MakeMeAPPG( vbValues );
            var canceled = InspectObj( gridtable, "", "", siModal, false );
            // CHANGE INFO
            if ( !canceled ) {
                    grid_mod = gridtable.Parameters("VertexColorChart").Value;
                    grid_mod.SetCell( 0, 0, 1.23 );
                    DeleteObj( gridtable );
                    gridtable = MakeMeAPPG( grid_mod.Data );
                    // RE-DISPLAY MODIFIED INFO
                    InspectObj( gridtable, "", "", siModal, false );
            }
    }
    // ***************************************
    //
    //              ADD VERTEX COLORS
    //
    function AddVertexColorsToMesh( in_Mesh )
    {
            // Get mesh's material
            var mat = in_Mesh.Material;
            // If material is not local add one
            if ( mat.IsA(siSharedPSet) ) {
                    mat = in_Mesh.AddMaterial();
            }
            // Get polygon mesh geometry
            var polymesh = in_Mesh.ActivePrimitive.Geometry;
            polymesh.AddVertexColor();
    }
    // ***************************************
    //
    //              Functions to support PPG
    //
    function MakeMeAPPG( in_VBArray )
    {
            var gprop = ActiveSceneRoot.AddProperty( "CustomProperty", false, "Visual2DArray" );
            var gparam = gprop.AddGridParameter( "VertexColorChart" );
            var ugrid = gparam.Value;
            // Set bounds of this grid
            ugrid.ColumnCount = in_VBArray.ubound(1)+1;
            ugrid.RowCount = in_VBArray.ubound(2)+1;
            ugrid.Data = in_VBArray;
            // Set up the labels
            var tmp = new Array( "R", "G", "B", "A" );
            for ( var c=0; c<ugrid.ColumnCount; c++ ) {
                    ugrid.SetColumnLabel( c, tmp[c]) ;
            }
            for ( var r=0; r<ugrid.RowCount; r++ ) {
                    ugrid.SetRowLabel( r, "Cluster " + r.toString() );
            }
            // Return the Property Set (not the Grid itself)
            return gprop;
    }