2013-03-09 1 views
1

Мне нужно в основном запросы и выполнять несколько задач на основе текущего выбора с PYMEL, например:Как получить выбранный тип объекта

from pymel.core import *  
s = selected() 
if (s.selType() == 'poly'): 
    #do something  
if (s.selType() == 'surface'): 
    #do something  
if (s.selType() == 'cv'): 
    #do something  
if (s.selType() == 'vertex'): 
    #do something  
if (s.selType() == 'face'):  
    #do something 
if (s.selType() == 'edge'): 
    #do something 
if (s.selType() == 'curve'): 
    #do something 

Я знаю, что selType() не является фактической функцией pymel, я Также хотелось бы использовать команды pimels api, не используя стандартные команды mel, если это имеет смысл.

+2

Это поможет, если вы зададите вопрос. – User

+0

Мое название довольно самодостаточное вместе с описанием, мне нужно выяснить «КАК получить выбранный тип объекта» –

+0

Зачем вам связывать многие команды if, не лучше ли использовать словарь с функциями? – joojaa

ответ

1

PyMEL преобразует список выбора для вас узлов (в отличие от MEL, где все просто тип данных.) По крайней мере, это верно с ls и связанных с ними команд (selected только ls(sl=True).)

Все в том, что список будет подклассом PyNode, поэтому вы можете полагаться на них, имея способ nodeType.

Оттуда легко обрабатывать каждый выбор в зависимости от его типа.


компоненты наследуют от pymel.core.Component, и есть один класс для каждого типа компонента; MeshVertex например.

Вы можете использовать isinstance(obj, type_sequence) отфильтровать компоненты:

filter(lambda x: isinstance(x, (pm.MeshVertex, pm.MeshEdge, pm.MeshFace)), pm.selected()) 

Вы можете найти их в разделе в документации PyMEL general.

+0

Да, но я не мог заставить это работать над компонентами, как я могу узнать, что из выбранных компонентов? –

+0

См. Мое редактирование. .. – Skurmedel

1

Вы можете использовать собственную команду filterApend maya для сортировки каждого в соответствующие типы. Это существенно просеивает ваш выбор и составляет список объектов, которые соответствуют типу, который вы ищете

Например:

import maya.cmds as cmds 

selection = cmds.ls(sl=1) # Lists the current selection and 
          # stores it in the selection variable 

polyFaces = cmds.filterExpand(sm=34) # sm (selectionMask) = 34 looks for polygon faces. 
            # Store the result in polyFaces variable. 

if (polyFaces != None): # If there was any amount of polygon faces. 
    for i in polyFaces: # Go through each of them. 
     print(i)   # And print them out. 

Более подробную информацию о команде и фильтры, соответствующие INT-значение находится в справочной системе python или mel.