分享

createFBIK_Skeleton.mel

 ggandbb 2010-11-23

//***********************************************************************************************************
//
// createFBIK_Skeleton.mel
//    2005.08.16 Takayuki Kondo
//    Some Procedures(*_FR) is based on the "FINAL RIG" by RadiantSquare.
//
//***********************************************************************************************************

//************************************************************************************************************
//
proc string _getShape(string $node)
{
 string $ret;
 string $tmp[] = `listRelatives -s -ni $node`;
 $ret = $tmp[0];
 return $ret;
}

//***********************************************************************************************************
//
proc _LockAndHide_FR(string $node,int $keyTX,int $keyTY,int $keyTZ,int $keyRX,int $keyRY,int $keyRZ,int $keySX,int $keySY,int $keySZ,int $keyV,int $LockTX,int $LockTY,int $LockTZ,int $LockRX,int $LockRY,int $LockRZ,int $LockSX,int $LockSY,int $LockSZ,int $LockV) {

 setAttr ($node+".tx") -k $keyTX;
 setAttr ($node+".ty") -k $keyTY;
 setAttr ($node+".tz") -k $keyTZ;
 setAttr ($node+".rx") -k $keyRX;
 setAttr ($node+".ry") -k $keyRY;
 setAttr ($node+".rz") -k $keyRZ;
 setAttr ($node+".sx") -k $keySX;
 setAttr ($node+".sy") -k $keySY;
 setAttr ($node+".sz") -k $keySZ;
 setAttr ($node+".v")  -k $keyV;
 setAttr ($node+".tx") -l $LockTX;
 setAttr ($node+".ty") -l $LockTY;
 setAttr ($node+".tz") -l $LockTZ;
 setAttr ($node+".rx") -l $LockRX;
 setAttr ($node+".ry") -l $LockRY;
 setAttr ($node+".rz") -l $LockRZ;
 setAttr ($node+".sx") -l $LockSX;
 setAttr ($node+".sy") -l $LockSY;
 setAttr ($node+".sz") -l $LockSZ;
 setAttr ($node+".v")  -l $LockV;
}

//************************************************************************************************************
//
proc string _createCurveFromGuideData(string $prefix, string $data[])
{
 string $crv = "";
 if ( !`size $data` ) return $crv;

 // FORMAT ---- parts, degree, cvnum, [x,y,z], [x,y,z], ... @
 string $name = $data[0];
 int $degree = $data[1];
 int $cvNum = $data[2];

 string $com = "curve -d " + $degree + " ";
 int $ct = 3;
 for ( $i = 0; $i < $cvNum; $i++ ) {
  $com += "-p " + $data[$ct] + " " + $data[$ct+1] + " " + $data[$ct+2] + " ";
  $ct += 3;
 }
 if ( $degree == 1 ) {
  for ( $i = 0; $i < $cvNum; $i++ )
   $com += "-k " + $i + " ";
 } else {
  $com += "-k 0 -k 0 ";
  for ( $i = 0; $i < ($cvNum - 2); $i++ )
   $com += "-k " + $i + " ";
  $com += "-k " + ($cvNum - 3) + " -k " + ($cvNum - 3) + " ";
 }
 $com += "-n (\"" + $prefix + $name + "\");\n";
 $crv = `eval $com`;

 _LockAndHide_FR($crv,  0,0,0, 0,0,0, 0,0,0, 0,  1,1,1, 1,1,1, 1,1,1, 1);

 return $crv;
}

//***********************************************************************************************************
//
proc string _ClusterRefCreation_FR (string $parent, string $prefix, string $curve,int $startLoop,int $endLoop,float $scale){
 int $i;
 string $dummy = "Ctrl";
 string $curveHandle[];
 string $curveSphere = ($curve+$dummy);
 string $curveRef = ($curve+"Refbox");
 float $clusPos[];

 // ========= get CV  (CV's = degree + spans)
 string $shape = _getShape($curve);
 int $curveDegree = `getAttr ($shape+".degree")`;
 int $curveSpans  = `getAttr ($shape+".spans")`;
 int $CV  = $curveDegree + $curveSpans;

 // =========
 if ( objExists($parent) )
  parent $curve $parent;

 // =========
 for ( $i = $startLoop ; $i < $CV - $endLoop ; $i++ ) {

  // ========= get the position
  $clusPos = `xform -q -ws -t ($curve+".cv["+$i+"]")`;

  // ========= create a cluster on it
  $curveHandle = `cluster -n ($curve)($curve+".cv["+$i+"]")`;
  rename ($curve+$i+"Handle");

  // ========= Blue Sphere
  sphere  -ax 0 1 0 -ssw 0 -esw 360 -r 0.1 -d 3 -ut 0 -tol 0.01 -s 2 -nsp 2 -ch 1 -n ($curveSphere+$i);
  move $clusPos[0] $clusPos[1] $clusPos[2];
  xform -cp ($curveSphere+$i);
  displaySmoothness -divisionsU 3 -divisionsV 3 -pointsWire 16 -pointsShaded 4;
  DisplayShaded;
  float $RefSpherePos[] = `xform -q -ws -piv ($curveSphere+$i)`;
  move -rpr 0 0 0 ($curveSphere+$i);
  makeIdentity -apply true -t 1 -r 1 -s 1 ($curveSphere+$i);
  xform -ws -t $RefSpherePos[0] $RefSpherePos[1] $RefSpherePos[2] ($curveSphere+$i);
  if ( objExists(($prefix+"RigSpheres")) )
   parent ($curveSphere+$i) ($prefix+"RigSpheres"); 
  _LockAndHide_FR($curveSphere+$i,  1,1,1, 0,0,0, 0,0,0, 0,  0,0,0, 0,0,0, 0,0,0, 0);
  delete -ch ($curveSphere+$i); // delete history

  // ========= Outline Sphere
  sphere -ax 0 1 0 -ssw 0 -esw 360 -r 0.12 -d 3 -ut 0 -tol 0.01 -s 2 -nsp 2 -ch 1 -n ($curveRef+$i);
  move $clusPos[0] $clusPos[1] $clusPos[2];
  parent ($curveRef+$i) ($curveSphere+$i);

  if ( objExists("RIG_ShaderSG") ) {
   select ($curveSphere+$i);
   sets -e -forceElement RIG_ShaderSG;
   setAttr ($curveRef+$i+".template") 1;
  }

  // ========= hide cluster
  setAttr ($curve+$i+"Handle.visibility") 0;
  parent ($curve+$i+"Handle") ($curveSphere+$i);

  scale $scale $scale $scale ($curveSphere+$i);

  // ========= point constraint the cluster handle under the parent sphere
  pointConstraint -offset 0 0 0 -weight 1 ($curveSphere+$i) ($curve+$i+"Handle") ;
 }

 return ($curveSphere+$startLoop);
}

//***********************************************************************************************************
//
proc string _RefCreation_FR (string $prefix, string $curve,string $cluster,float $scale,int $CtrlNum){
 float $clusPos[];
 string $dummy = "Ctrl";

 // =========
 $clusPos = `xform -q -ws -rp $cluster`;
 sphere -ax 0 1 0 -ssw 0 -esw 360 -r 0.1 -d 3 -ut 0 -tol 0.01 -s 2 -nsp 2 -ch 1 -n ($prefix+$curve+$dummy+$CtrlNum);
 move $clusPos[0] $clusPos[1] $clusPos[2];
 CenterPivot;
 delete -ch ($prefix+$curve+$dummy+$CtrlNum);
 displaySmoothness -divisionsU 3 -divisionsV 3 -pointsWire 16 -pointsShaded 4;
 DisplayShaded;
 float $RefSpherePos[] = `xform -q -ws -piv ($prefix+$curve+$dummy+$CtrlNum)`;
 move -rpr 0 0 0 ($prefix+$curve+$dummy+$CtrlNum);
 makeIdentity -apply true -t 1 -r 1 -s 1 ($prefix+$curve+$dummy+$CtrlNum);
 xform -ws -t $RefSpherePos[0] $RefSpherePos[1] $RefSpherePos[2] ($prefix+$curve+$dummy+$CtrlNum); 
 select ($prefix+$curve+$dummy+$CtrlNum);
 sets -e -forceElement RIG_ShaderSG;

 // =========
 parent ($prefix+$curve+$dummy+$CtrlNum) ($prefix+"RigSpheres");
 _LockAndHide_FR($prefix+$curve+$dummy+$CtrlNum,  1,1,1, 0,0,0, 0,0,0, 0,  0,0,0, 0,0,0, 0,0,0, 0);

 // =========
 sphere -ax 0 1 0 -ssw 0 -esw 360 -r 0.12 -d 3 -ut 0 -tol 0.01 -s 2 -nsp 2 -ch 1 -n ($prefix+$curve+"Refbox"+$CtrlNum);
 move $clusPos[0] $clusPos[1] $clusPos[2];
 setAttr ($prefix+$curve+"Refbox"+$CtrlNum+".template") 1;
 setAttr ($cluster+".visibility") 0;

 parent ($prefix+$curve+"Refbox"+$CtrlNum) ($prefix+$curve+$dummy+$CtrlNum);

 scale $scale $scale $scale ($prefix+$curve+$dummy+$CtrlNum);

 // =========
 parent $cluster ($prefix+$curve+$dummy+$CtrlNum);

 return ($prefix+$curve+$dummy+$CtrlNum);
}

//************************************************************************************************************
//
proc string[] _JointOn1DCurve_FR (string $curve,int $startLoop,int $endLoop, int $split[]){
 int $i;
 string $j[];

 createNode curveInfo -n ($curve +"_curveLength");
 string $curveShape[] = `listRelatives $curve`;
 if ( !`isConnected ($curveShape[0] + ".worldSpace[0]") ($curve +"_curveLength.inputCurve") ` )
  connectAttr -f ($curveShape[0] + ".worldSpace[0]") ($curve +"_curveLength.inputCurve");
 int $curveDegree = `getAttr ($curveShape[0] +".degree")`;

 int $curveSpans = `getAttr ($curveShape[0] +".spans")`;
 int $curveCvNum = ($curveDegree + $curveSpans);

 int $ct=0;
  for ($i =$startLoop;$i< $curveCvNum - $endLoop;$i++){
   float $cvPos[] = `getAttr ($curve +"_curveLength.controlPoints["+$i+"]")`;
   $j[$ct++] = `joint -p $cvPos[0] $cvPos[1] $cvPos[2] -n ($curve +"Joint_"+$ct)`;

   // split
   for ( $x = 0; $x < `size $split`; $x++ ) {
    if ( $split[$x] == $i && ($i+1) < ($curveCvNum - $endLoop) ) {
     float $nxtPos[] = `getAttr ($curve +"_curveLength.controlPoints["+ ($i+1) +"]")`;
     float $midPos[];
     $midPos[0] = ($nxtPos[0] + $cvPos[0]) / 2.0;
     $midPos[1] = ($nxtPos[1] + $cvPos[1]) / 2.0;
     $midPos[2] = ($nxtPos[2] + $cvPos[2]) / 2.0;
     $j[$ct++] = `joint -p $midPos[0] $midPos[1] $midPos[2] -n ($curve +"Joint_"+$ct)`;
    }
   }


  }

 // reorient
 select -r $j[0];
 joint -e -oj yzx -secondaryAxisOrient zdown -ch -zso;

 return $j;
}

//************************************************************************************************************
//
proc _rotateLocalAxis(string $sels[], float $Axisx, float $Axisy, float $Axisz, int $rstJt) {
 global string $gMove;

 for($sel in $sels){
  select -r ($sel +".rotatePivot")( $sel +".scalePivot")( $sel +".rotatePivot")( $sel +".rotateAxis") ;
  rotate -r -os $Axisx $Axisy $Axisz;
 }
 setToolTo $gMove;
 if ( $rstJt ) {
  string $children[] = `listRelatives -c $sel`;
  parent -w $children;
  setAttr ($sel +".rotateAxis") 0 0 0;
  parent $children $sel;
 }
}

