【问题标题】:Selecting Faces in a list, maya python在列表中选择面,maya python
【发布时间】:2015-09-08 01:52:26
【问题描述】:

我正在编写一个脚本,该脚本将在一个对象上找到 tri's 和 nGon's 并选择它们。但是当我将面孔存储在列表中并尝试选择它们时,我得到了这个结果。

[u'pCube1.f[2]']

我如何改变它以使其成为

[pCube1.f[2]]

【问题讨论】:

  • 它将它们存储为 unicode 字符串。您需要提供更多信息(例如生成列表的代码),以便我们为您提供更多帮助。
  • 正确,在 maya cmds python api 中,命令的输入和输出通常是一个字符串,表示相关对象的(部分)dag 路径。如果您想要更面向对象的方法,您可以查看 pymel 之类的内容。

标签: python maya


【解决方案1】:

大多数时候,maya 将命令的结果作为字符串列表返回。它们是 unicode 字符串 (u'xxx') 但没关系 - Maya 可以与常规字符串互换接受这些字符串:您可以放心地忽略字符串的 Unicode 特性,并且无需费心制作自己的字符串成 Unicode。 Maya 将交替处理 ['xxx'][u'xxx']

选择面孔支持几种形式:

 #lists
 my_faces = ['pCube1.f[1]', 'pCube1.f[2]']
 cmds.select(my_faces)

 # tuples
 more_faces = ('pCube1.f[3]', 'pCube1.f[4]')
 cmds.select(more_faces, add=True)

 # direct selection:
 cmds.select('pCube1.f[5]', 'pCube1.f[6]')

要获取对象中的所有面,您可以使用快捷方式

 cmds.select('pCube1.f[*]')

或一个范围:

 cmds.select('pCube1.f[2:4]') 

Maya 有时也会返回压缩名称,例如 pCube1.f[2:4]。您可以使用 filterExpand 命令将它们拆分为单独的项目:

 print cmds.filterExpand('pCube1.f[1:5]', sm=34)
 # [u'pCube1.f[1]', u'pCube1.f[2]', u'pCube1.f[3]', u'pCube1.f[4]', u'pCube1.f[5]']

('sm = 34' 是玛雅语中的“仅限面孔”)。

需要注意的最重要的事情是返回 None 的命令,您会在其中看到一个空列表。如果您遇到像 NoneType is not iterable 这样的错误,可能是 Maya 返回 None 而不是 []。您通常可以通过使用“或”来摆脱这种情况:

 item = cmds.ls("your_name_here") or []

返回并清空列表。

【讨论】:

  • 如何反转当前的人脸选择?
  • cmds.select("myobject.f[*]", tgl=True)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
相关资源
最近更新 更多