Майя Python проверить, есть ли у пользователя лица или объекты, выбранные - PullRequest
0 голосов
/ 10 мая 2018

Я хочу сделать простой тест и подтвердить, что у пользователя есть лица, вершины или выбранный объект.И верните число 0 для граней, 1 для вершин и 3, если объекты выделены.

Этот фрагмент кода, по-видимому, не предоставляет информацию, которую я мог бы легко проверить

import maya.cmds as cmds
selection = cmds.ls(sl=True)[0]
print type(selection)
print selection

Что я 'просто пытаюсь добиться:

if selection == 0:
    do...
elif selection == 1
    do...
elif selection == 2:
    do...

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

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:...., потому что выбор может содержать смесь вещей; пользователю не сложно выбрать сразу все три типа

0 голосов
/ 10 мая 2018
if '.f[' in selection:
    do...
elif '.e[' in selection
    do...
elif '.vtx[' in selection:
    do...
elif '.' not in selection:
    do...
...