解決這個問題的另一種方法是跳過字符串命名的依賴關係,並通過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' #
你真的不能忽視的命名空間,但你可以加載一個命名空間爲您的代碼與命名空間今後使用 - 設置「namespaceName」 – joojaa 2013-03-02 22:44:28