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

4

2 回答 2

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())

您可以general在 PyMEL 文档的部分下找到它们。

于 2013-03-12T18:25:36.593 回答
1

您可以使用 Maya 原生 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 命令参考。

于 2014-08-23T22:08:55.483 回答