解决这个问题的另一种方法是跳过字符串命名的依赖关系,并通过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