如何获取所选对象类型

时间:2013-03-09 11:47:34

标签: python 3d maya mel pymel

我需要基本上根据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函数,我也想利用pymels api命令,如果有意义的话,不要使用标准的mel命令。

2 个答案:

答案 0 :(得分:1)

PyMEL会将您的选择列表转换为节点(与MEL不同,其中一切都是简单的数据类型。)至少对于ls和相关命令(selected只是{{1} }}。)

该列表中的所有内容都是ls(sl=True)的子类,因此您可以依赖方法PyNode

从那里,可以很容易地根据其类型处理每个选择。


组件继承自nodeType,每个组件类型都有一个类;例如pymel.core.Component

您可以使用MeshVertex过滤掉组件:

isinstance(obj, type_sequence)

您可以在PyMEL文档中的filter(lambda x: isinstance(x, (pm.MeshVertex, pm.MeshEdge, pm.MeshFace)), pm.selected()) 部分找到它们。

答案 1 :(得分:1)

您可以使用maya native filterExpand命令将每个类别分类为各自的类型。 它基本上会筛选您的选择,并列出与您正在寻找的类型相对应的对象

例如:

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-value对应的过滤器在python或mel命令参考中。