2013-03-01 109 views
0

我一直在google上搜索如何處理Maya中的命名空間,所有結果都是關於如何刪除它們。我不想刪除它們。Python&Maya:命名空間

我引用我的角色到場景中,我需要在一個特定的定位運行腳本,但他們都有命名空間由於被引用

例如:shldr = cmds.xform('L_shldrFK_match_LOC', ws = True, t = True, q = True)

這會在worldspace中獲取locator的翻譯值,這正是我想要的。但由於命名空間的原因,它無法找到定位器。

如何讓它忽略代碼中的命名空間,但將它們保留在maya中?

另一件好事就是讓代碼識別是否沒有命名空間(例如場景未被引用)。

+0

你真的不能忽視的命名空間,但你可以加載一個命名空間爲您的代碼與命名空間今後使用 - 設置「namespaceName」 – joojaa 2013-03-02 22:44:28

回答

1

您可以使用cmds.namespaceInfo

此命令可以列出所有可用的命名空間 及其containting對象。

此處詳細瞭解:namespaceInfo

0

時,即時通訊編碼類似的東西我一般使用在命名空間是像這樣的星號。

shldr = cmds.xform('*:L_shldrFK_match_LOC', ws = True, t = True, q = True) 

這取決於你是否將不得不在其他命名空間名稱相同場景中的其他事情,但因爲那麼它將無法工作

0

我們需要的所有命名空間的列表,找到正確的:

namespaces = cmds.namespaceInfo(lon=True) 
current_namespace = cmds.namespaceInfo(currentNamespace=True) 
references = cmds.ls(type="reference") 

你可以用這個信息工作,但忽略了命名空間是不是真的好,因爲引用的主要功能是在你的場景的最後一次更新有一個環境/字符/道具資產乘倍.. .so

shldr = cmds.xform('*:L_shldrFK_match_LOC', ws = True, t = True, q = True) 

只有在場景中只有一個字符時纔有效。

3

解決這個問題的另一種方法是跳過字符串命名的依賴關係,並通過UUID替代檢索節點。請參閱cmds.ls結合-uuid標誌找到here

命名空間實際上只是附加到對象名稱上的字符串名稱前綴。只要名稱空間存在,就可以重命名對象以將其從命名空間中添加/刪除。例如:

import maya.cmds as cmds 

loc = cmds.spaceLocator() 
cmds.ls(loc)[0] # Result: u'locator1' # 

cmds.namespace(add='foobar') # Result: u'foobar' # 
loc = cmds.rename(loc, ':foobar:{}'.format(loc)) # Result: u'foobar:my_locator' # 

cmds.rename(loc, ':my_locator') # Result: u'my_locator' # 

背後UUID的想法是,節點得到貼上了特殊字符串屬性,它是唯一的節點,當節點被重命名不會改變。例如,注意名稱的變化,而UUID是一樣的:

import maya.cmds as cmds 

loc = cmds.spaceLocator() 
cmds.ls(loc, uuid=True)[0] # u'60446AC7-4398-E3CB-4C27-6BA417626E41' # 
cmds.ls(loc)[0] # Result: u'locator1' # 


loc = cmds.rename(loc, 'my_locator') 
cmds.ls(loc, uuid=True)[0] # Result: u'60446AC7-4398-E3CB-4C27-6BA417626E41' # 
cmds.ls(loc)[0] # Result: u'my_locator' # 

有了這些信息,我們現在知道,一個節點將始終具有相同的,不變的UUID其壽命的全部,不管是什麼命名空間它被移動(通過命名)到/從。

把所有這些組合起來,這裏是我們如何結合使用ls命令uuid

# Query the UUID of our locator 
cmds.ls(loc, uuid=True)[0] # Result: u'60446AC7-4398-E3CB-4C27-6BA417626E41' # 

# Retrieve the locator name string via UUID 
cmds.ls(u'60446AC7-4398-E3CB-4C27-6BA417626E41')[0] # Result: u'my_locator' #