Weights (Envelope)

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



Autodesk Softimage v7.5