[mel]自动更新资产

今天花点时间给公司写了个自动更新角色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;


	
	

猜你喜欢

转载自blog.csdn.net/u012945135/article/details/80954842