解决此问题的另一种方法是跳过字符串命名的依赖关系,UUID
而是采用检索节点 via。请cmds.ls
与此处-uuid
找到的标志一起查看。
命名空间实际上只是附加到对象名称上的字符串名称前缀。只要命名空间存在,您就可以重命名对象以在命名空间中添加/删除它。例如:
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' #