## Envelope.Weights

### Description

Returns a ClusterElementCollection containing the deformer weights for the envelope. The ClusterElementCollection.Array property provides access to a 2-dimensional Array, where the first dimension maps to the Envelope.Deformers and the second dimension maps to the cluster elements.

### C# Syntax

    // get accessor
    ClusterElementCollection Envelope.get_Weights( Object );

### Parameters

Parameter | Type | Description
--- | --- | ---
Time | Double | Time (in frames) at which to get property Default Value: Current time in frames

### Examples

#### 1. VBScript Example

    '
    '       This example demonstrates how to access the
    '       Weights information from a skeleton's envelope
    '
    NewScene , false
    ' Create the Skeleton
    Dim oRoot, aRootPos, aEffPos1, aEffPos2, oChain1, oChain2
    Set oRoot = Application.ActiveProject.ActiveScene.Root
    aRootPos = Array(0.254, 3.998, 0.045)
    aEffPos1 = Array(-0.01, -0.056, -2.972)
    aEffPos2 = Array(0.183, -3.999, 0.115)
    Set oChain1 = oRoot.Add2DChain( aRootPos, aEffPos1, , siViewTop )
    Set oChain2 = oChain1.AddBone( aEffPos2 )
    ' Create the Envelope
    Dim oSphere, oGeometry
    Set oSphere = oRoot.AddGeometry( "Sphere", "MeshSurface")
    oSphere.Parameters("subdivu").Value = 2
    oSphere.Parameters("subdivv").Value = 2
    Set oGeometry = oSphere.ActivePrimitive.Geometry
    ' Apply the Envelope to the Skeleton
    Dim oEnvelope
    Set oEnvelope = oSphere.ApplyEnvelope( oChain1, siBranch, siBranch )
    ' Get 2D array of element/deformer weights
    Dim aWeights
    aWeights = oEnvelope.Weights.Array
    ' Log weights
    Dim iElement, strElementWeights, iDeformer, lString
    For iElement = LBound(aWeights,2) to UBound(aWeights,2)
            strElementWeights = ""
            For iDeformer = LBound(aWeights,1) to UBound(aWeights,1)
                    strElementWeights = strElementWeights & Round(aWeights(iDeformer,iElement)) & ","
            Next
            ' Trim the final comma from the string
            lString = Len(strElementWeights) - 1
            strElementWeights = Left( strElementWeights, lString )
            LogMessage "weight(" & iElement & ") = " & strElementWeights
    Next
    'Output of the script is this:
    'INFO : "weight(0) = 0,0,100,0"
    'INFO : "weight(1) = 0,100,0,0"
    'INFO : "weight(2) = 0,50,50,0"
    'INFO : "weight(3) = 0,50,50,0"
    'INFO : "weight(4) = 0,50,50,0"

#### 2. JScript Example

    /*
            JScript version of the previous example, demonstrating
            how to access the weights on each vertex
    */
    NewScene( null, false ) ;
    var oRoot = Application.ActiveProject.ActiveScene.Root ;
    var aRootPos = new Array( 0.254, 3.998, 0.045 ) ;
    var aEffPos1 = new Array( -0.01, -0.056,-2.972 ) ;
    var aEffPos2 = new Array( 0.183,-3.999, 0.115 ) ;
    // Create the Skeleton
    var oChain1 = oRoot.Add2DChain( aRootPos, aEffPos1 ) ;
    var oChain2 = oChain1.AddBone( aEffPos2 ) ;
    // Create the Envelope
    var oSphere = oRoot.AddGeometry( "Sphere", "MeshSurface" ) ;
    oSphere.Parameters( "subdivu" ).Value = 2 ;
    oSphere.Parameters( "subdivv" ).Value = 2 ;
    var oGeometry = oSphere.ActivePrimitive.Geometry ;
    // Apply the Envelope to the Skeleton
    var oEnvelope = oSphere.ApplyEnvelope( oChain1, siBranch, siBranch ) ;
    // Weights are represented as a 2-dimensional array,
    // but it will be collapsed down to a 1-D array
    // because JScript does not support multi-dimensional arrays
    // (with each component listed one after another)
    var aWeights = oEnvelope.Weights.Array.toArray() ;
    var cntDeformers = oEnvelope.Deformers.Count ;
    var cntVertices = aWeights.length / cntDeformers ;
    var iElement = 0 ;
    for ( iVertex=0 ; iVertex<cntVertices ; iVertex++ ) {
            strElementWeights = "" ;
            for ( iDeformer=0 ; iDeformer<cntDeformers ; iDeformer++ ) {
                    strElementWeights += Math.round(aWeights[ iDeformer + iVertex * cntDeformers ]) ;
                    if ( iDeformer != cntDeformers-1 ) {
                            strElementWeights += "," ;
                    }
            }
            Application.LogMessage( "weight(" + iVertex + ") = " + strElementWeights ) ;
    }
    // Output of the script is this:
    //INFO : "weight(0) = 0,0,100,0"
    //INFO : "weight(1) = 0,100,0,0"
    //INFO : "weight(2) = 0,50,50,0"
    //INFO : "weight(3) = 0,50,50,0"
    //INFO : "weight(4) = 0,50,50,0"

#### 3. C# Example

    /*
            See Envelope.GetWeights2 for a C# example of accessing envelope weights
    */

### See Also

Envelope.GetWeights2