LimitEnvelopeDeformers

Introduced

1.0

Description

Applies an operator that limits the number of envelope deformers that can affect a given vertex. For a given integer limit, the operator ensures the limit is met by removing the deformers with the minimum number of weights. The remaining weights are then normalized. The limit respects locked weights, meaning that if the minimum weight is actually a locked weight, it is not removed. Similarly, if the only remaining weights after applying the limit are locked, normalization will not be performed.

 

Scripting Syntax

LimitEnvelopeDeformers( PropObj, [SubComp], Limit )

Parameters

Parameter

Type

Description

PropObj

String

Envelope weights property to be modified.

SubComp

String

List of points/objects/clusters to be smoothed.

Default Value: Current selection

Limit

Integer

The maximum number of deformers permitted to affect a given vertex contained in SubComp

Return Value

Returns the newly created LimitEnvelopeDeformersOp operator.

Examples

JScript Example

NewScene(null, null);

// Create a cylinder to be deformed
CreatePrim("Cylinder", "MeshSurface", null, null);
SetValue("cylinder.polymsh.geom.subdivu", 20, null);
SetValue("cylinder.polymsh.geom.subdivv", 20, null);
SetValue("cylinder.cylinder.height", 12.264, null);
Create2DSkeleton(0, -6, 0.6, 0, -5.25, 0.525, -5.7, 0, 0, 4, null, null);

// Create a chain of bones to deform the cylinder with
AppendBone("eff", -0.16, -2.5, 0.25, null);
AppendBone("eff", -0.12, 0.6, 0, null);
AppendBone("eff", -0.12, 3.4, -0.34, null);
AppendBone("eff", -0.12, 5.7, -0.57, null);
AppendBone("eff", -0.12, 6.5, -0.65, null);

// Deform the cylinder
SelectObj("cylinder", null, true);
ApplyFlexEnv("cylinder;root,bone,bone1,bone2,bone3,bone4,bone5,bone6,bone7,bone8,bone9,eff", null, 2);
SelectObj("eff", null, true);
Translate(null, -4.8, -8.4, 0.84, siRelative, siView, siObj, siXYZ, null, null, null, null, null, null, null, null, null, 0, null);
SelectObj("cylinder", null, true);
SetValue("cylinder.polymsh.cls.EnvelopWeightCls.Envelope_Weights.autoenvassign.defnbskelobj", 4, null);

// Open the weight editor to look at how the bones are assigned
OpenView("Weight Editor", null);
LockEnvelopeWeights("cylinder.polymsh.cls.EnvelopWeightCls.Envelope_Weights", Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), Array(4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4), null);
XSIUIToolkit.MsgBox("Note that in the Weight Editor each bone is affected by four deformers, and some of the weights of bone3 are locked.  A limit of 2 deformers will now be applied.");

// Limit to two the number of deformers that apply to a given vertex
LimitEnvelopeDeformers("cylinder.polymsh.cls.EnvelopWeightCls.Envelope_Weights", null, 2);
XSIUIToolkit.MsgBox("Only two deformers are permitted to affect a given vertex, and the weights have been normalized.  Note that the locked weights were not modified.");


Autodesk Softimage v7.5