Python&;Maya:名称空间

Python&;Maya:名称空间,python,maya,Python,Maya,我一直在谷歌上搜索如何在Maya中处理名称空间,所有的结果都是关于如何删除它们。我不想移除它们 我将我的角色引用到场景中,我需要在特定的定位器上运行脚本,但由于在中被引用,它们都有名称空间 例如:shldr=cmds.xform('L\u shldrFK\u match\u LOC',ws=True,t=True,q=True) 这将得到世界空间中定位器的平移值,这就是我想要的。但是由于名称空间的原因,它将无法找到定位器 如何使其忽略代码中的名称空间,但将其保留在maya中 另一件很好的事情是让

我一直在谷歌上搜索如何在Maya中处理名称空间,所有的结果都是关于如何删除它们。我不想移除它们

我将我的角色引用到场景中,我需要在特定的定位器上运行脚本,但由于在中被引用,它们都有名称空间

例如:
shldr=cmds.xform('L\u shldrFK\u match\u LOC',ws=True,t=True,q=True)

这将得到世界空间中定位器的平移值,这就是我想要的。但是由于名称空间的原因,它将无法找到定位器

如何使其忽略代码中的名称空间,但将其保留在maya中


另一件很好的事情是让代码识别是否没有名称空间(例如场景未在中引用)。

您可以使用
cmds.namespaceInfo

此命令可以列出所有可用的名称空间 及其包含的对象


阅读此处的更多信息:

您可以使用
cmds.namespaceInfo

此命令可以列出所有可用的名称空间 及其包含的对象


阅读这里的更多信息:

当我编写类似的代码时,我通常在名称空间类似的地方使用asterix

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

这取决于场景中是否会有其他名称相同的名称空间下的其他内容,因为这样它就不起作用了

当我编写类似的代码时,我通常在名称空间类似的地方使用asterix

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")
您可以使用这些信息,但忽略名称空间并不是很好,因为引用的主要功能是让环境/角色/道具资源与场景中的最后一次更新相乘…所以

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")
您可以使用这些信息,但忽略名称空间并不是很好,因为引用的主要功能是让环境/角色/道具资源与场景中的最后一次更新相乘…所以

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

仅当场景中只有一个角色时才有效

另一种方法是跳过字符串命名的依赖关系,改为通过
UUID
检索节点。请参阅
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' # 

另一种方法是跳过字符串命名的依赖关系,改为通过
UUID
检索节点。请参阅
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' # 

您不能真正忽略名称空间,但可以加载一个名称空间,以便代码今后与namespace-set“namespaceName”一起使用。您不能真正忽略名称空间,但可以加载一个名称空间,以便代码今后与namespace-set“namespaceName”一起使用