liquidjumper MAYA,MEL,Python MAYAスクリプト[ls]でまとまって出力されたコンポーネントを展開する方法

MAYAスクリプト[ls]でまとまって出力されたコンポーネントを展開する方法

sl_mask_topimage
 
頂点を選択してlsコマンドで受け取った時にvtx[0:3]のように各頂点番号で受け取れない問題があります。

このようなときに各頂点を受け取れるように展開することが出来るコマンドが[filterExpand]です。

filterExpandコマンド自体は展開以外にフィルタをかけることもできます。

今回は展開を中心にフィルタの使い方も少し紹介したいと思います。

コマンドもMELとPython両方の書き方を記したいと思います。

filterExpandコマンド

コマンドの使い方は

filterExpandコマンドと頂点やエッジ、UVなどに対応したセレクションマスク番号を組み合わせて使います。

セレクションマスク番号はコンポーネントに基づいていて

ポリゴン頂点なら31
ポリゴンエッジは32
ポリゴン頂点フェースは70

の様に番号が対応しています。

この番号とfilterExpand コマンドを組み合わせます。

例えばMELでポリゴンの頂点を取得して、まとまって出力された値を展開する場合は、 
セレクションマスク番号 31 を使って

filterExpand -selectionMask 31

と記述します。

ポリゴン頂点を展開

 

ポリキューブの頂点を選択します。

 

Mel:

string $vtxName[] = `ls -sl `;
 
// Result: pCube1.vtx[0:7] //
 


Python:

import maya.cmds as cmds

vtxName = cmds.ls(sl=True)
 
[u’pCube1.vtx[0:7]’]
 
 
 
pCube1.vtx[0:7]となって0番から7番まで取得できましたが、
[0:7]とまとまってます。
これを展開したいと思います。

展開

Mel:

string $vtxName[] = `ls -sl `;
string $vtxNo[] = `filterExpand -selectionMask 31 $vtxName`;

print($vtxNo);
 
pCube1.vtx[0]
pCube1.vtx[1]
pCube1.vtx[2]
pCube1.vtx[3]
pCube1.vtx[4]
pCube1.vtx[5]
pCube1.vtx[6]
pCube1.vtx[7]
 
Python:
import maya.cmds as cmds

vtxName = cmds.ls(sl=True)
vtxNo = cmds.filterExpand(vtxName , selectionMask= 31)

print(vtxNo)
 
 
[u’pCube1.vtx[0]’, u’pCube1.vtx[1]’, u’pCube1.vtx[2]’, u’pCube1.vtx[3]’, u’pCube1.vtx[4]’, u’pCube1.vtx[5]’, u’pCube1.vtx[6]’, u’pCube1.vtx[7]’]
 
 
filterExpandコマンドにセレクションマスクの31番[selectionMask 31]を使って展開しました。
31番はポリゴン頂点の番号です。
 
[0:7]と纏まっていたのが
pCube1.vtx[0]
pCube1.vtx[1]
pCube1.vtx[2]
…..
 
と展開されました。
 
 
 

ポリゴン頂点フェースを展開

 
今度はポリゴン頂点フェースを展開してみます。
 

ポリゴン頂点を選択します。

 
 
Mel:
string $vtxName[] = `ls -sl `;
string $vtxface[] = `polyListComponentConversion -tvf $vtxName`;

print($vtxface);
 
// Result: pCube1.vtxFace[4][1:2] pCube1.vtxFace[4][5] //

Python:
import maya.cmds as cmds

vtxName = cmds.ls(sl=True)
vtxface = cmds.polyListComponentConversion(vtxName, tvf=True)

print(vtxface)
 
 
[u’pCube1.vtxFace[4][1:2]’, u’pCube1.vtxFace[4][5]’]
 

[polyListComponentConversion -tvf]でポリゴン頂点フェースを取得しました。

結果は

pCube1.vtxFace[4][1:2]
pCube1.vtxFace[4][5]

と纏まって返されました。

これも展開します。

展開

 
Mel:
string $vtxName[] = `ls -sl `;
string $vtxface[] = `polyListComponentConversion -tvf $vtxName`;
string $vtxfaceNo[] = `filterExpand-selectionMask 70 $vtxface`;

print($vtxfaceNo);
 
// Result: pCube1.vtxFace[4][1] pCube1.vtxFace[4][2] pCube1.vtxFace[4][5] //
 
Python:
import maya.cmds as cmds

vtxName = cmds.ls(sl=True)
vtxface = cmds.polyListComponentConversion(vtxName, tvf=True)
vtxfaceNo = cmds.filterExpand(vtxface selectionMask = 70 )

print(vtxfaceNo)
 
[u’pCube1.vtxFace[4][1]’, u’pCube1.vtxFace[4][2]’, u’pCube1.vtxFace[4][5]’]
 
 
[filterExpand  -selectionMask 70]

ポリゴン頂点フェースのセレクションマスク 70番を使って展開します。

結果は

pCube1.vtxFace[4][1]
pCube1.vtxFace[4][2]

pCube1.vtxFace[4][5]

と綺麗に展開されました。

 
 

セレクションマスクでフィルターする

 
頂点とエッジ両方を選択しました。
 
 
複数のコンポーネントが選択された状態で指定した情報のみを取得します。
 
 
 
vtxName = cmds.ls(sl=True)
vtxNo = cmds.filterExpand(vtxName , selectionMask= 31)
print(vtxNo)
 
[u’pCube1.vtx[4]’]
 
頂点のみが返されました。
 
 
 
vtxName = cmds.ls(sl=True)
vtxNo = cmds.filterExpand(vtxName , selectionMask= 32)

print(vtxNo)
 
[u’pCube1.e[2]’, u’pCube1.e[6]’, u’pCube1.e[8]’]
 
エッジのみが返されました。
 
 
この様に複数のタイプのコンポーネントが選択された状態から
特定のコンポーネントのみを取得したい場合にフィルターをかけることが出来ます。
 
 

セレクションマスク一覧

 
filterExpandのセレクションマスクは他にも多数あります。
ハンドル0
Nurbs カーブ9
Nurbs サーフェス10
Nurbs カーブ オンサーフェス11
ポリゴン12
ロケータ XYZ22
方向ロケータ23
ロケータ UV24
Control Vertex (CV)28
エディット ポイント30
ポリゴン頂点31
ポリゴンエッジ32
ポリゴン フェース34
ポリゴン UV35
サブディビジョン メッシュ ポイント36
サブディビジョン メッシュ エッジ37
サブディビジョン メッシュ フェース38
カーブ パラメータ ポイント39
カーブ ノット40
サーフェス パラメータ ポイント41
サーフェス ノット42
サーフェス範囲43
トリム サーフェス エッジ44
サーフェス アイソパラム45
ラティス ポイント46
パーティクル47
スケール ピボット49
回転ピボット50
セレクション ハンドル51
サブディビジョン サーフェス68
ポリゴン頂点フェース70
NURBS サーフェスのフェース72
サブディビジョン メッシュ UV73
 




Twitter Facebook Pocket LINE はてブ

おすすめの関連記事


あわせてよく読まれている記事