Envelope.SetDeformerWeights2

Introduced

v10.5 (2012)

Description

Sets the envelope weights for a given deformer without normalizing the weights. Use the Envelope.SetDeformerWeights method if you want to normalize weights.

The deformer weights need to be passed in the cluster index order not in the geometry index order. To retrieve the cluster index corresponding to a given geometry index you can use Envelope.Elements in conjunction with ClusterElementCollection.FindIndex.

C# Syntax

Envelope.SetDeformerWeights2( X3DObject, Object );

Scripting Syntax

Envelope.SetDeformerWeights2( Deformer, [Weights] );

Parameters

Parameter Type Description
Deformer X3DObject or expression deformer object
Weights Array of Doubles Array of weights, one for each point influenced by the Envelope

Examples

Python Example

# This example shows how to set vertex envelope weights

# on a deformer without normalizing the weights

xsiApp = Application

# Create the scene made of a cube and 3 nulls

xsiApp.NewScene( None, False )

root = xsiApp.ActiveProject.ActiveScene.Root

grid = root.AddGeometry( "cube", "MeshSurface" )

n = root.AddNull()

n1 = root.AddNull()

n2 = root.AddNull()

# Move the nulls

xsiApp.Translate( n, 1, 0, 1 )

xsiApp.Translate( n1, 0, 0, 1 )

xsiApp.Translate( n2, 0, 0, 0 )

# Create a deformer list made of the 3 nulls

deformers = XSIFactory.CreateObject( "XSI.Collection" )

deformers.Add( n )

deformers.Add( n1 )

deformers.Add( n2 )

# Create an Envelope Weight on the grid with the 3 nulls

env = grid.ApplyEnvelope( deformers )

# Output the current values of the Envelope Weight

xsiApp.LogMessage( "Envelope Weights before user edit" )

allWeights = env.GetWeights2( None )

i = 0

for vertexWeights in allWeights:

	sum = 0

	for singleWeight in vertexWeights:

		sum += singleWeight

	xsiApp.LogMessage( "Vertex " + str( i ) + ": " + 

					   str( "Deformer 0: %4.1f, " % vertexWeights[ 0 ] ) +

					   str( "Deformer 1: %4.1f, " % vertexWeights[ 1 ] ) +

					   str( "Deformer 2: %4.1f, " % vertexWeights[ 2 ] ) +

					   str( "Vertex Weight Sum: %5.1f" % sum ) )

	i += 1

xsiApp.LogMessage( "" )

# Set new vertex envelope weights for the first deformer

env.SetDeformerWeights2( n, [10,10,10,10,10,10,10,10] )

# Output the new values of the Envelope Weight

xsiApp.LogMessage( "Envelope Weights after user edit" )

allWeights = env.GetWeights2( None )

i = 0

for vertexWeights in allWeights:

	sum = 0

	for singleWeight in vertexWeights:

		sum += singleWeight

	xsiApp.LogMessage( "Vertex " + str( i ) + ": " + 

					   str( "Deformer 0: %4.1f, " % vertexWeights[ 0 ] ) +

					   str( "Deformer 1: %4.1f, " % vertexWeights[ 1 ] ) +

					   str( "Deformer 2: %4.1f, " % vertexWeights[ 2 ] ) +

					   str( "Vertex Weight Sum: %5.1f" % sum ) )

	i += 1

#-----------------------------------------

# Output of this example is the following:

#-----------------------------------------

# INFO : Envelope Weights before user edit

# INFO : Vertex 0: Deformer 0:  0.0, Deformer 1: 41.5, Deformer 2: 58.5, Vertex Weight Sum: 100.0

# INFO : Vertex 1: Deformer 0: 48.0, Deformer 1:  0.0, Deformer 2: 52.0, Vertex Weight Sum: 100.0

# INFO : Vertex 2: Deformer 0:  0.0, Deformer 1: 41.5, Deformer 2: 58.5, Vertex Weight Sum: 100.0

# INFO : Vertex 3: Deformer 0: 48.0, Deformer 1:  0.0, Deformer 2: 52.0, Vertex Weight Sum: 100.0

# INFO : Vertex 4: Deformer 0:  0.0, Deformer 1: 57.8, Deformer 2: 42.2, Vertex Weight Sum: 100.0

# INFO : Vertex 5: Deformer 0: 59.3, Deformer 1: 40.7, Deformer 2:  0.0, Vertex Weight Sum: 100.0

# INFO : Vertex 6: Deformer 0:  0.0, Deformer 1: 57.8, Deformer 2: 42.2, Vertex Weight Sum: 100.0

# INFO : Vertex 7: Deformer 0: 59.3, Deformer 1: 40.7, Deformer 2:  0.0, Vertex Weight Sum: 100.0

# INFO : 

# INFO : Envelope Weights after user edit

# INFO : Vertex 0: Deformer 0: 10.0, Deformer 1: 37.3, Deformer 2: 52.7, Vertex Weight Sum: 100.0

# INFO : Vertex 1: Deformer 0: 10.0, Deformer 1:  0.0, Deformer 2: 52.0, Vertex Weight Sum:  62.0

# INFO : Vertex 2: Deformer 0: 10.0, Deformer 1: 37.3, Deformer 2: 52.7, Vertex Weight Sum: 100.0

# INFO : Vertex 3: Deformer 0: 10.0, Deformer 1:  0.0, Deformer 2: 52.0, Vertex Weight Sum:  62.0

# INFO : Vertex 4: Deformer 0: 10.0, Deformer 1: 52.0, Deformer 2: 38.0, Vertex Weight Sum: 100.0

# INFO : Vertex 5: Deformer 0: 10.0, Deformer 1: 40.7, Deformer 2:  0.0, Vertex Weight Sum:  50.7

# INFO : Vertex 6: Deformer 0: 10.0, Deformer 1: 52.0, Deformer 2: 38.0, Vertex Weight Sum: 100.0

# INFO : Vertex 7: Deformer 0: 10.0, Deformer 1: 40.7, Deformer 2:  0.0, Vertex Weight Sum:  50.7

See Also

Envelope.SetDeformerWeights Envelope.GetWeights2