SIModifyFlexEnvWg ht

Introduced

1.0

Description

Modifies the weighting of envelope points. An envelope is an object or hierarchy that is assigned as a "skin" to a set of deformers such as IK chains. Envelopes move and deform in response to the movements of their deformers. In this way, for example, a character moves as you animate its skeleton.

Every point in an envelope is assigned to one or more deformers. For each point, weights control the relative influence of its deformers.

Note: An alternative, and potentially faster, way to set envelope weights is via the Object Model, see Envelope.Weights.

Scripting Syntax

    SIModifyFlexEnvWght( PropObj, Name, [SubComp], [Mode], [Value], [Normalize] )

Parameters

Parameter | Type | Description
PropObj | String | Envelope weights property to be modified.
Name | String | Name of a deformer object. Weight values relative to this object are modified.
SubComp | String | List of points. Default Value: Current selection
Mode | Integer | Weight modification mode Default Value: 0 (Absolute) Possible Values: • 0: Absolute • 1: Additive • 2: Add Percentage
Value | Float | Weight value applied to the specified points. Note: The valid value range for weights is between 0 and 100.0. When you change the weight for one of the deformers, it also affects other deformer weights since the total weight is always 100%. Default Value: 100.0 Possible Values: • 0 to 100.0: Valid value range is between 0 and 100.0
Normalize | Boolean | Normalize weights between deformers. Default Value: True

Return Value

Returns an XSICollection that contains the new envelope operators.

Examples

VBScript Example

    'CreateSinusoidalEnvelope: creates an envelope over 2 Nulls,
    'with a customized, special wave-like weight assignment.
    '
    'A generic subroutine was created; it can handle any mesh as input.

    Sub CreateSinusoidalEnvelopeAssign( Object, out_Null0, out_Null1 )

    'Create the two envelope "handles"
    Set out_Null0 = GetPrim("Null")
    Set out_Null1 = GetPrim("Null")

    'Envelope the object with the 2 Nulls
    Set EnvelopeWeightsAssign =_
    ApplyFlexEnv(Object & ";" & out_Null0 & "," & out_Null1, False)

    Set EnvelopeWeightsProperty = _
    GetValue( CStr( EnvelopeWeightsAssign ) ).Owners(0)

    'Reset all weights to 100% for Null0 and 0% for Null1
    '(use absolute mode), with normalize ON
    SIModifyFlexEnvWght EnvelopeWeightsProperty, out_Null0,_
    Object & ".pnt[*]", 0, 100, True

    'Get object's points collection
    Set Points = Object.ActivePrimitive.Geometry.Points
    NbPts = Points.Count

    for i = 0 to NbPts - 1
    'We will set the weight of out_Null1 as
    '"(1 + Sin(Z Coord of the point))*100/8" (or any formula).
    'We will user the additive mode in SIModifyFlexEnvWght.

    Weight = (1 + Sin(Points(i).position.z * 2.0))*50
    SIModifyFlexEnvWght EnvelopeWeightsProperty, out_Null1,_
    Object & ".pnt[" & i & "]", 1, Weight
    next

    End Sub

    'Call CreateSinusoidalEnvelopeAssign with a Grid.
    'Then move one of the 2 Null deformers in order to see the effect.
    NewScene

    Set Grid = CreatePrim("Grid", "MeshSurface")
    SetValue Grid & ".polymsh.geom.subdivu", 1
    SetValue Grid & ".polymsh.geom.subdivv", 30

    CreateSinusoidalEnvelopeAssign Grid, Null0, Null1

    'Translate Null1 to see the effect of the special weighting
    'You can move Null1 to see more...
    Translate Null1, 3, 0.0, 0.0, siRelative, siView, siObj, siXYZ

    'Let's show the weight maps so you can see what was computed:
    SetDisplayMode "Views.ViewA.TopCamera", "constant"
    SetValue "Views.ViewA.TopCamera.camvis.objctrlpropmaps", True
    SelectObj "grid", , True

See Also

SIApplyFlexEnv | Envelope

Autodesk Softimage v7.5