cmds.polyListComponentConversion
работает как фильтр при выборе компонентов. Если вы «конвертируете» из типа в себя, вы фильтруете его. Добавьте type = float3
в команду ls, чтобы игнорировать целые объекты, и вы получите что-то вроде этого:
import maya.cmds as cmds
from collections import namedtuple
selectiontype = namedtuple('selectiontype', 'faces verts edges')
def get_selected_components():
sel = cmds.ls(sl=True, type = 'float3') # this is obscure maya way to get only components
faces = cmds.polyListComponentConversion(sel, ff=True, tf =True)
verts = cmds.polyListComponentConversion(sel, fv=True, tv =True)
edges = cmds.polyListComponentConversion(sel, fe=True, te =True)
return selectiontype (faces, verts, edges)
get_selected_components()
# Result: selectiontype(faces=[], verts=[u'pSphere1.vtx[0:381]', u'pTorus1.vtx[112]', u'pTorus1.vtx[131:132]', u'pTorus1.vtx[151:154]', u'pTorus1.vtx[171:174]', u'pTorus1.vtx[191:194]', u'pTorus1.vtx[211:214]', u'pTorus1.vtx[231:234]', u'pTorus1.vtx[251:254]', u'pTorus1.vtx[272:274]'], edges=[]) #
Вместо цифр в коде, который использует это, просто используйте ванильный python if-check:
selected = get_selected_components()
if selected.faces:
# do something
if selected.verts:
# something else
вы, вероятно, не хотите делать if 1:.... if 2:....
, потому что выбор может содержать смесь вещей; пользователю не сложно выбрать сразу все три типа