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 関数ではないことを知っています。それが理にかなっていれば、標準の mel コマンドを使用するのではなく、pymels api コマンドも利用したいと思います。

4

2 に答える 2

1

PyMEL は選択リストをノードに変換します (すべてが単純なデータ型である MEL とは異なりlsますselected) ls(sl=True)

そのリスト内のすべてが のサブクラスになるPyNodeため、それらがメソッドを持っていることに依存できますnodeType

そこから、そのタイプに基づいて各選択を処理するのは簡単です。


コンポーネントは から継承しpymel.core.Component、コンポーネント タイプごとに 1 つのクラスがあります。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 に答える