Envelope.SetDeformerWeights2
 
 
 

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