MakeLeg

Introduced

v4.0

Categories

character rigging

Description

Creates a two bone leg with an up vector control object. The leg bones are created from a collection of guide objects, containing a guide for the hip socket, the knee joint, and the ankle respectively.

MakeLeg can optionally add roll divisions to the thigh. Roll divisions are used to distribute the roll difference between adjacent bones over the length of a bone. When used as deformers on an envelope they evenly distribute twist along the length of a bone giving a more natural skin deformation. Roll divisions can also be added separately using the MakeBicepRoll command.

Optionally a shadow rig can be attached to the leg. Shadow objects are created for each chain element in the leg, and shadow bones are pose-constrained to the acutal leg bones. Shadow rigs can be used to plot animation off of a rig.

Scripting Syntax

oLeg = MakeLeg( Model, Parent, [Prefix], GuideObjectCollection, [UpVectorBehindLeg], [NbThighDivisions], [ShadowType], [ShadowParent] );

Return Value

Returns a Leg JScript object.

Parameters

Parameter Type Description
Model String The model the leg will belong to.
Parent String The parent of the new leg.
Prefix String The naming prefix for the newly created leg objects.
GuideObjectCollection String A list of 3 objects to search for when making the leg: 1) Top of leg; 2)Knee joint; 3)Ankle.
UpVectorBehindLeg Boolean Determines whether the upvector is places behind the leg (-z globally) or in front (+z globally).

Default Value: False

NbThighDivisions Integer The number of roll divisions. If the value is zero no roll is created.

Default Value: 3

ShadowType Integer The type of shadow rig to attach to the leg. Shadow rigs can be used to transfer or remap animation.

Default Value: 0

Possible Values:

Description:

0 No shadow
1 SI|3D Skeleton shadow rig
2 XSI Skeleton shadow rig
3 Null shadow rig
4 Box shadow rig
ShadowParent String Parent of the shadow rig hiearchy. If empty, no shadow rig is generated.

Examples

JScript Example

/*
        This script creates two legs, left and right
        Left  leg has thigh roll divisions
        Right leg has a box shadow hierarchy
*/
var guidecoll = new ActiveXObject("XSI.Collection");
guidecoll.Add( GetPrim("Null", "Guide_HipJoint") ); 
guidecoll.Add( GetPrim("Null", "Guide_KneeJoint") ); 
guidecoll.Add( GetPrim("Null", "Guide_AnkleJoint") ); 
var lXfm = guidecoll(0).Kinematics.Global.Transform
var lNull = GetPrim("Null", "Legs");
/*
        Right Leg
*/
lXfm.SetTranslationFromValues(2,4,0);
guidecoll(0).Kinematics.Global.Transform = lXfm;
lXfm.SetTranslationFromValues(2,0,-1);
guidecoll(1).Kinematics.Global.Transform = lXfm;
lXfm.SetTranslationFromValues(2,-4,0);
guidecoll(2).Kinematics.Global.Transform = lXfm;
var RLeg= MakeLeg(lNull, GetPrim("Null", "RLegParent"),"R", guidecoll, true, 0, 4, GetPrim("Null", "RShadowParent") );
Logmessage("Right Leg");
DumpLeg(RLeg);
/*
        Left Leg
*/
lXfm.SetTranslationFromValues(-2,4,0);
guidecoll(0).Kinematics.Global.Transform = lXfm;
lXfm.SetTranslationFromValues(-2,0,-1);
guidecoll(1).Kinematics.Global.Transform = lXfm;
lXfm.SetTranslationFromValues(-2,-4,0);
guidecoll(2).Kinematics.Global.Transform = lXfm;
var LLeg = MakeLeg(lNull , GetPrim("Null", "LLegParent"),"L", guidecoll);
Logmessage("Left Leg");
DumpLeg(LLeg);
function DumpLeg(inLeg)
{
        logmessage ("Data in the returned leg:");
        logmessage ("------------------------");
        logmessage ("Root        : " + inLeg.Root);
        logmessage ("Effector    : " + inLeg.Eff);
        logmessage ("UpVector    : " + inLeg.upV);
        logmessage ("Skeleton    : " + inLeg.Skel);
        if(inLeg.ThighDivisions>0)
        {logmessage ("Thigh Divs  : " + inLeg.ThighRoll.Divisions);}
        logmessage ("Hidden      : " + inLeg.Hidden);
        logmessage ("Envelope    : " + inLeg.Envelope);
        logmessage ("ShadowsStart: " + inLeg.ShadowStart);
        logmessage ("ShadowsEnds : " + inLeg.ShadowEnds);
        logmessage ("Shadows     : " + inLeg.Shadows);
}
//results of running this command:
//INFO : Right Leg
//INFO : Data in the returned leg:
//INFO : ------------------------
//INFO : Root        : RRoot
//INFO : Effector    : RlegEff
//INFO : UpVector    : RlegUpV
//INFO : Skeleton    : RRoot,RThigh,RShin,RlegEff
//INFO : Hidden      : RRoot,RlegEff
//INFO : Envelope    : RThigh,RShin
//INFO : ShadowsStart: RThigh1
//INFO : ShadowsEnds : RForeleg
//INFO : Shadows     : RThigh1,RForeleg
//
//INFO : Left Leg
//INFO : Data in the returned leg:
//INFO : ------------------------
//INFO : Root        : LRoot
//INFO : Effector    : LlegEff
//INFO : UpVector    : LlegUpV
//INFO : Skeleton    : LRoot,LThigh,LShin,LlegEff
//INFO : Thigh Divs  : LBicepRoll1,LBicepRoll2,LBicepRoll3,LBicepRoll_4
//INFO : Hidden      : LRoot,LlegEff
//INFO : Envelope    : LShin,LBicepRoll1,LBicepRoll2,LBicepRoll3,LBicepRoll_4
//INFO : ShadowsStart: undefined
//INFO : ShadowsEnds : undefined
//INFO : Shadows     : undefined

See Also

MakeDogLeg MakeArm MakeThighSlide MakeFoot