//************************************************************************************************************
//
proc string[] _getJoints(string $topJT)
{
 string $joints[];

 $tmp = `listRelatives -ad -path -type joint $topJT`;
 $joints[0] = $topJT;
 int $ct=1;
 for ($i = `size $tmp` - 1; $i >= 0; $i--)
  $joints[$ct++] = $tmp[$i];
 return $joints;
}

//************************************************************************************************************
//
proc _setOneJointLabel(string $joint, string $label, string $side)
{
 switch ( $side ) {
  case "Center": setAttr ($joint+".side") 0; break;
  case "Left":  setAttr ($joint+".side") 1; break;
  case "Right": setAttr ($joint+".side") 2; break;
  case "None":  setAttr ($joint+".side") 3; break;
 }

 switch ( $label ) {
  case "None":  setAttr ($joint+".type")  0; break;
  case "Root":  setAttr ($joint+".type")  1; break;
  case "Hip":   setAttr ($joint+".type")  2; break;
  case "Knee":  setAttr ($joint+".type")  3; break;
  case "Foot":  setAttr ($joint+".type")  4; break;
  case "Toe":   setAttr ($joint+".type")  5; break;
  case "Spine":  setAttr ($joint+".type")  6; break;
  case "Neck":  setAttr ($joint+".type")  7; break;
  case "Head":  setAttr ($joint+".type")  8; break;
  case "Collar":  setAttr ($joint+".type")  9; break;
  case "Shoulder": setAttr ($joint+".type") 10; break;
  case "Elbow":  setAttr ($joint+".type") 11; break;
  case "Hand":  setAttr ($joint+".type") 12; break;
  case "Finger":  setAttr ($joint+".type") 13; break;
  case "Thumb":  setAttr ($joint+".type") 14; break;
  case "PropA":  setAttr ($joint+".type") 15; break;
  case "PropB":  setAttr ($joint+".type") 16; break;
  case "PropC":  setAttr ($joint+".type") 17; break;
  case "Other":  setAttr ($joint+".type") 18; break;
  case "IndexFinger": setAttr ($joint+".type") 19; break;
  case "MiddleFinger": setAttr ($joint+".type") 20; break;
  case "RingFinger": setAttr ($joint+".type") 21; break;
  case "PinkyFinger": setAttr ($joint+".type") 22; break;
  case "ExtraFinger": setAttr ($joint+".type") 23; break;
  case "BigToe":  setAttr ($joint+".type") 24; break;
  case "IndexToe": setAttr ($joint+".type") 25; break;
  case "MiddleToe": setAttr ($joint+".type") 26; break;
  case "RingToe":  setAttr ($joint+".type") 27; break;
  case "PinkyToe": setAttr ($joint+".type") 28; break;
  case "ExtraToe": setAttr ($joint+".type") 29; break;
 }
}

//************************************************************************************************************
//
proc _setJointLabels(string $topJT, string $labels[])
{
 string $jnts[] = _getJoints($topJT);
 int $ct=0;

 string $markLabel = "";
 int $maxJ = `size $jnts`;
 int $maxL = `size $labels`;
 for ($i = 0; $i < $maxJ; $i++) {
  if ( $i >= $maxL && $markLabel == "" ) break;


  string $side;
  if ( gmatch($jnts[$i], "Left*") )
   $side = "Left";
  else if ( gmatch($jnts[$i], "Right*") )
   $side = "Right";
  else
   $side = "Center";

  if ( $i < $maxL && $labels[$i] == "" ) {
   _setOneJointLabel($jnts[$i], "", $side);
   continue;
  }

  if ( gmatch($labels[$i], "*\\*") && $markLabel == "" ) {

   int $len = `size $labels[$i]`;
   $markLabel = `substring $labels[$i] 1 ($len-1)`;

   _setOneJointLabel($jnts[$i], $markLabel, $side);

  } else if ( $markLabel != "" ) {
   _setOneJointLabel($jnts[$i], $markLabel, $side);

  } else {
   _setOneJointLabel($jnts[$i], $labels[$i], $side);

  }
 }
}

//************************************************************************************************************
//
proc string[] _renameJoints(string $topJT, string $name[])
{
 string $new[];
 string $jnts[] = _getJoints($topJT);
 int $ct=0;

 int $start = 0;
 string $base;
 int $maxJ = `size $jnts`;
 int $maxN = `size $name`;
 for ($i = 0; $i < $maxJ; $i++) {
  if ( $i >= $maxN && !$start ) break;
  if ( gmatch($name[$i], "*\\*") && !$start ) {

   int $len = `size $name[$i]`;
   $base = `substring $name[$i] 1 ($len-1)`;

   $new[$ct++] = `rename $jnts[$i] ($base + ($start+1))`;
   $start++;

  } else if ( $start ) {

   $new[$ct++] = `rename $jnts[$i] ($base + ($start+1))`;
   $start++;

  } else {
   $new[$ct++] = `rename $jnts[$i] $name[$i]`;
  }
 }

 return $new;
}

//************************************************************************************************************
//
proc string _createGlobalScaleManipulator(int $shapeType, float $size)
{
 string $tmp[];
 string $ret;

 $tmp = `circle -c 0 0 0 -nr 0 1 0 -sw 360 -r $size -d 3 -ut 0 -tol 0.01 -s 8 -ch 0`;
 $ret = $tmp[0];
 return $ret;
}

 

