Maya,Python,如何根据顶点选择获取对象的名称?
Maya, Python, How do i get the name of an object based on vertex selection?
我的代码是这样工作的,直到我意识到顶点索引对于超过 100 个顶点的几何体发生了变化...
我以为我可以拆分字符串,一切都会很漂亮
import maya.cmds as mc
selPoints = mc.ls(sl = True) # list of names of selected vertices
objName = (str(selPoints[0]))[:-9]
print selPoints
print objName
这是它返回的内容:
[u'pCylinder25.vtx[4]', u'pCylinder25.vtx[24]']
pCylinder
我正在尝试用'.vtx[integer]'
破解部分
我可能完全错了,可能有一个非常简单的方法来做到这一点。
谢谢
如果能很容易地从 Maya 中获取对象,那不是很棒吗?根据经验,我知道这可能会令人沮丧,因为 MEL/maya.cmds 不使用面向对象的方法。
无论如何,您应该经常参考 documentation 以获取有关您可以使用的各种 string
方法的更多信息。真的派上用场一直!
要回答您的问题,您可以使用 .split
或 .find
,随您喜欢。
print selPoints[0].split('.vtx')[0]
print selPoints[0][0:selPoints[0].find('.vtx')]
split
方法 return 是一个由分隔符字符串 '.vtx'
创建的字符串列表。然后,从该列表中取出第一个元素将始终是对象名称。
find
方法return是子字符串'.vtx'
的索引,所以第二个例子只是简单地使用切片语法来return正确的字符串。
您可以使用 -o 标志从任何有效的选择字符串中获取对象:
cmds.ls("pCube1.vtx[0]", o=True)
# pCubeShape1
请注意,这将是形状,而不是变换——这是 Maya 的迂腐,但它是正确的。转换将是
cmds.listRelatives(cmds.ls("pCube1.vtx[0]", o=True), p=True)
您可能还会发现使用 partition
:
拆分组件很有帮助
object, _, component = "pCube1.vtx[0]".partition(".")
其中 _
是 python 'ignore me' 的俚语。
只是为了东西,使用香草玛雅命令:
- 如
ls
所述:
cm.ls("pCube1.vtx[0]", o=1) # will return shape pCubeShape1
- 与
plugNode
(对plugAttr
):
cm.plugNode("pCube1.vtx[0]") # will return transform pCube1
我的代码是这样工作的,直到我意识到顶点索引对于超过 100 个顶点的几何体发生了变化...
我以为我可以拆分字符串,一切都会很漂亮
import maya.cmds as mc
selPoints = mc.ls(sl = True) # list of names of selected vertices
objName = (str(selPoints[0]))[:-9]
print selPoints
print objName
这是它返回的内容:
[u'pCylinder25.vtx[4]', u'pCylinder25.vtx[24]']
pCylinder
我正在尝试用'.vtx[integer]'
破解部分我可能完全错了,可能有一个非常简单的方法来做到这一点。
谢谢
如果能很容易地从 Maya 中获取对象,那不是很棒吗?根据经验,我知道这可能会令人沮丧,因为 MEL/maya.cmds 不使用面向对象的方法。
无论如何,您应该经常参考 documentation 以获取有关您可以使用的各种 string
方法的更多信息。真的派上用场一直!
要回答您的问题,您可以使用 .split
或 .find
,随您喜欢。
print selPoints[0].split('.vtx')[0]
print selPoints[0][0:selPoints[0].find('.vtx')]
split
方法 return 是一个由分隔符字符串 '.vtx'
创建的字符串列表。然后,从该列表中取出第一个元素将始终是对象名称。
find
方法return是子字符串'.vtx'
的索引,所以第二个例子只是简单地使用切片语法来return正确的字符串。
您可以使用 -o 标志从任何有效的选择字符串中获取对象:
cmds.ls("pCube1.vtx[0]", o=True)
# pCubeShape1
请注意,这将是形状,而不是变换——这是 Maya 的迂腐,但它是正确的。转换将是
cmds.listRelatives(cmds.ls("pCube1.vtx[0]", o=True), p=True)
您可能还会发现使用 partition
:
object, _, component = "pCube1.vtx[0]".partition(".")
其中 _
是 python 'ignore me' 的俚语。
只是为了东西,使用香草玛雅命令:
- 如
ls
所述:
cm.ls("pCube1.vtx[0]", o=1) # will return shape pCubeShape1
- 与
plugNode
(对plugAttr
):
cm.plugNode("pCube1.vtx[0]") # will return transform pCube1