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