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