読者です 読者をやめる 読者になる 読者になる

【Maya】pythonで指定されたフェースの頂点数を取得する

ポリゴンの情報を取得するpolyInfoってメソッドがありまして。
適当なフェースを選択してこいつを実行すると以下のような結果が得られます。

import maya.cmds as cmds
cmds.polyInfo(fv=1)
# 結果: [u'FACE      7:      8     12     13      9 \n'] # 

はい。

どれが何なのかよくわかりません!
とりあえずリファレンスを見てみます。
polyInfo command

なるほどわからん(困惑)

公式がまるで参考にならないので適当にぐぐってみたら以下のようなページが見つかりました。
MEL How-To #55

string $ftv[] = `polyInfo -faceToVertex m26_section.f[278]`;
// Result: FACE 278: 295 12 14 296 //
To extract the values in order to use them, use the tokenize command on the string. In the example below the string is split by stripping its space (" "), colon (":"), and carriage-return/newline ("\n\r") characters. This results in six tokens - the first of which is the string "FACE", the second being the index of the face, and the remaining four the indices for the vertices.

ざっくり言うと、一番上の例で言うところの「7」がフェースのインデックス番号で、その後に続くやつらが頂点のインデックス番号のようです。
つまり、この結果から4つの頂点で構成されたフェースであることが分かるわけです。
が、この結果から頂点数を得ようとすると、スペースとかでsplitしてその配列のサイズから2引くと頂点数になるみたいな気持ち悪いコードになりかねません。

他にやりようがないのか調べてみると、polyListComponentConversionとfilterExpandの組み合わせによって頂点の配列が得られることがわかりました。
polyListComponentConversion command
filterExpand command

というわけでコードと結果はこんな具合に。

import maya.cmds as cmds
len(cmds.filterExpand(cmds.polyListComponentConversion(ff=1,tv=1),sm=31))
# 結果: 4 #

polyListComponentConversionの引数は今回フェースを起点としているためfromFaceを示すffを、そして頂点の結果を得たいのでtoVertexを示すtvをtrueとしてます。
また、filterExpandの引数はポリゴン頂点を示す31を指定してます。
これによって頂点情報の配列が得られるので、あとはlenを使えば目的達成です。

mayaのリファレンスいまいちでpythonツール実装つらみがある。
みんなどうしてるんや…調べ方がアレなのか…。

スポンサーリンク