Python&Maya:命名空间
我一直在google上搜索如何处理Maya中的命名空间,所有结果都是关于如何删除它们。我不想删除它们。Python&Maya:命名空间
我引用我的角色到场景中,我需要在一个特定的定位运行脚本,但他们都有命名空间由于被引用
例如:shldr = cmds.xform('L_shldrFK_match_LOC', ws = True, t = True, q = True)
这会在worldspace中获取locator的翻译值,这正是我想要的。但由于命名空间的原因,它无法找到定位器。
如何让它忽略代码中的命名空间,但将它们保留在maya中?
另一件好事就是让代码识别是否没有命名空间(例如场景未被引用)。
时,即时通讯编码类似的东西我一般使用在命名空间是像这样的星号。
shldr = cmds.xform('*:L_shldrFK_match_LOC', ws = True, t = True, q = True)
这取决于你是否将不得不在其他命名空间名称相同场景中的其他事情,但因为那么它将无法工作
我们需要的所有命名空间的列表,找到正确的:
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)
只有在场景中只有一个字符时才有效。
解决这个问题的另一种方法是跳过字符串命名的依赖关系,并通过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