2009年4月17日 星期五

import 之後如何移除物件的 namespace

當你把某個maya檔 import 到另外一個maya檔裡, 而且 import 選項裡有把 "use namespaces" 打勾 ( maya本身是建議你把它打勾,為了避免物件名稱衝突而造成的問題), import 完之後你就會發現物件名稱前面多了一個字串 再加一個冒號 (或多個).這東西叫做"namespace".




如過你覺得這些字串太長了,你不需要,或production 規定名稱不能有namespace, 那以下的 mel 程式可以把 這些 namespace 去掉.

{
 string $allNodes[] = `ls -l`;

string $allNamespaceNodes[];

for($each in $allNodes)
{
      if(`gmatch $each "*:*"` && (`nodeType $each` != "reference") && (!`referenceQuery -isNodeReferenced $each`))
         $allNamespaceNodes[size($allNamespaceNodes)] = $each;
 
}

int $nodeLevel[];

int $maxLevel=-1;
int $index = 0;
for($each in $allNamespaceNodes)
{
     string $tokens[];
     int $numToken =tokenize($each,"|",$tokens);
     $nodeLevel[$index] = $numToken;
     if($numToken > $maxLevel)
         $maxLevel = $numToken;
     $index+=1;
}

 print("nodes to be renamed: "+size($allNamespaceNodes)+"\n");

int $index = $maxLevel;
while($index>=1)
{
     int $index2=0;
     for($each in $allNamespaceNodes)
     {
         if($nodeLevel[$index2] == $index)
         {
             if((`nodeType $each` != "reference") && (!`referenceQuery -isNodeReferenced $each`))
             {
                 string $tokens[];
                 int $numToken = tokenize($each,":",$tokens);
                 string $shortName = $tokens[$numToken-1];
             
                 int $index=1;
                 string $newName = $shortName;
                 while(`objExists $newName`)
                 {
                     $newName = $shortName+$index;
                     $index+=1;
                 }
                 print ($each+" -> ");
                 string $result;
                 string $command = "rename "+$each+" "+$newName;
                 int $test = catch( $result = eval($command));
                 print ($result+"\n");
             }
         }
     
         $index2+=1;
     }
     $index-=1;
}
}

nb : 這個程式只把 import 物件的namespace 去掉, reference 物件 的 namespace 還是會保留.


執行完之 這些 namespace 就消失了.


-> 如何把以上的mel 程式變成一個shelf 按鈕.

4 則留言:

  1. 謝謝大大,大大謝謝^0^

    回覆刪除
  2. 這個讚,您真了不起,3Q~

    回覆刪除
  3. 好東西~ 謝謝了~!!!

    回覆刪除
  4. 2017 版
    https://knowledge.autodesk.com/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2016/ENU/Maya/files/GUID-084E707F-7C78-4F9F-B1C1-4876EB19D997-htm.html

    回覆刪除