ボーナスツールの改造版
ノードの種類を指定してコピーできます。
ビジビリティもコピーするか設定できます。
UVスクロールはシーン内の全てをコピーします。
シェルフはそのままペーストしますが、
PosePasteはペーストされるノードを調べてからペーストします。
//GetTextStringLine.melつかってます
global proc yjp_PosePaste()
{
    string $PExportPath = `internalVar -usd`;
    int $n;
    string $cmd[] = `GetTextStringLine ($PExportPath + "/pose.txt")`;
    for ($n=0;$n<size($cmd);$n++)
    {
        string $buffer[];
        int $c = 0;
        tokenize $cmd[$n] " .;" $buffer;
        print ("cmd " + $cmd[$n] + "\n") ;
        if(`objExists $buffer[2]`)
        {
             string $atlist[] = `listAttr -keyable -connectable -unlocked -scalar -write -hd  $buffer[2]`;
                if(stringArrayCount($buffer[3], $atlist) > 0)
             {
              eval $cmd[$n];
             }
        }
        else
        {
            print ("no obj " +  $buffer[1] + "\n") ;
        }
      
    }
 
    print ("ポーズペースト終了" + "\n") ;
  
}
global proc yjp_PoseCopy(int $mode)
{
    string $node[];
    if(`radioButtonGrp -q -sl PoseCopyRBG` == 1)
    {
     if(`checkBox -q -v UseUVanimCB`)
     {
      $node =`ls -type "transform" -type "place2dTexture"`;
     }
     else
     {
      $node =`ls -type "transform"`;
     }
    }
    else if(`radioButtonGrp -q -sl PoseCopyRBG` == 2)
    {
     if(`checkBox -q -v UseUVanimCB`)
     {
         $node =`ls -type "transform" -type "place2dTexture" -sl`;
     }
     else
     {
      $node =`ls -type "transform" -sl`;
     }
    }
    else if(`radioButtonGrp -q -sl PoseCopyRBG` == 3)
    {
     select -hi;
        $node =`ls -type "transform" -sl`;
     if(`checkBox -q -v UseUVanimCB`)
     {
      $pt =`ls -type "place2dTexture" `;
      $node = stringArrayCatenate($node, $pt);
     }
    }
    int $n;
 global string $gShelfTopLevel;
    string $script,$text;
 int $writable;
 string $command = "";
 
    int $ti = `currentTime -q`;
 
 for ($item in $node)
 {
  string $attlist[] ;
  clear $attlist;
  if(`nodeType $item` == "transform")
  {
   //print ("mseh " + $item +"\n");
   string $cnode[] = `listRelatives -c -s -f $item`;
   if(size($cnode) > 0)
   {
    if(`nodeType $cnode[0]` == "mesh" && `checkBox -q -v MeshOnlyCB`)
    {
     //print ("mseh " + $item +"\n");
     if(`checkBox -q -v UseVisibilityCB`)
     {
      $attlist = `listAttr -keyable -connectable -unlocked -scalar -write -hd -st "translate?" -st "rotate?" -st "scale?" -st "visibility" $item`;
     }
     else
     {
      $attlist = `listAttr -keyable -connectable -unlocked -scalar -write -hd -st "translate?" -st "rotate?" -st "scale?" $item`;
     }
     
    }
    else if(`nodeType $cnode[0]` == "mesh" && !`checkBox -q -v MeshOnlyCB` && `checkBox -q -v UseVisibilityCB`)
    {
     $attlist = `listAttr -keyable -connectable -unlocked -scalar -write -hd -st "visibility" $item`;
    }
    else if(`nodeType $cnode[0]` == "locator" && `checkBox -q -v locatorOnlyCB`)
    {
     if(`checkBox -q -v UseVisibilityCB`)
     {
      $attlist = `listAttr -keyable -connectable -unlocked -scalar -write -hd -st "translate?" -st "rotate?" -st "scale?" -st "visibility" $item`;
     }
     else
     {
      $attlist = `listAttr -keyable -connectable -unlocked -scalar -write -hd -st "translate?" -st "rotate?" -st "scale?" $item`;
     }
    }
   }
   else if(`checkBox -q -v groupOnlyCB` && `checkBox -q -v UseVisibilityCB`)
   {
    $attlist = `listAttr -keyable -connectable -unlocked -scalar -write -hd -st "visibility" $item`;
   }
  }
  else if(`nodeType $item` == "joint" && `checkBox -q -v JointOnlyCB`)
  {
   //print ("joint " + $item +"\n");
   $attlist = `listAttr -keyable -connectable -unlocked -scalar -write -hd -st "translate?" -st "rotate?" -st "scale?" $item`;
  }
  else if(`nodeType $item` == "place2dTexture" && `checkBox -q -v UseUVanimCB`)
  {
   //print ("UV " + $item +"\n");
   $attlist = `listAttr -keyable -connectable -unlocked -scalar -write -hd -st "offset?" -st "translateFrame?" $item`;
  }
  //Step through list of appropriate attributes for each object
  if (size($attlist)>0){
  for ($att in $attlist)
  {
   $match = ("match \"\\\\.\"  " + $att);
   //print $match;
   if ( `eval $match` != "." )   //if not a compound
   {
                //
    // Check for input connections to current attr
    $input = `listConnections -source 1 ($item + "." + $att)`;
    if (`size $input` == 0)
    {
     $writable = 1;  //if no connections
    }
    else
    {
     if (`nodeType $input[0]` == "character") 
     {
      $writable = 1;  //if connected to character set
     }
     else
     {
      $writable = `isAnimCurve $input[0]`;  //check for anim curves 
     }
    }
    if ($writable)  
    {
     // add to command list for shelf button and print to script editor
     float $val = `getAttr ($item + "." + $att)`;
     $text = ("setAttr -clamp " + $item + "." + $att + " " + $val + ";\n");
     print ($text);
     $command = ($command+$text); 
    }
    else  
    { 
     // if locked by connection only print warning to script editor 
     $text = ($item + "." + $att + " : locked by input connection");
     warning ($text);
    }
   }
  }
  }
 }
    if($mode == 1)
    {
  //make shelf button containing list of setAttrs
  $buttonName = $ti;
  if (`tabLayout -exists $gShelfTopLevel`)
  {
   shelfButton
    -parent ($gShelfTopLevel + "|" + `tabLayout -q -st $gShelfTopLevel`)
    -command ($command)
    -image "createPose.png"
    -iol $buttonName
    -label $buttonName
    -annotation $buttonName ;
  }
  else
   error ("Must have active shelf to create shelf button");
         //textToShelf ($ti, $text);
 }
    if($mode == 0)
    {
        string $PExportPath = `internalVar -usd`;
        int $PFile;
        $PFile =`fopen ($PExportPath + "/pose.txt") "w"`;
        fprint ($PFile, "//\r\n");
        fprint ($PFile, $command);
        fclose ($PFile);
    }
    print ("ポーズコピー終了" + "\n") ;
    return ;
}
global proc yjp_PoseCopyPaste()
{
    if(`window -q -ex yjp_PoseCopyPaste`)
    {
        deleteUI yjp_PoseCopyPaste ;
    }
    window -wh 210 200 -tb 1 -tlb 0 -t "PoseCopyPaste" yjp_PoseCopyPaste ;
    columnLayout -w 130;
    radioButtonGrp
        -nrb 3
        -la3 "All" "Select" "Hierarchy"
        -sl 1
        -cw3 40 50 60 PoseCopyRBG;
    rowColumnLayout -nc 4;
 
        checkBox -label "mesh" -value true MeshOnlyCB;
        checkBox -label "Joint" -value true JointOnlyCB;
 checkBox -label "group" -value true groupOnlyCB;
 checkBox -label "locator" -value true locatorOnlyCB;
 
        checkBox -label "Visibility" -value true UseVisibilityCB;
        checkBox -label "UVanim" -value true UseUVanimCB;
     setParent ..;
    rowColumnLayout -nc 4;
        button -w 80 -h 25 -l "PoseCopyShelf" -c "yjp_PoseCopy 1" ;
        button -w 60 -h 25 -l "PoseCopy" -c "yjp_PoseCopy 0";
        button -w 60 -h 25 -l "PosePaste" -c "yjp_PosePaste" ;
    setParent ..;
    showWindow yjp_PoseCopyPaste ;
    window -e -wh 230 90 yjp_PoseCopyPaste ;
}
 
0 件のコメント:
コメントを投稿