MakeJointCompression

Introduced

4.0

Description

Joint compression is a technique used to model two parts of a character pushing into each other, usually the arms or the legs. A bounding volume sphere is used on the LowerBone to do the pushing, and two nulls are used on the UpperBone to be pushed. For example, when the forearm comes into the bicep, the bicep deforms slightly as it is pushed by the forearm. The bounding volume is attached to the forearm and the nulls to the bicep to get a more realistic skin deformation.

Scripting Syntax

MakeJointCompression( [Prefix], UpperBone, LowerBone, GuideObjectCollection, [RollDivisionCollection] )

Parameters

Parameter

Type

Description

Prefix

String

The name prefix for the newly created compression nulls.

UpperBone

String

The parent for the upper part of the joint assembly.

LowerBone

String

The parent for the lower part of the joint assembly.

GuideObjectCollection

String

A list of 4 objects: 1) the boxes defining a line on the upper joint, closest to the root; 2) the boxes defining a line on the upper joint, closest to the joint; 3) The box control in the middle of the radius curve on the lower joint; and 4) the small sphere that acts as a center point of the radius curve.

RollDivisionCollection

String

A collection of roll division objects so this assembly can bind to a roll division instead of a bone (optional).

Return Value

Returns a Joint JScript object.

Examples

JScript Example

/*
   This script makes a 2 bone arm
   and attaches joint compression nulls
   to the bicep.
*/

//
// Draw an arm-like two bone chain
//
var lPosStart = XSIMath.CreateVector3();
var lPosEnd = XSIMath.CreateVector3();
lPosStart.Set(0,0,0);
lPosEnd.Set(3,0,-1);

var HandChain = ActiveSceneRoot.Add2DChain(lPosStart, lPosEnd);
lPosEnd.Set(6,0,0);
HandChain.AddBone(lPosEnd, 2);

//
// Create guide objects and position them
//

var guidecoll = new ActiveXObject("XSI.Collection");

guidecoll.Add( GetPrim("Null", "RootGuide") ); 
guidecoll.Add( GetPrim("Null", "JointGuide") ); 
guidecoll.Add( GetPrim("Null", "SphereCenter") ); 
guidecoll.Add( GetPrim("Null", "RadiusControl") ); 

var Xfm = XSIMath.CreateTransform();

Xfm.SetTranslationFromValues(2,0,0.5);
guidecoll(0).Kinematics.Global.Transform = Xfm;
Xfm.SetTranslationFromValues(2.5,0,0.5);
guidecoll(1).Kinematics.Global.Transform = Xfm;
Xfm.SetTranslationFromValues(2,0,-1);
guidecoll(2).Kinematics.Global.Transform = Xfm;
Xfm.SetTranslationFromValues(4,0,-1);
guidecoll(3).Kinematics.Global.Transform = Xfm;

var JointCmp = MakeJointCompression("ABC_",HandChain.Bones(0),HandChain.Bones(1),guidecoll);

logmessage ("Data in the returned joint compression object:");
logmessage ("---------------------------------------------");
logmessage ("UpperJoint: " + JointCmp.UpperJoint);
logmessage ("LowerJoint: " + JointCmp.LowerJoint);
logmessage ("Volume    : " + JointCmp.Volume);
logmessage ("Envelope  : " + JointCmp.Envelope);

//results of running this script: 
//INFO : "Data in the returned joint compression object:"
//INFO : "---------------------------------------------"
//INFO : "UpperJoint: ABC_UpperJoint"
//INFO : "LowerJoint: ABC_LowerJoint"
//INFO : "Volume    : ABC_BendVolume"
//INFO : "Envelope  : ABC_UpperJoint,ABC_LowerJoint"

See Also

MakeArm

MakeLeg



Autodesk Softimage v7.5