所以,首先我选择一条边并转换为UV点:
cmds.select(name+'.e[0:4]', add=True)
cmds.select(cmds.polyListComponentConversion(fe=True, tuv=True), add=False)
selection = cmds.ls(sl=True)
print(selection)
现在当我打印出来时,我得到了:
[u'pSphere1.map[0:1]', u'pSphere1.map[4]', u'pSphere1.map[6]', u'pSphere1.map[8]', u'pSphere1.map[10]']
现在有我的问题。列表中有5个元素,但是,选择了6个点,因为第一个元素是范围表示法。
当我迭代这个列表时,如:
p = 0
cmds.select( clear=True )
for pUV in selection:
cmds.select(pUV, add=False)
cmds.polyEditUV(uValue=vList[p][0], vValue=vList[p][1], r=True)
p = p+1
或查询如:
var = cmds.polyEditUV( query=True )
然后这不起作用,因为第一个对象不是选择一个UV而是两个,因为字符串pSphere1.map[0:1]
定义了一个范围。我需要的是将范围分成单个UV或能够访问此范围的子元素,但是使用ls
只返回带有范围表示法的字符串。
我可以解析字符串,查找冒号然后在冒号之前和之后提取值,重新解释为整数并使用它进行迭代,但我确信必须有一个更简单的方法。
答案 0 :(得分:0)
您可以使用ls
和flatten
选项将列表缩小到没有范围的隔离条目:
compressed = cmds.ls('pCube1.vtx[*]')
print compressed
# [u'pCube1.vtx[0:7]']
expanded = cmds.ls('pCube1.vtx[*]', flatten=True)
print expanded
# [u'pCube1.vtx[0]', u'pCube1.vtx[1]', u'pCube1.vtx[2]', u'pCube1.vtx[3]', u'pCube1.vtx[4]', u'pCube1.vtx[5]', u'pCube1.vtx[6]', u'pCube1.vtx[7]']
另一个选项是filterExpand
命令,它使用一些有些神秘的代码来选择组件:
print cmds.filterExpand(compressed, sm = 31)
# [u'pCube1.vtx[0]', u'pCube1.vtx[1]', u'pCube1.vtx[2]', u'pCube1.vtx[3]', u'pCube1.vtx[4]', u'pCube1.vtx[5]', u'pCube1.vtx[6]', u'pCube1.vtx[7]']
filterExpand
对于混合选择特别有用,因为提供的掩码值(请参阅代码链接)将混合选择限制为一次只有一种组件类型。