v4.0
Creates a one-bone hand and a set of finger bones using guide objects to position and orient
the bone joints. Two collections of guide objects are necessary to create a hand: a collection
of finger guide objects to position finger joints; and a collection of "blade" objects that control
the curl direction of the fingers. The finger chain is set up so that bone Z rotation is in the
plane of the blade.
Optionally a shadow rig can be attached to the hand and fingers. A shadow object is created for each
chain element in the arm, and pose constrained to that element. Shadow rigs can be used to plot
animation off of a rig.
oHand = MakeHand( HandParent, FingerGuideCollection, BladeGuideCollection, HandGuideCollection, [Prefix], [FingerBoneType], [ShadowType], [ShadowParent], [NegativeScale] ); |
Returns a Hand JScript object.
Parameter | Type | Description | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
HandParent | String | The object to which the new hand will be parented. | ||||||||||||||||||||
FingerGuideCollection | String | A collection of guides objects for the start of each finger. Given a guide object in the collection like "LRing1" make hand will search for "LRing2", "LRing3", etc. until it can't find more joints. At least one extra joint per root needs to be found in the scene for a bone to be drawn. | ||||||||||||||||||||
BladeGuideCollection | String | A collection of blade objects showing the orientation of the fingers being drawn. Needs to be in the same order as the Root Guides. | ||||||||||||||||||||
HandGuideCollection | String | A collection of two objects in the order: start of hand bone, end of hand bone. | ||||||||||||||||||||
Prefix | String | The prefix used to name new objects when making the new hand. For example, "L" and "R". | ||||||||||||||||||||
FingerBoneType | Integer |
Option to construct finger bones from 2D or 3D chains. Default Value: 0
|
||||||||||||||||||||
ShadowType | Integer |
The type of shadow rig to attach to the hand. Shadow rigs can be used to transfer or remap animation. Default Value: 0
|
||||||||||||||||||||
ShadowParent | String | Parent of the shadow rig hiearchy. If empty, no shadow rig is generated. | ||||||||||||||||||||
NegativeScale | Boolean |
Negative scaling on the chain. Negative scaling is useful for manipulating the left and right hands or fingers symmetrically. Default Value: False |
/* Loads the Biped Guide then generates a left hand matched to the guide */ GetProportionalGuide("Biped_Guide", 0, 0); var Guide = ActiveSceneRoot.FindChild("Biped_Guide" ); var LFingers = new ActiveXObject("XSI.Collection"); var LBlades = new ActiveXObject("XSI.Collection"); var handKeys = new Array("Pinky", "Ring", "Middle", "Index", "Thumb"); for(i=0;i<handKeys.length;i++){ var finger = Guide.FindChild("L" + handKeys[i] + 1); var blade = Guide.FindChild("L" + handKeys[i] + "_fingerBlade"); if(finger && blade){ LFingers.add(finger); LBlades.add(blade); } } var LHBone = new ActiveXObject("XSI.Collection"); LHBone.add(Guide + ".LHand"); LHBone.add(Guide + ".LHandEnd"); var LHand = makeHand(ActiveSceneRoot, LFingers, LBlades, LHBone, "L", 0, 0, null, 0); DumpHand(LHand); //Delete the guide DeleteObj("B:"+Guide); //Move hand to the origin var xfo xfo = LHand.Root.Kinematics.Global.Transform; xfo.SetTranslationFromValues(0,0,0); LHand.Root.Kinematics.Global.Transform = xfo; function DumpHand(inHand) { logmessage ("Data in the returned hand object:"); logmessage ("---------------------------------"); logmessage ("HandRoot : " + inHand.Root); logmessage ("HandEff : " + inHand.Eff); logmessage ("#FingRoots: " + inHand.FingerRoots.count); for(var b=0;b<inHand.FingerRoots.count;b++) {logmessage (" FingerRoot" + b + ": " + inHand.FingerRoots(b));} logmessage ("Hidden : " + inHand.Hidden); logmessage ("Envelope : " + inHand.Envelope); logmessage ("Shadows : " + inHand.Shadows); } //results from running this script: //INFO : "Data in the returned hand object:" //INFO : "---------------------------------" //INFO : "HandRoot : LHandRoot" //INFO : "HandEff : LHandEffector" //INFO : "#FingRoots: 5" //INFO : " FingerRoot0: LPinkyRoot" //INFO : " FingerRoot1: LRingRoot" //INFO : " FingerRoot2: LMiddleRoot" //INFO : " FingerRoot3: LIndexRoot" //INFO : " FingerRoot4: LThumbRoot" //INFO : "Hidden : LPinkyRoot,LPinkyEffector,LRingRoot,LRingEffector,LMiddleRoot,LMiddleEffector,LIndexRoot,LIndexEffector,LThumbRoot,LThumbEffector,LHandRoot,LHandEffector" //INFO : "Envelope : LPinky1,LPinky2,LPinky3,LRing1,LRing2,LRing3,LMiddle1,LMiddle2,LMiddle3,LIndex1,LIndex2,LIndex3,LThumb1,LThumb2,LThumb3,LHand" //INFO : "Shadows : undefined" |