v1.0
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.
oReturn = SIModifyFlexEnvWght( PropObj, Name, [SubComp], [Mode], [Value], [Normalize] ); |
Returns an XSICollection that contains the new envelope operators.
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)
|
||||||||
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
|
||||||||
Normalize | Boolean |
Normalize weights between deformers. Default Value: True |
'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 |