不同maya窗口間的數據傳輸。 在以前制作課件時,遇到了這樣的問題,就是。需要把制作案例的過程重復一遍。 這樣錄制過程中,物體的位置、旋轉縮放的數據總是需要不停的在兩個maya之間copy。 累啊。于是編寫了這個小工具。 在兩個maya窗口中,都打開這個工具。在一邊點記錄,另一邊點讀取即可。非常方便。 ![]() ![]() 以下是本插件源代碼: 源碼: //Coded by Jinghai Tian in 2008 //you first open two maya main windows. //this procedure can transport data between objects with the same name form different maya main windows. //to do this well ,you must ensure the objects with the same name in different maya main windows. //UI attrTransport; global proc attrTransport() { if (`windowPref -exists attrTransportWindow`) windowPref -remove attrTransportWindow; if (`window -exists attrTransportWindow`) deleteUI attrTransportWindow; window -widthHeight 200 150 -title "AttrTransport by Jinghai Tian.2005-2008" -topLeftCorner 50 200 -bgc 0.1 0.3 0.4 -sizeable 1 -rtf 1 -minimizeButton 1 -maximizeButton 0 attrTransportWindow; columnLayout -adj 1 -w 200 -h 150 -columnAlign "center" -bgc 0.576 0.607 0.726 ; text -bgc 0.576 0.607 0.726 -al "left" -l "此工具從不同的maya窗口\n之間傳遞同名物體的數據 \n"; text -bgc 0.576 0.607 0.726 -al "left" -l " Use Methord:"; text -bgc 0.576 0.607 0.726 -al "left" -l " 1.選擇多個物體."; button -bgc 0.748 0.790 0.949 -w 150 -label " 記錄變換數據" -command "writeDataToTempFile" ; text -bgc 0.576 0.607 0.726 -al "left" -l " 2.直接執行."; button -bgc 0.748 0.790 0.949 -w 150 -label " 讀取數據 " -command "readDataFromTempFile" ; text -bgc 0.576 0.607 0.726 -al "center" -l "\n "; showWindow; } global proc string attrTransportSettings() { string $finalCommands=""; //add attr you want to transport underline. $finalCommands+=`attrTransportProcess tx`; $finalCommands+=`attrTransportProcess ty`; $finalCommands+=`attrTransportProcess tz`; $finalCommands+=`attrTransportProcess rx`; $finalCommands+=`attrTransportProcess ry`; $finalCommands+=`attrTransportProcess rz`; $finalCommands+=`attrTransportProcess sx`; $finalCommands+=`attrTransportProcess sy`; $finalCommands+=`attrTransportProcess sz`; //$finalCommands+=`attrTransportProcess coneAngle`; //$finalCommands+=`attrTransportProcess intensity`; //$finalCommands+=`vectorAttrTransportProcess color`; return $finalCommands; } global proc string attrTransportProcess(string $attr) { string $selects[]=`ls -sl`; int $selNum=size($selects); string $finalCommands; for ($i=0;$i<$selNum;$i++) { if(`objExists ($selects[$i]+"."+$attr)`){ float $data=`getAttr ($selects[$i]+"."+$attr)`; //Returns a number rounded to the largest integer less than or equal to a floating point number. $data=floor($data*10)/10; $finalCommands+="setAttr "+$selects[$i]+"."+$attr+" "+$data+";\n"; } } return $finalCommands; } global proc string vectorAttrTransportProcess(string $attr) { string $selects[]=`ls -sl`; int $selNum=size($selects); string $finalCommands; for ($i=0;$i<$selNum;$i++) { if(`objExists ($selects[$i]+"."+$attr)`){ vector $data=`getAttr ($selects[$i]+"."+$attr)`; $finalCommands+="setAttr "+$selects[$i]+"."+$attr+" -type double3 "+$data.x+" "+$data.y+" "+$data.z+" "+";\n"; } } return $finalCommands; } global proc writeDataToTempFile() { $tempFileName = ( `internalVar -userTmpDir` + "attrTransport.tmp" ); $fileId=`fopen $tempFileName "w"`; string $finalCommands=`attrTransportSettings`; fprint $fileId $finalCommands; fclose $fileId; print "write successful!"; } // Now, open the file and read the data // global proc readDataFromTempFile() { $tempFileName = ( `internalVar -userTmpDir` + "attrTransport.tmp" ); $fileId=`fopen $tempFileName "r"`; string $finalCommands; $finalCommands=`fread $fileId $finalCommands`; eval_r($finalCommands); fclose $fileId; print "read successful!"; } 下載請先登錄~
|