Maya

【Maya:Python】一番使われている頂点色で塗りつぶす

shamimatsu

maya2022でpython3になったためコードを修正しました。
このようなスクリプトは需要がないと思いますが、僕はたまに使うときがあるのと勉強もかねて作りました。
実際、四捨五入3つ置きにタプル化など応用が利きそうな技が学べました。
よく見かけるif __name__ == “__main__の意味も少し理解できました。

コード

メッシュを選択して実行してください。
カラーセットがない(頂点からが塗られていない)場合、エラーになります。

1# -*- coding: utf-8 -*-
2import maya.cmds as cmds
3import collections
4
5def main():
6    # コンポーネント選択だったらオブジェクト選択にする
7    if cmds.selectMode(q=1, component=1) == 1:
8        cmds.selectMode(object=1)
9
10    # メッシュ選択から頂点選択
11    meshnode = cmds.ls(sl=True)
12    first_sl = meshnode[0]
13    cmds.select(first_sl + '.vtx[*]')
14
15    # 頂点カラーを取得 四捨五入
16    vers = cmds.polyColorPerVertex(q=1, rgb=1)
17    new_vers = []
18
19    for ver in vers:
20        ver_round = round(ver, 2)
21        new_vers.append(ver_round)
22
23    # 3つ置きにタプル化
24    lst = zip(*[iter(new_vers)]*3)
25
26    # 使われている色数を取得 並び替え
27    c = collections.Counter(lst)
28    values_sorted = sorted(c.values(), reverse=True)
29    vercolor = values_sorted[0]
30
31    # もっとも使われている色
32    keys = [k for k, v in c.items() if v == vercolor]
33    print(u'もっとも使われている色',keys[0])
34
35    # 頂点カラーを塗る
36    cmds.polyColorPerVertex(rgb=keys[0])
37
38# これを書かないとインポート時に実行してしまいエラーが出る
39if __name__ == "__main__":
40    main()
ABOUT ME
shamimatsu
shamimatsu
3DCGデザイナー
ながらくゲーム業界で2D、3DCGデザイナーとして働いてきましたが、新しい業界に挑戦中です。 ブログのデザインをリニューアル中のため、見づらい箇所もあるかもしれませんが少しづつ修正していきます。
記事URLをコピーしました