Maya,Python,如何根据顶点选择获取对象的名称?

时间:2015-03-10 04:50:51

标签: python list indexing maya vertices

我得到的代码就像这样工作,直到我意识到顶点索引会改变超过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 [整数]'

来破解这部分

我可能会对此完全错误,并且可能有一种简单的方法可以做到这一点。

由于

3 个答案:

答案 0 :(得分:4)

您可以使用-o标志从任何有效的选择字符串中获取对象:

cmds.ls("pCube1.vtx[0]", o=True)
# pCubeShape1

请注意,这将是形状,而不是变形 - 玛雅是迂腐的,但它是正确的。转换将是

cmds.listRelatives(cmds.ls("pCube1.vtx[0]", o=True), p=True)

您可能还会发现使用partition分割组件很有帮助:

object, _, component = "pCube1.vtx[0]".partition(".")

其中_是python俚语'忽略我'。

答案 1 :(得分:2)

如果很容易从Maya获取对象,那会不会很棒?根据经验,我知道它可能令人沮丧,因为MEL / maya.cmds没有使用面向对象的方法。

无论如何,您应该经常参考documentation以获取有关您可以使用的各种string方法的更多信息。真的一直派上用场

要回答您的问题,您可以使用.split.find,无论您喜欢哪种方式。

print selPoints[0].split('.vtx')[0]
print selPoints[0][0:selPoints[0].find('.vtx')]

split方法返回由分隔符字符串'.vtx'创建的字符串列表。然后,从该列表中取出第一个元素将始终是对象名称。

find方法返回子字符串'.vtx'的索引,因此第二个示例只使用切片语法返回正确的字符串。

答案 2 :(得分:0)

仅适用于东西,使用香草Maya命令:

  • ls所述:
cm.ls("pCube1.vtx[0]", o=1)  # will return shape pCubeShape1
  • 带有plugNode(与plugAttr相反):
cm.plugNode("pCube1.vtx[0]")  # will return transform pCube1