今天花点时间给公司写了个自动更新角色rig的工具:
global string $refNodesNeedUpdate = "";
global string $refNodesOld = "";
global proc returnrefNodesNeedUpdate(){
string $allReferenceNodes[] = `file -q -r`;
string $selectedRefNodes[];clear $selectedRefNodes;
for($i=0,$j=0;$i<size($allReferenceNodes);$i++){
if(`referenceQuery -il $allReferenceNodes[$i]`){
string $buffer[]; clear $buffer;
tokenize $allReferenceNodes[$i] "/" $buffer;
if(($buffer[5] == "chr")&&($buffer[7] == "rig")){
$selectedRefNodes[$j] = $allReferenceNodes[$i];
}
$j=$j+1;
}
}
//print $selectedRefNodes;
for($eachNode in $selectedRefNodes){
string $filebufferString[];clear $filebufferString;
string $refbufferString[];clear $refbufferString;
string $verbufferString[];clear $verbufferString;
tokenize $eachNode "/" $filebufferString;
int $sizeOfnode = `size($filebufferString)`;
tokenize $filebufferString[$sizeOfnode-1] "_" $verbufferString;
int $sizeOfVer = `size $verbufferString`;
int $currentVer = stringRemovePrefix($verbufferString[$sizeOfVer-1], "v" );
string $queryFolder = $filebufferString[0] + "/" +
$filebufferString[1] + "/" +
$filebufferString[2] + "/" +
$filebufferString[3] + "/" +
$filebufferString[4] + "/" +
$filebufferString[5] + "/" +
$filebufferString[6] + "/" +
$filebufferString[7];
string $fileList[] = `getFileList -folder $queryFolder `;
int $newFileList[];clear $newFileList;
int $k ;
for($eachVer in $fileList)
{
if((size ($eachVer)) == 4){
int $newFileListtemp = stringRemovePrefix($eachVer, "v" );
$newFileList[$k] = $newFileListtemp;
$k = $k+1;}
}
if(size ($newFileList)){
//print $newFileList;
int $newArray[] = sort ($newFileList) ;
int $sizeNewArray = size ($newArray);
if($currentVer != $newArray[$sizeNewArray-1])
{
global string $refNodesOld;
string $tempString = $filebufferString[$sizeOfnode-1];
string $tempString02[];clear $tempString02;
tokenize $tempString "." $tempString02;
string $tempStringBuffer[];clear $tempStringBuffer;
tokenize $tempString02[0] "_" $tempStringBuffer;
for($i=1;$i<$currentVer+1;$i++){
string $tempString0 = $tempStringBuffer[0]+
"_"+$tempStringBuffer[1]+
"_"+$tempStringBuffer[2]+
"_"+$tempStringBuffer[3]+
"_"+"v00"+$i+"RN";
//print (1+1);
if(`objExists $tempString0`){
$refNodesOld = $refNodesOld + " " + $tempString0;
//print $refNodesOld;
//print (1+1);
break;
}
}
string $newRigFolder = $queryFolder +"/"+ "v00" + $newArray[$sizeNewArray-1]+"/"+"rig_mb";
string $newRig[] = `getFileList -folder $newRigFolder `;
global string $refNodesNeedUpdate;
$refNodesNeedUpdate = $refNodesNeedUpdate +" "+ $newRigFolder +"/"+ $newRig[0];
}
}
}
}
/*
$refNodesNeedUpdate = "";
$refNodesOld = "";
*/
//returnrefNodesNeedUpdate;
/*
print ($refNodesNeedUpdate+"\n");
print $refNodesOld
*/
global proc string[] relistRefNodesOld(){
global string $refNodesOld;
string $tempBuffer[];clear $tempBuffer;
tokenize $refNodesOld " " $tempBuffer;
for($i=0;$i<size($tempBuffer);$i++)
{
int $k=1;
for($j=$i+1;$j<size($tempBuffer);$j++)
{
if($tempBuffer[$i] == $tempBuffer[$j])
{
$tempBuffer[$j] = $tempBuffer[$j]+$k;
$k = $k+1;
}
}
}
return $tempBuffer;
//print $tempBuffer;
}
global proc DH_openFile(){
global string $refNodesNeedUpdate;
global string $refNodesOld;
returnrefNodesNeedUpdate;
string $allNodesNeedUpdateArry[];clear $allNodesNeedUpdateArry;
tokenize $refNodesNeedUpdate " " $allNodesNeedUpdateArry;
string $allNodesOldName[];clear $allNodesOldName;
tokenize $refNodesOld " " $allNodesOldName;
if(size($allNodesNeedUpdateArry)>=2){
string $charName = "";
int $i;
for($eachChar in $allNodesNeedUpdateArry){
string $fullName[];clear $fullName;
string $charLongName[];clear $charLongName;
tokenize $eachChar "/" $fullName;
int $fullNameSize = size($fullName);
tokenize $fullName[$fullNameSize-1] "_" $charLongName;
$charName = $charName + "\n" + $charLongName[2];
$i=$i+1;
}
//print $charName;
string $ifUpdate = `confirmDialog
-title "提示"
-m ("发现以下角色需要更新绑定,是否更新?\n "+$charName)
-b "Yes"
-b "No"
-defaultButton "Yes"
`;
if($ifUpdate == "Yes"){
if(size($allNodesNeedUpdateArry) == size($allNodesOldName)){
string $relistedOldArry[] = `relistRefNodesOld`;
for($i=0;$i<size($relistedOldArry);$i++){
file -loadReference $relistedOldArry[$i] -type "mayaBinary" -options "v=0;p=17;f=0" $allNodesNeedUpdateArry[$i];
}
}
}
}
else {
print "当前场景暂无需要更新的rig.";
}
$refNodesNeedUpdate = "";
$refNodesOld = "";
}
DH_openFile;