TV前回は選択したモデルもしくは選択がなければシーン全体のモデルのポリゴン数をつらつらと表示するツールまで完成しました。今回はモデル名をポリゴン数の多い順でリスト表示するようにするのが目標です。やるか想像してみると、なんとなくパッと思いつきそうで思いつかない感じでしょうか...。リストの扱いは、実のところMELが苦手としているところなので、余りキレイに解決出来ません。Pythonならもっとキレイにプログラムできるのですが、まあ、色々工夫しながらMELでやってみましょう。ポリゴン数リストの順番を整えるMELには「sort」というコマンドがあります。実行すると渡した配列の中身が並び替えられます。以下を実行してみましょう。10」という順番になって結果が表示されます。ん、一応数字が気持よく整列してくれてますが、小さい順ですね。ポリゴン数の多い順が知りたいのですが、MELではこれしかないので仕方ありません。forループを実行する時に、順序を逆から実行していくことで、「大きい順」に中身を辿ることにしましょう。sortのルール数字でも文字列でもなんでも配列になっていればソートして順番を整えられます。文字列はアルファベット順とかでソートします。「polyA:500」「polyB:10」をソートすると「poly」までは差がありませんが、「A」と「B」の差でもって「A」の方が小さいということになります。文字列で「1000」と「50」をソートすると、まず「1」と「5」を比べます。「1」と「5」では「1」の方が小さいので「1000」が先に来てしまいます。文字列では「50」より「1000」が小さいと判定されるのです。数字の配列なら「50」が先に来ます。文字列の配列、数字の配列、どちらをsortするかで結果が異なりますので注意が必要です。いうわけで今回はポリゴン数を一旦intの配列にして、それをソートします。前回作ったスクリプトのforループ内のコードを修正して、ポリゴン数をint配列にまとめるようにしましょう。次のようなコードにしてみました。$nums;}getMeshList();実行すると以下の感じで、スクリプトエディタにポリゴン数がずらりと表示されます。モデルのリスト順にポリゴン数が表示されています。]というところがあります。変数自身のサイズを添え字にすることで、順々に$nums配列が増えていきます。これはしょっちゅう使用する方法です。MEL以外では見かけない気もします。これで$numsに三角ポリゴン数のリストが出来ました。ソートしてみましょう。$nums;」の行を次のスクリプトで置き換えてみましょう。$nums;実行すると、スクリプトエディタに数字が小さい順に表示されましたか?ポリゴン数リストを大きい順にするソートするとポリゴン数の少ない順になります。今回のツールはリダクションの補佐ツールなので、ポリゴン数の多いものからリスト表示されたほうが便利です。これは単にforループを逆順に行えば良いだけです。$nums;」をまた次のように変更してみましょう。"¥n");}どうですか?ポリゴン数の多い順に結果が表示されましたか?「size($nums)」は配列のサイズを返します。「$nums」の中身が「$nums[0]~$nums[9]」まであれば「10」を返します。「9」ではなく「10」を返します。「$nums」の最大要素は「$nums[9]」です。いうわけで、添え字に使う「$i」から1を引かないといけませんので注意が必要です。ポリゴン数リストとオブジェクト名のマッチングポリゴン数の多い順のリストが出せるようになりました。モデル名の配列を作り、それをどうにかソートした結果に合わせて順序を変えて...なんだかいろいろ考えるとややこしそうですね。いう時は余り複雑に考えないで、シンプルに行きましょう。単純な方法で考えれば「モデル名」と「ポリゴン数」を一つにまとめた文字列、例えば「pCube-12」という文字列を作り、リストにして、「$nums」のポリゴン数とくらべて同じ数字が入っているものを探せば良いわけです。同じポリゴン数のものが複数あったら?同ポリゴン数なので順序も同位ですから問題ありません。いうわけで新たに「$data」という配列を作って「モデル名+”-“+ポリゴン数」を記録しておきます。モデル名とポリゴン数はハイフンで区切ることにします。Mayaはオブジェクト名にハイフンが使えないので、区切り文字として丁度良いのです。スクリプトは以下のようになります。この関数は完成を迎えているのでstringの配列を返すようにしましょう。することで、別の関数からいつでもモデルのリストを取得できるようになります。該当のメッシュを探す。見つかったら値を空""にして、二重に見つからないようにしておく。$results;}getMeshList();ではスクリプトエディタに貼り付けて、実行してみましょう。実行するとこんな下の様な結果が表示されましたか?ポリゴン数の多い順モデルリストが出来ました!コード内でグルグルと何度も「$data」をチェックしていますので処理は重めです。本来ならもっと賢い方法で高速に処理できると良いのですが、それは費用対効果によります。頻繁に実行しないという感じなので問題にはなりません。気にしない、気にしない:Pもしこのツールを毎日、1分に1回は使うというのなら数秒の処理負荷が大きな問題になるので何か対処が必要でしょうけど、今回は大丈夫ですね。gmatch文字列の中に指定した文字が含まれているかチェックするのに「gmatch」を使用しています。便利だけどもちょっとわかりにくいかもしれないので「gmatch」コマンドについて説明します。このコマンドは、1つ目に指定した文字列内に、2つ目で指定した文字列が入っていれば1を返します。なければ0を返します。今回実行しているgmatch部分の変数の中身を書くとこんな感じです。終わる文字があるかどうかをチェックせよ、という事になります。「-415」だけにして「*」がないと、「-415という文字で始まって、終わる」文字あるかどうかをチェックせよ、となり0が返ってきてしまいます。初めのアスタリスクが重要です。「*415」にしてしまうと、「polyShape415」など自然と入っていしまった数字とマッチングして1を返してしまうのでダメです。おしりにもアスタリスクをつけて「*-415*」にすると、「polyShape-4158」の様に「-415」のあとに数字があった場合にマッチングして1を返してしまうので、これもダメです。まとめこれでツールの基礎はほとんど出来ました!...なんか理論ばかりで記事の見た目が退屈ですけど。次回はGUIを用意してリストを表示してみましょう。ツールとして完成度が一気に上るところですのでお楽しみに。読んで触ってよくわかる!Mayaを使いこなす為のAtoZ第39回:ポリゴン数をリストアップしよう!(3/4)GUIにリストを表示しよう2013.03.13...なんとなく記事に華やかさがないですが、着実にツールは出来てきております。30日間無償で体験できます。30日間無償で体験できます。製品のご購入に関してご連絡を希望される場合は、こちらからお問い合わせください。