posted by cimple 2009. 10. 19. 22:19

소스 코드에서 내가 짠 부분의 Tip 을 간략하게 정리하고자 한다.

1. 특정한 오브젝트를 생성한 다음, 그 오브젝트의 이름을 바꾸어주기

string $bbcmd = "polyCube -ch on -o on -w " + $fx + " -h " + $fy + " -d " + $fz + " -cuv " + 4;
string $bbname[] = eval($bbcmd);
rename $bbname[0] "BBB";


2. Bounding Box 를 그리는 Template 함수를 만들었다.

global proc makeBBTemplate(string $name, int $tx, int $ty, int $tz, int $rx, int $ry, int $rz)
{
 float $nx = `intSliderGrp -q -value cellY`;
 float $ny = `intSliderGrp -q -value cellZ`;
 float $nz = `intSliderGrp -q -value cellX`;
 string $bbCmd;
 
 if($name == "LEFT" || $name == "RIGHT")
 {
  $bbCmd = "polyPlane -w " + $nx + " -h " + $ny + " -sx 1 -sy 1";  
 }
 else if($name == "FRONT" || $name == "BACK")
 {
  $bbCmd = "polyPlane -w " + $nz + " -h " + $nx + " -sx 1 -sy 1";  
 }

 else if($name == "TOP" || $name == "BOTTOM")
 {
  $bbCmd = "polyPlane -w " + $nz + " -h " + $ny + " -sx 1 -sy 1";  
 }

 string $bbname[] = eval($bbCmd);
 rename $bbname[0] $name;

 if(eval("objExists " + " " + $name))
 {
  select $name;
  string $move = "move -x " + $nz/2.0*($tx) + " -y " + $nx/2.0*($ty) + " -z " + $ny/2.0*($tz);
  string $rotate = "rotate -x " + $rx + " -y " + $ry + " -z  " + $rz;
  eval($move);
  eval($rotate);
 }

 string $tx_lock = $name + ".tx";
 string $ty_lock = $name + ".ty";
 string $tz_lock = $name + ".tz";
 string $rx_lock = $name + ".rx";
 string $ry_lock = $name + ".ry";
 string $rz_lock = $name + ".rz";
 string $sx_lock = $name + ".sx";
 string $sy_lock = $name + ".sy";
 string $sz_lock = $name + ".sz";

 setAttr -lock true $tx_lock;
// string 을 만든 후, 내가 원하는 attribute 를 받아서 그것을 Lock 시키는 코드.
 setAttr -lock true $ty_lock;
 setAttr -lock true $tz_lock;
 setAttr -lock true $rx_lock;
 setAttr -lock true $ry_lock;
 setAttr -lock true $rz_lock;
 setAttr -lock true $sx_lock;
 setAttr -lock true $sy_lock;
 setAttr -lock true $sz_lock;
 
 string $bbTextCurve = "textCurves -t " + $name;
 string $bbTextCurveName[] = eval($bbTextCurve); 
 string $CurveName = $name + "Curve";
 rename $bbTextCurveName[0] $CurveName;

 if(eval("objExists " + " " + $CurveName))  // 함수 내부에는 이런 식으로 써줄 수 있다.
 {
  select $CurveName;
  string $move = "move -x " + $nz/2.0*($tx)*(1.1) + " -y " + $nx/2.0*($ty)*(1.1) + " -z " + $ny/2.0*($tz)*(1.1);
  string $rotate, $move2;
  if($name == "LEFT")
  {
   $rotate = "rotate -y -90";
   $move2 = "move -z -5.6 ";
  }
  else if($name == "RIGHT")
  {
   $rotate = "rotate -y 90";
   $move2 = "move -z 6.5";
  }
  else if($name == "TOP")
  {
   $rotate = "rotate -x -90";
   $move2 = "move -x -4.7"; 
  }
  else if($name == "BOTTOM")
  {
   $rotate = "rotate -x 90";
   $move2 = "move -x -9.6";
  }
  else if($name == "BACK")
  {
   $rotate = "rotate -y 180";
   $move2 = "move -x 6.6";
  }
  else if($name == "FRONT")
   $move2 = "move -x -7.7";

  eval($move);
  eval($move2);
  eval($rotate);
 }
}


ThEnd.