//***********************************************************************************************************
//
proc _ParentingGuideCurves(string $prefix) {

 // ========= the fingers spheres
  // pinky
  string $tmp[] = `ls -type transform ($prefix+"LpinkyCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"LfingerCtrl0");
  string $tmp[] = `ls -type transform ($prefix+"RpinkyCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"RfingerCtrl0");

  // ring
  string $tmp[] = `ls -type transform ($prefix+"LringCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"LfingerCtrl0");
  string $tmp[] = `ls -type transform ($prefix+"RringCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"RfingerCtrl0");

  // index
  string $tmp[] = `ls -type transform ($prefix+"LindexCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"LfingerCtrl0");
  string $tmp[] = `ls -type transform ($prefix+"RindexCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"RfingerCtrl0");

  // middle
  string $tmp[] = `ls -type transform ($prefix+"LmiddleCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"LfingerCtrl0");
  string $tmp[] = `ls -type transform ($prefix+"RmiddleCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"RfingerCtrl0");

  // Thumb
  string $tmp[] = `ls -type transform ($prefix+"LthumbCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"LfingerCtrl0");
  string $tmp[] = `ls -type transform ($prefix+"RthumbCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"RfingerCtrl0");

 // ========= Arm
  string $tmp[] = `ls -type transform ($prefix+"LarmCtrl*")`;
  for ($one in $tmp) {
   if ( $one != ($prefix+"LarmCtrl1") )
    parent $one ($prefix+"LarmCtrl1");
  }
  string $tmp[] = `ls -type transform ($prefix+"RarmCtrl*")`;
  for ($one in $tmp) {
   if ( $one != ($prefix+"RarmCtrl1") )
    parent $one ($prefix+"RarmCtrl1");
  }

 // ========= Hand && Finger
  parent ($prefix+"LhandCtrl0") ($prefix+"LfingerCtrl0") ($prefix+"LarmCtrl1");
  parent ($prefix+"RhandCtrl0") ($prefix+"RfingerCtrl0") ($prefix+"RarmCtrl1");

 // ========= Leg
  string $tmp[] = `ls -type transform ($prefix+"LlegCtrl*")`;
  for ($one in $tmp) {
   if ( $one != ($prefix+"LlegCtrl0") )
    parent $one ($prefix+"LlegCtrl0");
  }
  string $tmp[] = `ls -type transform ($prefix+"RlegCtrl*")`;
  for ($one in $tmp) {
   if ( $one != ($prefix+"RlegCtrl0") )
    parent $one ($prefix+"RlegCtrl0");
  }

 // ========= Foot
  parent ($prefix+"LFootCtrl0") ($prefix+"LlegCtrl0");
  parent ($prefix+"RFootCtrl0") ($prefix+"RlegCtrl0");

 // ========= the fingers Foot spheres
  // pinky Foot
  string $tmp[] = `ls -type transform ($prefix+"LpinkyFootCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"LFootCtrl0");
  string $tmp[] = `ls -type transform ($prefix+"RpinkyFootCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"RFootCtrl0");

  // ring Foot
  string $tmp[] = `ls -type transform ($prefix+"LringFootCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"LFootCtrl0");
  string $tmp[] = `ls -type transform ($prefix+"RringFootCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"RFootCtrl0");

  // index Foot
  string $tmp[] = `ls -type transform ($prefix+"LindexFootCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"LFootCtrl0");
  string $tmp[] = `ls -type transform ($prefix+"RindexFootCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"RFootCtrl0");

  // middle Foot
  string $tmp[] = `ls -type transform ($prefix+"LmiddleFootCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"LFootCtrl0");
  string $tmp[] = `ls -type transform ($prefix+"RmiddleFootCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"RFootCtrl0");

  // Thumb Foot
  string $tmp[] = `ls -type transform ($prefix+"LthumbFootCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"LFootCtrl0");
  string $tmp[] = `ls -type transform ($prefix+"RthumbFootCtrl*")`;
  for ($one in $tmp)
   parent $one ($prefix+"RFootCtrl0");
}


//###########################################################################################################
//
//  DATA BLOCK (START)
//
//###########################################################################################################
//************************************************************************************************************
//
proc string[] _getGuildeData_Quadruped(string $type, string $parts)
{
 string $data[];

 if ( $type == "Quadruped_Hoof" ) {
  switch ($parts) {
    case "spineRoot":  $data = { "spineRoot", "1", "2", "-0.002094268799", "26.22555087", "-9.88815677", "-0.002094268799", "26.18165207", "-10.27954769", "@"}; break;
    case "Lcollar":  $data = { "Lcollar", "1", "2", "1.553015947", "26.42442703", "4.494413376", "-0.007515927016", "26.52140521", "1.298793588", "@"}; break;
    case "Rcollar":  $data = { "Rcollar", "1", "2", "-1.561343249", "26.42470824", "4.492804218", "0.000849717203", "26.52140521", "1.298793588", "@"}; break;
    case "LparHip":  $data = { "LparHip", "1", "2", "-0.002094268799", "26.18165207", "-10.27954769", "2.139726814", "22.6293802", "-11.30679993", "@"}; break;
    case "RparHip":  $data = { "RparHip", "1", "2", "-0.002094268799", "26.18165207", "-10.27954769", "-2.144100621", "22.62929002", "-11.30673588", "@"}; break;
    case "tail":  $data = { "tail", "1", "4", "-0.002094268799", "26.18165207", "-10.27954769", "-0.002076586246", "26.19949903", "-12.08724564", "-0.002066734919", "26.19705807", "-13.81714685", "-0.002065459856", "26.19957482", "-15.72968342", "@"}; break;
    case "spine":  $data = { "spine", "1", "5", "-0.002094268799", "26.22555087", "-9.88815677", "-0.002175405442", "26.56533933", "-6.153349168", "-0.002712724351", "26.55178921", "-2.53279462", "-0.007515927016", "26.52140521", "1.298793588", "-0.003485685089", "27.05054108", "6.845271941", "@"}; break;
    case "neck":  $data = { "neck", "1", "3", "-0.003485685089", "27.05054108", "6.845271941", "0.01793573636", "29.32353414", "9.963734321", "0.05091977087", "31.14812273", "13.24767783", "@"}; break;
    case "head":  $data = { "head", "1", "3", "0.05091977087", "31.14812273", "13.24767783", "-1.355159631e-026", "32.19550638", "16.12406277", "0", "28.06814415", "20.42257292", "@"}; break;
    case "jaw":  $data = { "jaw", "1", "4", "0.05091977087", "31.14812273", "13.24767783", "0.05091977087", "31.34448882", "15.13005569", "0.05091977087", "29.62232939", "15.32395001", "0.05091977087", "26.99480143", "18.24707486", "@"}; break;

    case "Lleg":  $data = { "Lleg", "1", "4", "2.139726814", "22.6293802", "-11.30679993", "3.458326002", "15.32527674", "-10.92280643", "4.306119055", "6.084570051", "-14.43933879", "5.286395209", "1.775969048", "-14.04342452", "@"}; break;
    case "Rleg":  $data = { "Rleg", "1", "4", "-2.144100621", "22.62929002", "-11.30673588", "-3.478024902", "15.34086588", "-11.03075866", "-4.364860174", "5.800929815", "-14.45717081", "-5.280331721", "1.809399688", "-14.04177298", "@"}; break;
    case "Larm":  $data = { "Larm", "1", "4", "1.553015947", "26.42442703", "4.494413376", "3.533886194", "19.96917437", "7.880469223", "3.379193544", "13.40281868", "5.668196086", "4.006210496", "5.019853466", "5.600234129", "@"}; break;
    case "Rarm":  $data = { "Rarm", "1", "4", "-1.561343249", "26.42470824", "4.492804218", "-3.544725895", "19.96994875", "7.87862291", "-3.386282476", "13.40423794", "5.663091571", "-4.059566227", "4.770795179", "5.65141516", "@"}; break;

    case "LmiddleFoot":  $data = { "LmiddleFoot", "1", "3", "5.286395209", "1.775969048", "-14.04342452", "5.293095642", "0.7826273608", "-12.97812566", "5.293095642", "0.469217971", "-11.24723789", "@"}; break;
    case "RmiddleFoot":  $data = { "RmiddleFoot", "1", "3", "-5.280331721", "1.809399688", "-14.04177298", "-5.283765911", "0.7831909244", "-12.97573121", "-5.293095642", "0.469217971", "-11.24723789", "@"}; break;
    case "Lmiddle":  $data = { "Lmiddle", "1", "4", "4.006210496", "5.019853466", "5.600234129", "4.742639091", "1.833972749", "6.734007335", "4.740997311", "1.034807617", "8.493651402", "4.740997311", "0.4667586986", "10.28373794", "@"}; break;
    case "Rmiddle":  $data = { "Rmiddle", "1", "4", "-4.059566227", "4.770795179", "5.65141516", "-4.742680073", "1.833959103", "6.762999058", "-4.738838476", "1.035943743", "8.547481258", "-4.740997311", "0.4667586986", "10.28373794", "@"}; break;

  }
 } else  if ( $type == "Quadruped_Normal" ) {
  switch ($parts) {
    case "neck":  $data = { "neck", "1", "3", "-0.003485685089", "18.59022568", "8.973105708", "0.01793573636", "19.82444245", "11.56202818", "0.05091977087", "21.1232691", "14.34917831", "@"}; break;
    case "head":  $data = { "head", "1", "3", "0.05091977087", "21.1232691", "14.34917831", "-1.355159631e-026", "21.2927777", "19.36729739", "0", "17.43240579", "21.60063716", "@"}; break;
    case "jaw":  $data = { "jaw", "1", "4", "0.05091977087", "21.1232691", "14.34917831", "0.05091977087", "19.5315837", "15.79562251", "0.05091977087", "18.02991042", "15.89447262", "0.05091977087", "15.62556183", "18.52002497", "@"}; break;
    case "spine":  $data = { "spine", "1", "5", "-0.002094268799", "19.05168784", "-10.25292827", "-0.002175405442", "19.6346573", "-6.153349168", "-0.002712724351", "19.17163472", "-0.8913228565", "-0.007515927016", "18.25707344", "4.694552756", "-0.003485685089", "18.59022568", "8.973105708", "@"}; break;
    case "Lcollar":  $data = { "Lcollar", "1", "2", "1.601331182", "19.23468415", "7.3932553", "-0.007515927016", "18.25707344", "4.694552756", "@"}; break;
    case "Rcollar":  $data = { "Rcollar", "1", "2", "-1.609658484", "19.23496536", "7.391646142", "0.009215361422", "18.25707344", "4.694552756", "@"}; break;
    case "spineRoot":  $data = { "spineRoot", "1", "2", "-0.002094268799", "19.05168784", "-10.25292827", "-0.002094268799", "19.00778904", "-10.64431919", "@"}; break;
    case "tail":  $data = { "tail", "1", "7", "-0.002094268799", "19.00778904", "-10.64431919", "-0.00208618285", "17.30316801", "-13.13626825", "-0.002076586246", "14.27913505", "-14.7396817", "-0.00207133261", "10.16396416", "-15.15354483", "-0.002066734919", "6.836094689", "-16.26152649", "-0.002066055986", "4.754059115", "-17.65726699", "-0.002065459856", "6.048049983", "-19.49222794", "@"}; break;
    case "Lmiddle":  $data = { "Lmiddle", "1", "6", "4.006210496", "5.019853466", "5.600234129", "4.742639091", "1.522273064", "7.30108822", "4.740997311", "1.034807617", "8.493651402", "4.706267092", "0.8815245755", "9.432569797", "4.683863701", "0.6700230724", "9.866316748", "4.662332833", "0.4667586986", "10.28317101", "@"}; break;
    case "Lindex":  $data = { "Lindex", "1", "5", "4.742639091", "1.522273064", "7.30108822", "5.230946456", "1.034807617", "8.493651402", "5.244907803", "0.8815245755", "9.339475496", "5.172731744", "0.6654367896", "9.777309555", "5.106370743", "0.4667586986", "10.17986833", "@"}; break;
    case "Lring":  $data = { "Lring", "1", "5", "4.742639091", "1.522273064", "7.30108822", "4.256075832", "1.034807617", "8.493651402", "4.234005375", "0.8815245755", "9.298573051", "4.257002234", "0.6654367896", "9.74171997", "4.27814629", "0.4667586986", "10.14916356", "@"}; break;
    case "Lpinky":  $data = { "Lpinky", "1", "5", "4.742639091", "1.522273064", "7.30108822", "3.936520459", "1.034807617", "8.493651402", "3.87235014", "0.8815245755", "9.085527475", "3.939213993", "0.6654367896", "9.524204204", "4.000690779", "0.4667586986", "9.927537759", "@"}; break;
    case "Rmiddle":  $data = { "Rmiddle", "1", "6", "-4.006210496", "5.019853466", "5.600234129", "-4.742639091", "1.522273064", "7.30108822", "-4.740997311", "1.034807617", "8.493651402", "-4.706267092", "0.8815245755", "9.432569797", "-4.683863701", "0.6700230724", "9.866316748", "-4.662332833", "0.4667586986", "10.28317101", "@"}; break;
    case "Rindex":  $data = { "Rindex", "1", "5", "-4.742639091", "1.522273064", "7.30108822", "-5.230946456", "1.034807617", "8.493651402", "-5.244907803", "0.8815245755", "9.339475496", "-5.172731744", "0.6654367896", "9.777309555", "-5.106370743", "0.4667586986", "10.17986833", "@"}; break;
    case "Rring":  $data = { "Rring", "1", "5", "-4.742639091", "1.522273064", "7.30108822", "-4.256075832", "1.034807617", "8.493651402", "-4.234005375", "0.8815245755", "9.298573051", "-4.257002234", "0.6654367896", "9.74171997", "-4.27814629", "0.4667586986", "10.14916356", "@"}; break;
    case "Rpinky":  $data = { "Rpinky", "1", "5", "-4.742639091", "1.522273064", "7.30108822", "-3.936520459", "1.034807617", "8.493651402", "-3.87235014", "0.8815245755", "9.085527475", "-3.939213993", "0.6654367896", "9.524204204", "-4.000690779", "0.4667586986", "9.927537759", "@"}; break;
    case "LindexFoot":  $data = { "LindexFoot", "1", "5", "4.633216754", "1.775969048", "-14.04342452", "5.130776817", "0.9822041405", "-13.01304353", "5.144738164", "0.8180066763", "-12.06991432", "5.072562105", "0.6019188904", "-11.63208026", "5.006201104", "0.4032407994", "-11.22952148", "@"}; break;
    case "LmiddleFoot":  $data = { "LmiddleFoot", "1", "5", "4.633216754", "1.775969048", "-14.04342452", "4.639917187", "0.9946862515", "-13.00298261", "4.639917187", "0.874291302", "-12.04533241", "4.639917187", "0.6518925847", "-11.607152", "4.639917187", "0.469217971", "-11.24723789", "@"}; break;
    case "LringFoot":  $data = { "LringFoot", "1", "5", "4.633216754", "1.775969048", "-14.04342452", "4.155906194", "0.9822041405", "-13.01304353", "4.133835736", "0.8180066763", "-12.11081677", "4.156832596", "0.6019188904", "-11.66766985", "4.177976652", "0.4032407994", "-11.26022626", "@"}; break;
    case "LpinkyFoot":  $data = { "LpinkyFoot", "1", "5", "4.633216754", "1.775969048", "-14.04342452", "3.836350821", "0.9822041405", "-13.01304353", "3.772180501", "0.8180066763", "-12.32386234", "3.839044354", "0.6019188904", "-11.88518561", "3.900521141", "0.4032407994", "-11.48185206", "@"}; break;
    case "RpinkyFoot":  $data = { "RpinkyFoot", "1", "5", "-4.662127339", "1.775969048", "-14.04342452", "-3.865261406", "0.9822041405", "-13.01304353", "-3.801091086", "0.8180066763", "-12.32386234", "-3.867954939", "0.6019188904", "-11.88518561", "-3.929431726", "0.4032407994", "-11.48185206", "@"}; break;
    case "RringFoot":  $data = { "RringFoot", "1", "5", "-4.662127339", "1.775969048", "-14.04342452", "-4.184816779", "0.9822041405", "-13.01304353", "-4.162746321", "0.8180066763", "-12.11081677", "-4.185743181", "0.6019188904", "-11.66766985", "-4.206887237", "0.4032407994", "-11.26022626", "@"}; break;
    case "RmiddleFoot":  $data = { "RmiddleFoot", "1", "5", "-4.662127339", "1.775969048", "-14.04342452", "-4.668827772", "0.9946862515", "-13.00298261", "-4.668827772", "0.874291302", "-12.04533241", "-4.668827772", "0.6518925847", "-11.607152", "-4.668827772", "0.469217971", "-11.24723789", "@"}; break;
    case "RindexFoot":  $data = { "RindexFoot", "1", "5", "-4.662127339", "1.775969048", "-14.04342452", "-5.159687402", "0.9822041405", "-13.01304353", "-5.173648749", "0.8180066763", "-12.06991432", "-5.10147269", "0.6019188904", "-11.63208026", "-5.035111689", "0.4032407994", "-11.22952148", "@"}; break;
    case "LparHip":  $data = { "LparHip", "1", "2", "-0.002094268799", "19.00778904", "-10.64431919", "2.336997801", "17.53785628", "-10.12013274", "@"}; break;
    case "RparHip":  $data = { "RparHip", "1", "2", "-0.002094268799", "19.00778904", "-10.64431919", "-2.341371608", "17.5377661", "-10.12006869", "@"}; break;
    case "Lleg":  $data = { "Lleg", "1", "4", "2.336997801", "17.53785628", "-10.12013274", "3.944068184", "11.36388724", "-11.0289537", "4.575876493", "5.575624382", "-13.91858692", "4.633216754", "1.775969048", "-14.04342452", "@"}; break;
    case "Rleg":  $data = { "Rleg", "1", "4", "-2.341371608", "17.5377661", "-10.12006869", "-3.963767084", "11.37947638", "-11.03075866", "-4.634617612", "5.543943847", "-13.93641894", "-4.656063851", "1.809399688", "-14.04177298", "@"}; break;
    case "Larm":  $data = { "Larm", "1", "4", "1.601331182", "19.23468415", "7.3932553", "3.533886194", "17.58859437", "7.880469223", "3.379193544", "11.8369195", "5.987266753", "4.006210496", "5.019853466", "5.600234129", "@"}; break;
    case "Rarm":  $data = { "Rarm", "1", "4", "-1.609658484", "19.23496536", "7.391646142", "-3.544725895", "17.58936875", "7.87862291", "-3.386282476", "11.83833876", "5.982162238", "-4.059566227", "5.02275488", "5.609421876", "@"}; break;
  }
 }

 return $data;
}


//***********************************************************************************************************
//
proc _createCurveAndRef_Quadruped(string $type, string $prefix, string $sym, int $fingerCount, int $thumbFingerNum, int $feetFingerCount, int $feetThumbFingerNum)
{
 string $c;

 // ========= leg and foot Curves
 $c = _createCurveFromGuideData($prefix,_getGuildeData_Quadruped($type,"Lleg"));
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,0,1, 2.0);
 $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"Rleg"));
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,0,1, 2.0);

 // ========= arm Curves
 $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"Larm"));
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,1, 2.0);
 $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"Rarm"));
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,1, 2.0);

 // ========= Finger Curves
  // pinky
  if ( $fingerCount == 4){
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"Lpinky"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"Rpinky"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
  }

  // ring
  if ( $fingerCount >= 3){
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"Lring"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"Rring"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
  }

  // index
  if ( $fingerCount >= 2){
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"Lindex"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"Rindex"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
  }

  // middle
  if ( $fingerCount >= 1){
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"Lmiddle"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,2,0, 1.0);
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"Rmiddle"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,2,0, 1.0);
  }

 // ========= Foot
  // pinky Foot
  if ( $feetFingerCount == 4){
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"LpinkyFoot"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"RpinkyFoot"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
  }

  // ring feet
  if ( $feetFingerCount >= 3){
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"LringFoot"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"RringFoot"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
  }

  // index Foot
  if ( $feetFingerCount >= 2){
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"LindexFoot"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"RindexFoot"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
  }

  // middle feet
  if ( $feetFingerCount >= 1){
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"LmiddleFoot"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
   $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"RmiddleFoot"));
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 1.0);
  }

 // ========= spine Curves
 $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"spine"));
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,1, 2.0);

 // ========= Neck curve 
 $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"neck"));
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c, 0,1, 2.0);

 // ========= Head curve 
 $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"head"));
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c, 0,0, 2.0);

 // ========= colla curves
 $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"Lcollar"));
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c, 0,1, 2.0);
 $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"Rcollar"));
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c, 0,1, 2.0);

 // ========= spine Root Curves
 $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"spineRoot"));
 parent $c $sym;

 // ========= hip curves
 $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"LparHip"));
 parent $c $sym;
 $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"RparHip"));
 parent $c $sym;

 // ========= tail
 $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"tail"));
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c, 1,0, 2.0);

 // ========= jaw
 $c = _createCurveFromGuideData($prefix, _getGuildeData_Quadruped($type,"jaw"));
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c, 1,0, 2.0);
}


//***********************************************************************************************************
//
proc _addCluster_Quadruped(string $prefix, int $fingerCount, int $thumbFingerNum, int $feetFingerCount, int $feetThumbFingerNum) {

 // ========= Spine Clusters
 $crvName = "spine";
 cluster -n ($prefix+$crvName+"0") ($prefix+$crvName+".cv[0]")($prefix+"spineRoot.cv[0:1]") ($prefix+"LparHip.cv[0]") ($prefix+"RparHip.cv[0]") ($prefix+"tail.cv[0]");
 toggle -state on -template;
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"), 2.0, 0);

 // ========= head
 string $crvName = "neck";
 sets -fe ($prefix+"head1Set") ($prefix+"jaw.cv[0]") ($prefix+"neck.cv[3]"); 

 // ========= neck
 string $crvName = "neck";
 sets -fe ($prefix+"neck1Set") ($prefix+"spine.cv[4]"); 


 // ========= spine
 string $crvName = "spine";
 sets -fe ($prefix+"spine3Set") ($prefix+"Lcollar.cv[1]") ($prefix+"Rcollar.cv[1]");

 // ========= collar
 string $crvName = "Lcollar";
 sets -fe ($prefix+"Lcollar1Set") ($prefix+"Larm.cv[0]");
 string $crvName = "Rcollar";
 sets -fe ($prefix+"Rcollar1Set") ($prefix+"Rarm.cv[0]");

 // ========= leg
 string $crvName = "Lleg";
 sets -fe ($prefix+"Lleg1Set") ($prefix+"LparHip.cv[1]");
 string $crvName = "Rleg";
 sets -fe ($prefix+"Rleg1Set") ($prefix+"RparHip.cv[1]");

 // ========= Finger
 $crvName = "Lhand";
 cluster -n ($prefix+$crvName+"0") ($prefix+"Larm.cv[5]");
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"),2.0, 0);
 $crvName = "Rhand";
 cluster -n ($prefix+$crvName+"0") ($prefix+"Rarm.cv[5]");
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"),2.0, 0);

 $crvName = "Lfinger";
 cluster -n ($prefix+$crvName+"0") ($prefix+"Lmiddle.cv[1]");
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"),2.0, 0);
 $crvName = "Rfinger";
 cluster -n ($prefix+$crvName+"0") ($prefix+"Rmiddle.cv[1]");
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"),2.0, 0);

 switch ($fingerCount){
  case 1:
   sets -fe ($prefix+"Lhand0Set") ($prefix+"Lmiddle.cv[0]");
   sets -fe ($prefix+"Rhand0Set") ($prefix+"Rmiddle.cv[0]");
  break;
  case 2:
   sets -fe ($prefix+"Lhand0Set") ($prefix+"Lmiddle.cv[0]");
   sets -fe ($prefix+"Rhand0Set") ($prefix+"Rmiddle.cv[0]");
   sets -fe ($prefix+"Lfinger0Set") ($prefix+"Lindex.cv[0]");
   sets -fe ($prefix+"Rfinger0Set") ($prefix+"Rindex.cv[0]");
  break;
  case 3:
   sets -fe ($prefix+"Lhand0Set") ($prefix+"Lmiddle.cv[0]");
   sets -fe ($prefix+"Rhand0Set") ($prefix+"Rmiddle.cv[0]");
   sets -fe ($prefix+"Lfinger0Set") ($prefix+"Lindex.cv[0]") ($prefix+"Lring.cv[0]");
   sets -fe ($prefix+"Rfinger0Set") ($prefix+"Rindex.cv[0]") ($prefix+"Rring.cv[0]");
  break;
  case 4:
   sets -fe ($prefix+"Lhand0Set") ($prefix+"Lmiddle.cv[0]");
   sets -fe ($prefix+"Rhand0Set") ($prefix+"Rmiddle.cv[0]");
   sets -fe ($prefix+"Lfinger0Set") ($prefix+"Lindex.cv[0]") ($prefix+"Lring.cv[0]") ($prefix+"Lpinky.cv[0]");
   sets -fe ($prefix+"Rfinger0Set") ($prefix+"Rindex.cv[0]") ($prefix+"Rring.cv[0]") ($prefix+"Rpinky.cv[0]");
  break;
 }

 // ========= Thumb Clusters
 if ($thumbFingerNum == 1){
  sets -fe ($prefix+"Lfinger0Set") ($prefix+"Lthumb.cv[0]"); 
  sets -fe ($prefix+"Rfinger0Set") ($prefix+"Rthumb.cv[0]");
 }

 // ========= Finger Feet
 $crvName = "LFoot";
 cluster -n ($prefix+$crvName+"0") ($prefix+"Lleg.cv[5]");
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"),2.0, 0);
 $crvName = "RFoot";
 cluster -n ($prefix+$crvName+"0") ($prefix+"Rleg.cv[5]");
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"),2.0, 0);

 switch ($fingerCount){
  case 1:
   sets -fe ($prefix+"LFoot0Set") ($prefix+"LmiddleFoot.cv[0]");
   sets -fe ($prefix+"RFoot0Set") ($prefix+"RmiddleFoot.cv[0]");
  break;
  case 2:
   sets -fe ($prefix+"LFoot0Set") ($prefix+"LmiddleFoot.cv[0]") ($prefix+"LindexFoot.cv[0]");
   sets -fe ($prefix+"RFoot0Set") ($prefix+"RmiddleFoot.cv[0]") ($prefix+"RindexFoot.cv[0]");
  break;
  case 3:
   sets -fe ($prefix+"LFoot0Set") ($prefix+"LmiddleFoot.cv[0]") ($prefix+"LindexFoot.cv[0]") ($prefix+"LringFoot.cv[0]");
   sets -fe ($prefix+"RFoot0Set") ($prefix+"RmiddleFoot.cv[0]") ($prefix+"RindexFoot.cv[0]") ($prefix+"RringFoot.cv[0]");
  break;
  case 4:
   sets -fe ($prefix+"LFoot0Set") ($prefix+"LmiddleFoot.cv[0]") ($prefix+"LindexFoot.cv[0]") ($prefix+"LringFoot.cv[0]") ($prefix+"LpinkyFoot.cv[0]");
   sets -fe ($prefix+"RFoot0Set") ($prefix+"RmiddleFoot.cv[0]") ($prefix+"RindexFoot.cv[0]") ($prefix+"RringFoot.cv[0]") ($prefix+"RpinkyFoot.cv[0]");
  break;
 }

 // ========= Thumb Foot Clusters
 if ($thumbFingerNum == 1){
  sets -fe ($prefix+"LFoot0Set") ($prefix+"LthumbFoot.cv[0]");
  sets -fe ($prefix+"RFoot0Set") ($prefix+"RthumbFoot.cv[0]");
 }
}

//************************************************************************************************************
//
proc string[] _getGuildeData_Biped(string $parts)
{
 string $data[];

 // FORMAT ---- parts, degree, cvnum, [x,y,z], [x,y,z], ... @
 switch ($parts) {
   case "neck":  $data = { "neck", "1", "2", "-1.061547283e-006", "22.56460982", "-0.1846562255", "-1.905648e-006", "23.66006756", "-0.09851213341", "@"}; break;
   case "head":  $data = { "head", "1", "2", "-1.905648e-006", "23.66006756", "-0.09851213341", "3.896081102e-006", "26.94649082", "-0.1014401603", "@"}; break;
   case "spineRoot":  $data = { "spineRoot", "1", "2", "-8.583068848e-006", "15.60328388", "-0.3707689494", "0", "15.66811735", "-0.3679688544", "@"}; break;
   case "LparHip":  $data = { "LparHip", "1", "2", "-8.583068848e-006", "15.60328388", "-0.3707689494", "1.585763209", "13.67045374", "-0.08288286231", "@"}; break;
   case "RparHip":  $data = { "RparHip", "1", "2", "-8.583068848e-006", "15.60328388", "-0.3707689494", "-1.677080911", "13.67039106", "-0.08288318505", "@"}; break;
   case "Larm":  $data = { "Larm", "1", "4", "1.251851343", "21.82074889", "4.74016617e-006", "3.282783866", "21.57271638", "-6.675085086e-007", "7.113148881", "21.56568543", "0.02774554118", "10.92177898", "21.56975576", "0.07771524343", "@"}; break;
   case "Rarm":  $data = { "Rarm", "1", "4", "-1.251851343", "21.82074889", "4.74016617e-006", "-3.282783866", "21.57271638", "-6.675085086e-007", "-7.113148881", "21.56568543", "0.02774554118", "-10.92177898", "21.56975576", "0.07771524343", "@"}; break;
   case "Lpinky":  $data = { "Lpinky", "1", "6", "11.46435344", "21.61424586", "0.07351637709", "11.94968171", "21.57891615", "-0.2885644895", "12.43278736", "21.61980531", "-0.414706923", "12.95630168", "21.54410257", "-0.457393434", "13.26004616", "21.48692815", "-0.4585406482", "13.44238405", "21.45287206", "-0.4583193806", "@"}; break;
   case "Lring":  $data = { "Lring", "1", "6", "11.46435344", "21.61424586", "0.07351637709", "11.99193177", "21.59862217", "-0.08679484333", "12.51507885", "21.64033576", "-0.1873345222", "13.15633478", "21.61876294", "-0.1972916075", "13.47718779", "21.59192942", "-0.1979145069", "13.71084744", "21.55960835", "-0.1892338968", "@"}; break;
   case "Lindex":  $data = { "Lindex", "1", "6", "11.46435344", "21.61424586", "0.07351637709", "12.0178501", "21.60744068", "0.3287224713", "12.49545535", "21.62707676", "0.436506674", "13.20634882", "21.65960172", "0.4695823628", "13.52076062", "21.64341594", "0.4786757978", "13.7553252", "21.62172366", "0.4884196476", "@"}; break;
   case "Lmiddle":  $data = { "Lmiddle", "1", "7", "10.92177898", "21.56975576", "0.07771524343", "11.46435344", "21.61424586", "0.07351637709", "12.02601371", "21.6172028", "0.1081331061", "12.50689129", "21.66223528", "0.1243379442", "13.2622716", "21.67263107", "0.1352367191", "13.58303598", "21.67832692", "0.140483104", "13.85200599", "21.65523515", "0.1347773582", "@"}; break;
   case "Rpinky":  $data = { "Rpinky", "1", "6", "-11.46435344", "21.61424586", "0.07351637709", "-11.94968171", "21.57891615", "-0.2885644895", "-12.43278736", "21.61980531", "-0.414706923", "-12.95630168", "21.54410257", "-0.457393434", "-13.26004616", "21.48692815", "-0.4585406482", "-13.44238405", "21.45287206", "-0.4583193806", "@"}; break;
   case "Rring":  $data = { "Rring", "1", "6", "-11.46435344", "21.61424586", "0.07351637709", "-11.99193177", "21.59862217", "-0.08679484333", "-12.51507885", "21.64033576", "-0.1873345222", "-13.15633478", "21.61876294", "-0.1972916075", "-13.47718779", "21.59192942", "-0.1979145069", "-13.71084744", "21.55960835", "-0.1892338968", "@"}; break;
   case "Rindex":  $data = { "Rindex", "1", "6", "-11.46435344", "21.61424586", "0.07351637709", "-12.0178501", "21.60744068", "0.3287224713", "-12.49545535", "21.62707676", "0.436506674", "-13.20634882", "21.65960172", "0.4695823628", "-13.52076062", "21.64341594", "0.4786757978", "-13.7553252", "21.62172366", "0.4884196476", "@"}; break;
   case "Rmiddle":  $data = { "Rmiddle", "1", "7", "-10.92177898", "21.56975576", "0.07771524343", "-11.46435344", "21.61424586", "0.07351637709", "-12.02601371", "21.6172028", "0.1081331061", "-12.50689129", "21.66223528", "0.1243379442", "-13.2622716", "21.67263107", "0.1352367191", "-13.58303598", "21.67832692", "0.140483104", "-13.85200599", "21.65523515", "0.1347773582", "@"}; break;
   case "LmiddleFoot":  $data = { "LmiddleFoot", "1", "6", "1.634822696", "0.131693852", "1.082053552", "1.63598331", "0.1023611085", "1.654311608", "1.63643803", "0.09086874093", "1.806117534", "1.6368638", "0.08010805614", "1.943648922", "1.637113484", "0.07379768074", "2.066759232", "1.637409576", "0.06631439174", "2.17655171", "@"}; break;
   case "LringFoot":  $data = { "LringFoot", "1", "6", "1.634822696", "0.131693852", "1.082053552", "1.725063633", "0.1023611085", "1.60541118", "1.746321236", "0.09086874093", "1.756068691", "1.760644742", "0.08010805614", "1.863181569", "1.780411428", "0.07379768074", "1.986088525", "1.794492151", "0.06631439174", "2.095130604", "@"}; break;
   case "LpinkyFoot":  $data = { "LpinkyFoot", "1", "6", "1.634822696", "0.131693852", "1.082053552", "1.840204173", "0.1023611085", "1.561320407", "1.872649776", "0.09086874093", "1.683445521", "1.889471406", "0.08010805614", "1.791341967", "1.899336094", "0.07379768074", "1.914056672", "1.911034338", "0.06631439174", "2.023380013", "@"}; break;
   case "LindexFoot":  $data = { "LindexFoot", "1", "6", "1.634822696", "0.131693852", "1.082053552", "1.537960002", "0.1023611085", "1.655447986", "1.523846624", "0.09086874093", "1.806597112", "1.511074091", "0.08010805614", "1.943534786", "1.499510008", "0.07379768074", "2.066101024", "1.489269986", "0.06631439174", "2.175415332", "@"}; break;
   case "LthumbFoot":  $data = { "LthumbFoot", "1", "6", "1.634822696", "0.131693852", "1.082053552", "1.387494807", "0.1023611085", "1.683288657", "1.367581294", "0.09086874093", "1.835084512", "1.369231953", "0.08010805614", "1.972606653", "1.370578093", "0.07379768074", "2.095709857", "1.371852027", "0.06631439174", "2.205495343", "@"}; break;
   case "RmiddleFoot":  $data = { "RmiddleFoot", "1", "6", "-1.634822696", "0.131693852", "1.082053552", "-1.63598331", "0.1023611085", "1.654311608", "-1.63643803", "0.09086874093", "1.806117534", "-1.6368638", "0.08010805614", "1.943648922", "-1.637113484", "0.07379768074", "2.066759232", "-1.637409576", "0.06631439174", "2.17655171", "@"}; break;
   case "RringFoot":  $data = { "RringFoot", "1", "6", "-1.634822696", "0.131693852", "1.082053552", "-1.725063633", "0.1023611085", "1.60541118", "-1.746321236", "0.09086874093", "1.756068691", "-1.760644742", "0.08010805614", "1.863181569", "-1.780411428", "0.07379768074", "1.986088525", "-1.794492151", "0.06631439174", "2.095130604", "@"}; break;
   case "RpinkyFoot":  $data = { "RpinkyFoot", "1", "6", "-1.634822696", "0.131693852", "1.082053552", "-1.840204173", "0.1023611085", "1.561320407", "-1.872649776", "0.09086874093", "1.683445521", "-1.889471406", "0.08010805614", "1.791341967", "-1.899336094", "0.07379768074", "1.914056672", "-1.911034338", "0.06631439174", "2.023380013", "@"}; break;
   case "RindexFoot":  $data = { "RindexFoot", "1", "6", "-1.634822696", "0.131693852", "1.082053552", "-1.537960002", "0.1023611085", "1.655447986", "-1.523846624", "0.09086874093", "1.806597112", "-1.511074091", "0.08010805614", "1.943534786", "-1.499510008", "0.07379768074", "2.066101024", "-1.489269986", "0.06631439174", "2.175415332", "@"}; break;
   case "RthumbFoot":  $data = { "RthumbFoot", "1", "6", "-1.634822696", "0.131693852", "1.082053552", "-1.387494807", "0.1023611085", "1.683288657", "-1.367581294", "0.09086874093", "1.835084512", "-1.369231953", "0.08010805614", "1.972606653", "-1.370578093", "0.07379768074", "2.095709857", "-1.371852027", "0.06631439174", "2.205495343", "@"}; break;
   case "Lthumb":  $data = { "Lthumb", "1", "6", "11.46435344", "21.61424586", "0.07351637709", "11.41547928", "21.42893243", "0.3150927544", "11.70747829", "21.32146697", "0.5976843102", "11.97467605", "21.2231292", "0.8562736532", "12.42215539", "21.15985895", "1.06381518", "12.85117451", "21.09262459", "1.215340563", "@"}; break;
   case "Rthumb":  $data = { "Rthumb", "1", "6", "-11.46435344", "21.61424586", "0.07351637709", "-11.41547928", "21.42893243", "0.3150927544", "-11.70747829", "21.32146697", "0.5976843102", "-11.97467605", "21.2231292", "0.8562736532", "-12.42215539", "21.15985895", "1.06381518", "-12.85117451", "21.09262459", "1.215340563", "@"}; break;
   case "Lleg":  $data = { "Lleg", "1", "4", "1.584853111", "13.67091089", "-0.08229536231", "1.625593906", "7.593278517", "-0.2120170299", "1.585408602", "0.9780621891", "-0.4409845984", "1.634793334", "0.1324359426", "1.067575966", "@"}; break;
   case "Rleg":  $data = { "Rleg", "1", "4", "-1.584853111", "13.67091089", "-0.08229536231", "-1.625593906", "7.593278517", "-0.2120170299", "-1.585408602", "0.9780621891", "-0.4409845984", "-1.634793334", "0.1324359426", "1.067575966", "@"}; break;
   case "Rcollar":  $data = { "Rcollar", "1", "2", "-1.251851343", "21.82074889", "4.74016617e-006", "5.955456106e-006", "21.01701915", "-0.3963340977", "@"}; break;
   case "Lcollar":  $data = { "Lcollar", "1", "2", "1.251851343", "21.82074889", "4.74016617e-006", "-5.955456106e-006", "21.01701915", "-0.3963340977", "@"}; break;
   case "spine":  $data = { "spine", "1", "6", "-7.979571819e-006", "15.60106087", "-0.3707162142", "-1.315443641e-005", "16.64271082", "-0.1489751196", "-1.060370583e-005", "18.14008978", "-0.251463457", "-8.011098294e-006", "19.62314348", "-0.3775034082", "-5.608615424e-006", "21.01402383", "-0.3962398218", "-8.014599544e-007", "22.56139373", "-0.1845669331", "@"}; break;
 }
 return $data;
}


//***********************************************************************************************************
//
proc _createCurveAndRef_Biped(string $prefix, string $sym, int $fingerCount, int $thumbFingerNum, int $feetFingerCount, int $feetThumbFingerNum) {
 string $c;

 // ========= leg and foot Curves
 $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Lleg")`);
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,0,1, 1.0);
 $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Rleg")`);
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,0,1, 1.0);

 // ========= arm Curves
 $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Larm")`);
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,1, 1.0);
 $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Rarm")`);
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,1, 1.0);

 // ========= Fingers
  // pinky
  if ( $fingerCount == 4){
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Lpinky")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Rpinky")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
  }

  // ring
  if ( $fingerCount >= 3){
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Lring")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Rring")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
  }

  // index
  if ( $fingerCount >= 2){
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Lindex")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Rindex")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
  }

  // middle
  if ( $fingerCount >= 1){
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Rmiddle")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,2,0, 0.4);
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Lmiddle")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,2,0, 0.4);
  }

  //Thumb Curves
  if ($thumbFingerNum == 1){
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Lthumb")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Rthumb")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
  }

 // ========= Foot
  // pinky Foot
  if ( $feetFingerCount == 4){
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("LpinkyFoot")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("RpinkyFoot")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
  }

  // ring feet
  if ( $feetFingerCount >= 3){
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("LringFoot")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("RringFoot")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
  }

  // index Foot
  if ( $feetFingerCount >= 2){
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("LindexFoot")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("RindexFoot")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
  }

  // middle feet
  if ( $feetFingerCount >= 1){
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("LmiddleFoot")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("RmiddleFoot")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
  }

  //Thumb Curves
  if ($feetThumbFingerNum == 1){
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("LthumbFoot")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
   $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("RthumbFoot")`);
   _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,0, 0.4);
  }

 // ========= spine Curves
 $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("spine")`);
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c,1,1, 1.0);

 // ========= Neck curve 
 $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("neck")`);
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c, 0,1, 1.0);

 // ========= Head curve 
 $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("head")`);
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c, 0,0, 1.0);

 // ========= colla curves
 $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Lcollar")`);
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c, 0,1, 1.0);
 $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("Rcollar")`);
 _ClusterRefCreation_FR(($prefix+"RigCurves"), $prefix, $c, 0,1, 1.0);

 // ========= spine Root Curves
 $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("spineRoot")`);
 parent $c $sym;

 // ========= hip curves
 $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("LparHip")`);
 parent $c $sym;
 $c = _createCurveFromGuideData($prefix, `_getGuildeData_Biped("RparHip")`);
 parent $c $sym;
}

//***********************************************************************************************************
//
proc _addCluster_Biped(string $prefix, int $fingerCount, int $thumbFingerNum, int $feetFingerCount, int $feetThumbFingerNum) {

 // ========= Spine Clusters
 $crvName = "spine";
 cluster -n ($prefix+$crvName+"0") ($prefix+$crvName+".cv[0]")($prefix+"spineRoot.cv[0:1]") ($prefix+"LparHip.cv[0]") ($prefix+"RparHip.cv[0]");
 toggle -state on -template;
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"), 1.5, 0);

 // ========= neck
 string $crvName = "neck";
 sets -fe ($prefix+"neck1Set") ($prefix+"spine.cv[5]"); 

 // ========= head
 string $crvName = "neck";
 sets -fe ($prefix+"head1Set") ($prefix+"neck.cv[1]"); 

 // ========= spine
 string $crvName = "spine";
 sets -fe ($prefix+"spine4Set") ($prefix+"Lcollar.cv[1]") ($prefix+"Rcollar.cv[1]");

 // ========= collar
 string $crvName = "Lcollar";
 sets -fe ($prefix+"Lcollar1Set") ($prefix+"Larm.cv[0]");
 string $crvName = "Rcollar";
 sets -fe ($prefix+"Rcollar1Set") ($prefix+"Rarm.cv[0]");

 // ========= leg
 string $crvName = "Lleg";
 sets -fe ($prefix+"Lleg1Set") ($prefix+"LparHip.cv[1]");
 string $crvName = "Rleg";
 sets -fe ($prefix+"Rleg1Set") ($prefix+"RparHip.cv[1]");

 // ========= Finger
 $crvName = "Lhand";
 cluster -n ($prefix+$crvName+"0") ($prefix+"Larm.cv[5]");
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"),1.0, 0);
 $crvName = "Rhand";
 cluster -n ($prefix+$crvName+"0") ($prefix+"Rarm.cv[5]");
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"),1.0, 0);

 $crvName = "Lfinger";
 cluster -n ($prefix+$crvName+"0") ($prefix+"Lmiddle.cv[1]");
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"),1.0, 0);
 $crvName = "Rfinger";
 cluster -n ($prefix+$crvName+"0") ($prefix+"Rmiddle.cv[1]");
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"),1.0, 0);

 switch ($fingerCount){
  case 1:
   sets -fe ($prefix+"Lhand0Set") ($prefix+"Lmiddle.cv[0]");
   sets -fe ($prefix+"Rhand0Set") ($prefix+"Rmiddle.cv[0]");
  break;
  case 2:
   sets -fe ($prefix+"Lhand0Set") ($prefix+"Lmiddle.cv[0]");
   sets -fe ($prefix+"Rhand0Set") ($prefix+"Rmiddle.cv[0]");
   sets -fe ($prefix+"Lfinger0Set") ($prefix+"Lindex.cv[0]");
   sets -fe ($prefix+"Rfinger0Set") ($prefix+"Rindex.cv[0]");
  break;
  case 3:
   sets -fe ($prefix+"Lhand0Set") ($prefix+"Lmiddle.cv[0]");
   sets -fe ($prefix+"Rhand0Set") ($prefix+"Rmiddle.cv[0]");
   sets -fe ($prefix+"Lfinger0Set") ($prefix+"Lindex.cv[0]") ($prefix+"Lring.cv[0]");
   sets -fe ($prefix+"Rfinger0Set") ($prefix+"Rindex.cv[0]") ($prefix+"Rring.cv[0]");
  break;
  case 4:
   sets -fe ($prefix+"Lhand0Set") ($prefix+"Lmiddle.cv[0]");
   sets -fe ($prefix+"Rhand0Set") ($prefix+"Rmiddle.cv[0]");
   sets -fe ($prefix+"Lfinger0Set") ($prefix+"Lindex.cv[0]") ($prefix+"Lring.cv[0]") ($prefix+"Lpinky.cv[0]");
   sets -fe ($prefix+"Rfinger0Set") ($prefix+"Rindex.cv[0]") ($prefix+"Rring.cv[0]") ($prefix+"Rpinky.cv[0]");
  break;
 }

 // ========= Thumb Clusters
 if ($thumbFingerNum == 1){
  sets -fe ($prefix+"Lfinger0Set") ($prefix+"Lthumb.cv[0]"); 
  sets -fe ($prefix+"Rfinger0Set") ($prefix+"Rthumb.cv[0]");
 }

 // ========= Finger Feet
 $crvName = "LFoot";
 cluster -n ($prefix+$crvName+"0") ($prefix+"Lleg.cv[5]");
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"),1.0, 0);
 $crvName = "RFoot";
 cluster -n ($prefix+$crvName+"0") ($prefix+"Rleg.cv[5]");
 _RefCreation_FR ($prefix, $crvName,($prefix+$crvName+"0Handle"),1.0, 0);

 switch ($feetFingerCount){
  case 1:
   sets -fe ($prefix+"LFoot0Set") ($prefix+"LmiddleFoot.cv[0]");
   sets -fe ($prefix+"RFoot0Set") ($prefix+"RmiddleFoot.cv[0]");
  break;
  case 2:
   sets -fe ($prefix+"LFoot0Set") ($prefix+"LmiddleFoot.cv[0]") ($prefix+"LindexFoot.cv[0]");
   sets -fe ($prefix+"RFoot0Set") ($prefix+"RmiddleFoot.cv[0]") ($prefix+"RindexFoot.cv[0]");
  break;
  case 3:
   sets -fe ($prefix+"LFoot0Set") ($prefix+"LmiddleFoot.cv[0]") ($prefix+"LindexFoot.cv[0]") ($prefix+"LringFoot.cv[0]");
   sets -fe ($prefix+"RFoot0Set") ($prefix+"RmiddleFoot.cv[0]") ($prefix+"RindexFoot.cv[0]") ($prefix+"RringFoot.cv[0]");
  break;
  case 4:
   sets -fe ($prefix+"LFoot0Set") ($prefix+"LmiddleFoot.cv[0]") ($prefix+"LindexFoot.cv[0]") ($prefix+"LringFoot.cv[0]") ($prefix+"LpinkyFoot.cv[0]");
   sets -fe ($prefix+"RFoot0Set") ($prefix+"RmiddleFoot.cv[0]") ($prefix+"RindexFoot.cv[0]") ($prefix+"RringFoot.cv[0]") ($prefix+"RpinkyFoot.cv[0]");
  break;
 }

 // ========= Thumb Foot Clusters
 if ($feetThumbFingerNum == 1){
  sets -fe ($prefix+"LFoot0Set") ($prefix+"LthumbFoot.cv[0]"); 
  sets -fe ($prefix+"RFoot0Set") ($prefix+"RthumbFoot.cv[0]");
 }
}

//************************************************************************************************************
//
proc _BoneCreation( string $type, int $fingerCount, int $thumbFingerNum, int $addRoll ) {

 string $tmp[];
 string $prefix = "";
 int $split[];

 string $curveSelection[] = `listRelatives -c -type transform "RigCurves"`;
 int $selectionSize = size ($curveSelection);

 // =========
 for ( $i = 0 ; $i < $selectionSize ; $i++ ){
  if ( `objExists $curveSelection[$i]` ){

   // =========
   string $shape = _getShape( $curveSelection[$i] );
   int $curveDegree = `getAttr ($shape+".degree")`;
   int $curveSpans  = `getAttr ($shape+".spans")`;
   int $num  = $curveDegree + $curveSpans;
   string $curve = $curveSelection[$i];

   // ========= degree3
   if ($curveDegree == 3){
    //

   // ========= degree1
   } else if ($curveDegree == 1){

    // Head ----------------
    if ($curveSelection[$i] == ($prefix+"head")){
     string $jnts[] = _JointOn1DCurve_FR ($curve, 0, 0, {});
     $jnts = _renameJoints($jnts[0], {"Head", "ForeHead"});
     _setJointLabels($jnts[0], {"Head*"});
    }

    // Neck ----------------
    if ($curveSelection[$i] == ($prefix+"neck")){
     string $jnts[] = _JointOn1DCurve_FR ($curve, 0, 0, {});
     $jnts = _renameJoints($jnts[0], {"Neck", "Neck*"});
     _setJointLabels($jnts[0], {"Neck*"});
    }

    // Leg (L) ----------------
    if ($curveSelection[$i] == ($prefix+"Lleg")){
     string $jnts[];
     if ( $addRoll ) {
      $split = {0,1};
      $jnts = _JointOn1DCurve_FR ($curve,0,0, $split);
      $jnts = _renameJoints($jnts[0], {"LeftUpLeg","LeftUpLegRoll","LeftLeg","LeftLegRoll","LeftFoot", "LeftToeBase"});
     } else {
      $jnts = _JointOn1DCurve_FR ($curve,0,0, $split);
      $jnts = _renameJoints($jnts[0], {"LeftUpLeg","LeftLeg","LeftFoot", "LeftToeBase"});
     }
     _setJointLabels($jnts[0], {"Hip", "Hip", "Knee", "Knee", "Foot", "Toe"});
    }

    // Leg (R) ----------------
    if ($curveSelection[$i] == ($prefix+"Rleg")){
     string $jnts[];
     if ( $addRoll ) {
      $split = {0,1};
      $jnts = _JointOn1DCurve_FR ($curve,0,0, $split);
      $jnts = _renameJoints($jnts[0], {"RightUpLeg","RightUpLegRoll","RightLeg","RightLegRoll","RightFoot", "RightToeBase"});
     } else {
      $jnts = _JointOn1DCurve_FR ($curve,0,0, $split);
      $jnts = _renameJoints($jnts[0], {"RightUpLeg","RightLeg","RightFoot", "RightToeBase"});
     }
     _setJointLabels($jnts[0], {"Hip", "Hip", "Knee", "Knee", "Foot", "Toe"});
    }

    // Arm (L) ----------------
    if ($curveSelection[$i] == ($prefix+"Larm")){
     string $jnts[];
     if ( $addRoll ) {
      $split = {1,2};
      $jnts = _JointOn1DCurve_FR ($curve,0,0, $split);
      $jnts = _renameJoints($jnts[0], {"LeftShoulder", "LeftArm", "LeftArmRoll", "LeftForeArm","LeftForeArmRoll", "LeftHand"});
     } else {
      $jnts = _JointOn1DCurve_FR ($curve,0,0, $split);
      $jnts = _renameJoints($jnts[0], {"LeftShoulder", "LeftArm", "LeftForeArm","LeftHand"});
     }
     _setJointLabels($jnts[0], {"Collar", "Shoulder", "Shoulder", "Elbow", "Elbow", "Hand"});
    }

    // Arm (R) ----------------
    if ($curveSelection[$i] == ($prefix+"Rarm")){
     string $jnts[];
     if ( $addRoll ) {
      $split = {1,2};
      $jnts = _JointOn1DCurve_FR ($curve,0,0, $split);
      $jnts = _renameJoints($jnts[0], {"RightShoulder", "RightArm", "RightArmRoll", "RightForeArm","RightForeArmRoll", "RightHand"});
     } else {
      $jnts = _JointOn1DCurve_FR ($curve,0,0, $split);
      $jnts = _renameJoints($jnts[0], {"RightShoulder", "RightArm", "RightForeArm", "RightHand"});
     }
     _setJointLabels($jnts[0], {"Collar", "Shoulder", "Shoulder", "Elbow", "Elbow", "Hand"});
    }

    // Spine ----------------
    if ($curveSelection[$i] == ($prefix+"spine")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,0,1, {});
     $jnts = _renameJoints($jnts[0], {"Hips", "Spine", "Spine*"});
     _setJointLabels($jnts[0], {"Root", "Spine*"});
    }

    // Jaw ----------------
    if ($curveSelection[$i] == ($prefix+"jaw")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"Jaw*"});
     _setJointLabels($jnts[0], {""});
    }

    // Tail ----------------
    if ($curveSelection[$i] == ($prefix+"tail")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"Tail*"});
     _setJointLabels($jnts[0], {""});
    }

    // Fingers ----------------
    if ($curveSelection[$i] == ($prefix+"Lmiddle")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"LeftFingerBase", "LeftInHandMiddle", "LeftHandMiddle*"});
     _setJointLabels($jnts[0], {"Finger", "", "MiddleFinger*"});
    }
    if ($curveSelection[$i] == ($prefix+"Rmiddle")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"RightFingerBase", "RightInHandMiddle", "RightHandMiddle*"});
     _setJointLabels($jnts[0], {"Finger", "", "MiddleFinger*"});
    }
    if ($curveSelection[$i] == ($prefix+"Lindex")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"LeftInHandIndex", "LeftHandIndex*"});
     _setJointLabels($jnts[0], {"", "IndexFinger*"});
    }
    if ($curveSelection[$i] == ($prefix+"Rindex")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"RightInHandIndex", "RightHandIndex*"});
     _setJointLabels($jnts[0], {"", "IndexFinger*"});
    }
    if ($curveSelection[$i] == ($prefix+"Lring")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"LeftInHandRing", "LeftHandRing*"});
     _setJointLabels($jnts[0], {"", "RingFinger*"});
    }
    if ($curveSelection[$i] == ($prefix+"Rring")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"RightInHandRing", "RightHandRing*"});
     _setJointLabels($jnts[0], {"", "RingFinger*"});
    }
    if ($curveSelection[$i] == ($prefix+"Lpinky")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"LeftInHandPinky", "LeftHandPinky*"});
     _setJointLabels($jnts[0], {"", "PinkyFinger*"});
    }
    if ($curveSelection[$i] == ($prefix+"Rpinky")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"RightInHandPinky", "RightHandPinky*"});
     _setJointLabels($jnts[0], {"", "PinkyFinger*"});
    }

    // Thumb ----------------
    if ($thumbFingerNum == 1){
     if ($curveSelection[$i] == ($prefix+"Lthumb")){
      string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
      $jnts = _renameJoints($jnts[0], {"LeftInHandThumb", "LeftHandThumb*"});
      _setJointLabels($jnts[0], {"Finger", "", "Thumb*"});
     }
     if ($curveSelection[$i] == ($prefix+"Rthumb")){
      string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
      $jnts = _renameJoints($jnts[0], {"RightInHandThumb", "RightHandThumb*"});
      _setJointLabels($jnts[0], {"Finger", "", "Thumb*"});
     }
    }

    // Fingers Foots ----------------
    if ($curveSelection[$i] == ($prefix+"LmiddleFoot")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"LeftInFootMiddle", "LeftFootMiddle*"});
     _setJointLabels($jnts[0], {"", "MiddleToe*"});
    }
    if ($curveSelection[$i] == ($prefix+"RmiddleFoot")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"RightInFootMiddle", "RightFootMiddle*"});
     _setJointLabels($jnts[0], {"", "MiddleToe*"});
    }
    if ($curveSelection[$i] == ($prefix+"LindexFoot")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"LeftInFootIndex", "LeftFootIndex*"});
     _setJointLabels($jnts[0], {"", "IndexToe*"});
    }
    if ($curveSelection[$i] == ($prefix+"RindexFoot")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"RightInFootIndex", "RightFootIndex*"});
     _setJointLabels($jnts[0], {"", "IndexToe*"});
    }
    if ($curveSelection[$i] == ($prefix+"LringFoot")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"LeftInFootRing", "LeftFootRing*"});
     _setJointLabels($jnts[0], {"", "RingToe*"});
    }
    if ($curveSelection[$i] == ($prefix+"RringFoot")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"RightInFootRing", "RightFootRing*"});
     _setJointLabels($jnts[0], {"", "RingToe*"});
    }
    if ($curveSelection[$i] == ($prefix+"LpinkyFoot")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"LeftInFootPinky", "LeftFootPinky*"});
     _setJointLabels($jnts[0], {"", "PinkyToe*"});
    }
    if ($curveSelection[$i] == ($prefix+"RpinkyFoot")){
     string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
     $jnts = _renameJoints($jnts[0], {"RightInFootPinky", "RightFootPinky*"});
     _setJointLabels($jnts[0], {"", "PinkyToe*"});
    }

    // Thumb Foots ----------------
    if ($thumbFingerNum == 1){
     if ($curveSelection[$i] == ($prefix+"LthumbFoot")){
      string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
      $jnts = _renameJoints($jnts[0], {"LeftInFootThumb", "LeftFootThumb*"});
      _setJointLabels($jnts[0], {"", "Thumb*"});
     }
     if ($curveSelection[$i] == ($prefix+"RthumbFoot")){
      string $jnts[] = _JointOn1DCurve_FR ($curve,1,0, {});
       $jnts = _renameJoints($jnts[0], {"RightInFootThumb", "RightFootThumb*"});
      _setJointLabels($jnts[0], {"", "Thumb*"});
     }
    }

   }
  }
 }

 // =========
 string $necks[] = `ls -type joint "Neck*"`;
 string $spines[] = `ls -type joint "Spine*"`;

 parent Head $necks[`size $necks` - 2];
 delete $necks[`size $necks` - 1];

 parent Neck LeftShoulder RightShoulder $spines[`size $spines` - 1];

 parent LeftUpLeg RightUpLeg Hips;

 if ( objExists("Jaw1") ) parent Jaw1 Head;
 if ( objExists("Tail1") ) parent Tail1 Hips;

 if ( objExists("LeftInHandPinky") )  parent LeftInHandPinky LeftFingerBase;
 if ( objExists("LeftInHandRing") )  parent LeftInHandRing LeftFingerBase;
 if ( objExists("LeftInHandIndex") )  parent LeftInHandIndex LeftFingerBase;
 if ( objExists("LeftInHandThumb") )  parent LeftInHandThumb LeftFingerBase;
 if ( objExists("LeftFingerBase") )  parent LeftFingerBase LeftHand;

 if ( objExists("RightInHandPinky") ) parent RightInHandPinky RightFingerBase;
 if ( objExists("RightInHandRing") )  parent RightInHandRing RightFingerBase;
 if ( objExists("RightInHandIndex") ) parent RightInHandIndex RightFingerBase;
 if ( objExists("RightInHandThumb") ) parent RightInHandThumb RightFingerBase;
 if ( objExists("RightFingerBase") )  parent RightFingerBase RightHand;

 if ( objExists("LeftInFootPinky") )  parent LeftInFootPinky LeftToeBase;
 if ( objExists("LeftInFootRing") )  parent LeftInFootRing LeftToeBase;
 if ( objExists("LeftInFootMiddle") ) parent LeftInFootMiddle LeftToeBase;
 if ( objExists("LeftInFootIndex") )  parent LeftInFootIndex LeftToeBase;
 if ( objExists("LeftInFootThumb") )  parent LeftInFootThumb LeftToeBase;

 if ( objExists("RightInFootPinky") ) parent RightInFootPinky RightToeBase;
 if ( objExists("RightInFootRing") )  parent RightInFootRing RightToeBase;
 if ( objExists("RightInFootMiddle") ) parent RightInFootMiddle RightToeBase;
 if ( objExists("RightInFootIndex") ) parent RightInFootIndex RightToeBase;
 if ( objExists("RightInFootThumb") ) parent RightInFootThumb RightToeBase;

 // Orient Joint
  switch ($type) {
   case "Biped_Normal":
    select -r LeftHand RightHand;
    joint -e -oj yxz -secondaryAxisOrient yup -ch -zso;
    select -r LeftFoot RightFoot;
    joint -e -oj yzx -secondaryAxisOrient yup -ch -zso;

    $tmp = `ls "LeftInHandThumb" "LeftHandThumb*"`;
    _rotateLocalAxis($tmp, 0, -60, 0, 0);

    $tmp = `ls "RightInHandThumb" "RightHandThumb*"`;
    _rotateLocalAxis($tmp, 0, -60, 0, 0);
    break;
   case "Quadruped_Hoof":
   case "Quadruped_Normal":$ManiSize = 20; break;
    select -r LeftFoot RightFoot LeftHand RightHand;
    joint -e -oj yzx -secondaryAxisOrient yup -ch -zso;
    break;
  }

 select -cl;
}

//###########################################################################################################
//
//  DATA BLOCK (END)
//
//###########################################################################################################

 

//************************************************************************************************************
//
global proc CreateTemplateRigCurves()
{
 string $prefix = "";
 string $type = `radioCollection -q -select FBIK_SkelRB`;

 if ( `objExists ($prefix+"Guide_Skeleton")` ) {
  warning "Please Delete Old Guide_Skeleton.";
  return;
 }

 int $fingerNum = `radioButtonGrp -q -sl FBIK_fingerNumRB`;
 int $thumbFingerNum = `checkBox -q -v FBIK_thumbFingerNumCB`;
 int $feetFingerCount = `radioButtonGrp -q -sl FBIK_FeetFingerNumRB`;
 int $feetThumbFingerNum = `checkBox -q -v FBIK_thumbFeetFingerNumCB`;

 // =========
 string $sys = `group -em -n ($prefix+"Guide_Skeleton")`;
 string $box = `group -em -n ($prefix+"RigSpheres") -p ($prefix+"Guide_Skeleton")`;
 string $sym = `group -em -n ($prefix+"RigCurves") -p ($prefix+"Guide_Skeleton")`;
 toggle -state on -template;

 // =========
 float $ManiSize;
 switch ( $type ) {
  case "Biped_Normal": $ManiSize = 8; break;
  case "Quadruped_Hoof":
  case "Quadruped_Normal":$ManiSize = 20; break;
 }
 string $tmp = _createGlobalScaleManipulator(8, $ManiSize);
 rename $tmp ($prefix + "GlobalScale");
 FreezeTransformations;
 parent ($prefix + "GlobalScale") ($prefix+"Guide_Skeleton");

 connectAttr ($prefix+"GlobalScale.translateX") ($prefix+"RigSpheres.tx");
 connectAttr ($prefix+"GlobalScale.translateY") ($prefix+"RigSpheres.ty");
 connectAttr ($prefix+"GlobalScale.translateZ") ($prefix+"RigSpheres.tz");

 connectAttr ($prefix+"GlobalScale.scaleX") ($prefix+"RigSpheres.sx");
 connectAttr ($prefix+"GlobalScale.scaleY") ($prefix+"RigSpheres.sy");
 connectAttr ($prefix+"GlobalScale.scaleZ") ($prefix+"RigSpheres.sz");

 // =========
 addAttr -w 1 -ln "type" -dt "string" ($prefix+"Guide_Skeleton");
 addAttr -w 1 -ln "prefix" -dt "string" ($prefix+"Guide_Skeleton");
 setAttr -l 1 -type "string" ($prefix+"Guide_Skeleton.type") $type;
 setAttr -l 1 -type "string" ($prefix+"Guide_Skeleton.prefix") $prefix;

 // ========= shader
 if( !`objExists "RIG_Shader"`){
  shadingNode -asShader lambert -n "RIG_Shader";
  sets -renderable true -noSurfaceShader true -empty -name "RIG_ShaderSG";
  connectAttr -f RIG_Shader.outColor RIG_ShaderSG.surfaceShader;
  setAttr RIG_Shader.color 0 0 1;
 }

 waitCursor -state on;
 // =========
 switch ( $type ) {
  case "Biped_Normal":
    _createCurveAndRef_Biped($prefix, $sym, $fingerNum, $thumbFingerNum, $feetFingerCount, $feetThumbFingerNum);
    _addCluster_Biped($prefix, $fingerNum, $thumbFingerNum, $feetFingerCount, $feetThumbFingerNum);
    _ParentingGuideCurves($prefix);
    break;
  case "Quadruped_Hoof":
    $fingerNum = 1;
    $feetFingerCount = 1;
  case "Quadruped_Normal":
    $thumbFingerNum = 0;
    $feetThumbFingerNum = 0;
    _createCurveAndRef_Quadruped($type, $prefix, $sym, $fingerNum, $thumbFingerNum, $feetFingerCount, $feetThumbFingerNum);
    _addCluster_Quadruped($prefix, $fingerNum, $thumbFingerNum, $feetFingerCount, $feetThumbFingerNum);
    _ParentingGuideCurves($prefix);
    break;
 }
 waitCursor -state off;
 select -cl;
}

//************************************************************************************************************
//
global proc CreateSkeletonFBIK()
{
 string $prefix = "";
 string $tmp[] = `ls ($prefix+"*Guide_Skeleton")`;
 if ( !`size $tmp` ) {
  warning "Not Found Guide_Skeleton.";
  return;
 }
 string $guide = $tmp[0];

 int $RollCB = `checkBox -q -v FBIK_addRollCB`;

 if ( objExists($guide+".type") ) {
  string $type = `getAttr ($guide+".type")`;
  switch ( $type ) {
   case "Biped_Normal":
    _BoneCreation( $type, 4, 1, $RollCB );
    break;
   case "Quadruped_Hoof":
   case "Quadruped_Normal":
    _BoneCreation( $type, 4, 1, $RollCB );
    break;
  }
 }
}

//************************************************************************************************************
//
global proc FBIK_GuideMatchL2R(string $prefix){
 string $dummy = "Ctrl"; 
 string $characterName = "";
 string $ref[], $tmp[];
 string $toMove[];
 float $refPos[];
 float $refRot[];

 //select the spheres on the right side
 $tmp = `ls ($prefix+"R*Ctrl*")`;
 if ( !`size $tmp` )
  return;
 select ($prefix+"R*Ctrl*");
 $ref = `ls -sl -type "transform"`;

 //select the spheres on the left side 
 select ($prefix+"L*Ctrl*"); 
 $toMove = `ls -sl -type "transform"`;

 //clear the selection and match the left side to the right side
 select -cl;
  for ($j=0;$j<(size($ref));$j++){
   $refPos = `xform -q -t $ref[$j]`;
   $refRot = `xform -q -os -ro $ref[$j]`;
   $refScl = `getAttr ($ref[$j]+".s")`;
   select -r $toMove[$j];
   move -ls ($refPos[0]*-1) $refPos[1] $refPos[2] ;
   rotate $refRot[0] ($refRot[1]*-1) ($refRot[2]*-1);
   scale  $refScl[0] $refScl[1] $refScl[2];
  }
 select -cl;
}
//************************************************************************************************************
//
global proc FBIK_GuideMatchR2L(string $prefix){
 string $dummy = "Ctrl"; 
 string $characterName = "";
 string $ref[], $tmp[];
 string $toMove[];
 float $refPos[];
 float $refRot[];

 //select the spheres on the left side 
 $tmp = `ls ($prefix+"L*Ctrl*")`;
 if ( !`size $tmp` )
  return;
 select ($prefix+"L*Ctrl*");
 $ref = `ls -sl -type "transform"`;

 //select the spheres on the right side 
 select ($prefix+"R*Ctrl*"); 
 $toMove = `ls -sl -type "transform"`;

 //clear the selection and match the right side to the left side  
 select -cl;
  for ($j=0;$j<(size($ref));$j++){
   $refPos = `xform -q -t $ref[$j]`;
   $refRot = `xform -q -os -ro $ref[$j]`;
   $refScl = `getAttr ($ref[$j]+".s")`;
   $toMovePos = `xform -q -t $toMove[$j]`;
   $toMoveRot = `xform -q -ro $toMove[$j]`;

   select -r $toMove[$j];
   move -ls ($refPos[0]*-1) $refPos[1] $refPos[2] ;
   rotate $refRot[0] ($refRot[1]*-1) ($refRot[2]*-1) ;
   scale  $refScl[0] $refScl[1] $refScl[2];
  }
 select -cl;
}

global proc FBIK_setStatus()
{
 string $type = `radioCollection -q -select FBIK_SkelRB`;
 switch ($type) {
  case "Biped_Normal":
   if ( `frameLayout -q -ex FBIK_FRM_HANDS` ) frameLayout -e -en 1 FBIK_FRM_HANDS;
   if ( `frameLayout -q -ex FBIK_FRM_FEET` ) frameLayout -e -en 1 FBIK_FRM_FEET;
   if ( `checkBox -q -ex FBIK_thumbFingerNumCB` ) checkBox -e -en 1 FBIK_thumbFingerNumCB;
   if ( `checkBox -q -ex FBIK_thumbFeetFingerNumCB` ) checkBox -e -en 1 FBIK_thumbFeetFingerNumCB;
   break;
  case "Quadruped_Hoof":
   if ( `frameLayout -q -ex FBIK_FRM_HANDS` ) frameLayout -e -en 0 FBIK_FRM_HANDS;
   if ( `frameLayout -q -ex FBIK_FRM_FEET` ) frameLayout -e -en 0 FBIK_FRM_FEET;
   break;
  case "Quadruped_Normal":
   if ( `frameLayout -q -ex FBIK_FRM_HANDS` ) frameLayout -e -en 1 FBIK_FRM_HANDS;
   if ( `frameLayout -q -ex FBIK_FRM_FEET` ) frameLayout -e -en 1 FBIK_FRM_FEET;
   if ( `checkBox -q -ex FBIK_thumbFingerNumCB` ) checkBox -e -en 0 FBIK_thumbFingerNumCB;
   if ( `checkBox -q -ex FBIK_thumbFeetFingerNumCB` ) checkBox -e -en 0 FBIK_thumbFeetFingerNumCB;
   break;
 }
}

//************************************************************************************************************
//
proc string _createInnerUI() {

 float $c1[] = {1.0, 1.0, 0.9};
 float $c2[] = {1.0, 0.8, 1.0};

 string $ret = `frameLayout -borderStyle "etchedIn" -collapsable false -collapse false -lv 0`;
  columnLayout -adj 1 ;
   frameLayout -borderStyle "etchedOut" -collapsable 0 -collapse 0 -l " Type of skeleton :";
    columnLayout;
     radioCollection FBIK_SkelRB;
     rowColumnLayout -nc 3 -cw 1 70 -cw 2 60 -cw 3 90 -cal 1 "left" ;
      text -h 16 -l  " Biped: ";
      radioButton -h 16 -label "Human" -onc "FBIK_setStatus" Biped_Normal;
     setParent ..;
     rowColumnLayout -nc 3 -cw 1 70 -cw 2 60 -cw 3 90 -cal 1 "left" ;
      text -h 16 -l  " Quadruped: ";
      radioButton -h 16 -label "Hoof" -onc "FBIK_setStatus"  Quadruped_Hoof;
      radioButton -h 16 -label "Finger" -onc "FBIK_setStatus" Quadruped_Normal;
     setParent ..;
     radioCollection -e -select "Biped_Normal" FBIK_SkelRB;
    setParent ..;
   setParent ..;

   frameLayout -borderStyle "etchedOut" -collapsable 0 -collapse 0 -cc "FB_resizeWin;FB_resizeWin" -ec "FB_resizeWin;FB_resizeWin" -l "Hands" FBIK_FRM_HANDS;
    columnLayout;
     rowColumnLayout -nc 1 -cw 1 230 -cal 1 "left";
      radioButtonGrp -ann "Choose The Number of Fingers Included in Character Hand" -numberOfRadioButtons 4 -cw5 100 35 35 35 35 -sl 4 -label " Number of Fingers" -labelArray4 "1" "2" "3" "4" FBIK_fingerNumRB;
     setParent ..;
     rowColumnLayout -nc 2 -cw 1 100 -cal 1 "left";
      text -ann "Choose to Add a Thumb Finger in Character Hand" -l " Thumb Finger";
      checkBox -ann "Choose to Add a Thumb Finger in Character Hand" -l "" -v 1 FBIK_thumbFingerNumCB;
     setParent ..;
    setParent ..;
   setParent ..;

   frameLayout -borderStyle "etchedOut" -collapsable 0 -collapse 0 -cc "FB_resizeWin;FB_resizeWin" -ec "FB_resizeWin;FB_resizeWin" -l "Foots" FBIK_FRM_FEET;
    columnLayout;
     rowColumnLayout -nc 1 -cw 1 230 -cal 1 "left";
      radioButtonGrp -ann "Choose The Number of Fingers Included in Character Foot" -numberOfRadioButtons 4 -cw5 100 35 35 35 35 -sl 4 -label " Number of Fingers" -labelArray4 "1" "2" "3" "4" FBIK_FeetFingerNumRB;
     setParent ..;
     rowColumnLayout -nc 2 -cw 1 100 -cal 1 "left";
      text -ann "Choose to Add a Thumb Finger in Character Foot" -l " Thumb Finger";
      checkBox -ann "Choose to Add a Thumb Finger in Character Foot" -l "" -v 1 FBIK_thumbFeetFingerNumCB;
     setParent ..;
    setParent ..;
   setParent ..;

   button -w 180 -h 20 -bgc $c1[0] $c1[1] $c1[2] -label "Create TemplateCurves" -c "CreateTemplateRigCurves()";

   rowColumnLayout -nc 3 -cw 1 85 -cw 2 75 -cw 3 85;
    button -h 16 -bgc 0.9 0.95 0.89  -ann "Match The Character Guides Left Side to The Right Side" -label "Mirror >>>>" -c "FBIK_GuideMatchL2R(\"\")";
    text   -h 16 -label "Symmetry" -align "center";
    button -h 16 -bgc 0.9 0.95 0.89 -ann "Match The Character Guides Right Side to The Left Side" -label "<<<< Mirror" -c "FBIK_GuideMatchR2L(\"\")";
   setParent ..;

   separator -w 290 -h 5 -vis 1 -st "none";
   frameLayout -borderStyle "etchedOut" -collapsable 0 -collapse 0 -lv 0 FBIK_FRM_ETC;
    columnLayout;
     rowColumnLayout -nc 2 -cw 1 130 -cal 1 "left";
      text -ann "Choose to Add a Roll Joints in Character Arm & Foot" -l " Add Roll Joints (Arm, Leg)";
      checkBox -ann "Choose to Add a Roll Joints in Character Arm & Foot" -l "" -v 1 FBIK_addRollCB;
     setParent ..;
    setParent ..;
   setParent ..;

   button -w 180 -h 20 -bgc $c2[0] $c2[1] $c2[2] -label "Create Skeleton"   -c "CreateSkeletonFBIK()";
  setParent ..;
 setParent ..;

 global string $gFBFrames;
 $gFBFrames = $gFBFrames + "," + $ret;

 return $ret;
}

//************************************************************************************************************
//
global proc FB_resizeWin() {
 global string $gFBFrames;
 int $title = 25;
 int $menu = 0; //25
 int $layout = 5;

 string $osv = `system ver`;
 if ( gmatch($osv, "*XP*") ) $title += 10; // for WinXP

 string $buff[], $tmp[];
 $num = `tokenize $gFBFrames "," $buff`;
 int $height;
 for ( $one in $buff ) {
  if (`frameLayout -q -ex $one`) {
   tokenize $one "|" $tmp;
   $height += `frameLayout -q -h $one`;
  }
 }
 $height += $title + $menu + $layout;

 int $width = 260;
 window -e -width $width -height $height FBIK_SkelWin;
}

//************************************************************************************************************
//
global proc FB_minMaxWin(int $init)
{
 int $h = `formLayout -q -h FB_FORM`;
 if ( $init == 1 || $h < 10 )
  FB_resizeWin;
 else
  window -e -width 155 -height 1 FBIK_SkelWin;
}

//************************************************************************************************************
//
proc createFBIK_Skeleton() {

 if (( `window -ex FBIK_SkelWin`) == true) deleteUI FBIK_SkelWin;

 // initialize global variables.
 global string $gFBFrames;
 $gFBFrames = "";

 window -title ("createFBIK_Skeleton v1.2") -tlb 1 -mxb 0 -mnb 0 -height 285 FBIK_SkelWin;

 $form=`formLayout FB_FORM`;

  button -h 5 -l "" -c ("FB_minMaxWin(0)") FB_MIN;
  string $bl1 = _createInnerUI(); setParent $form;

 formLayout -e
  -attachForm  FB_MIN "top" 0   -attachNone  FB_MIN "bottom"
  -attachForm  FB_MIN "left" 0  -attachForm  FB_MIN "right" 0

  -attachControl $bl1 "top" 2 FB_MIN -attachNone  $bl1 "bottom"
  -attachForm  $bl1 "left" 2  -attachForm  $bl1 "right" 2
 $form;

 showWindow FBIK_SkelWin;
 FB_resizeWin();
}
createFBIK_Skeleton;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多