Maya

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

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

コード

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

# -*- coding: utf-8 -*-
import maya.cmds as cmds
import collections

def main():
    # コンポーネント選択だったらオブジェクト選択にする
    if cmds.selectMode(q=1, component=1) == 1:
        cmds.selectMode(object=1)

    # メッシュ選択から頂点選択
    meshnode = cmds.ls(sl=True)
    first_sl = meshnode[0]
    cmds.select(first_sl + '.vtx[*]')

    # 頂点カラーを取得 四捨五入
    vers = cmds.polyColorPerVertex(q=1, rgb=1)
    new_vers = []

    for ver in vers:
        ver_round = round(ver, 2)
        new_vers.append(ver_round)

    # 3つ置きにタプル化
    lst = zip(*[iter(new_vers)]*3)

    # 使われている色数を取得 並び替え
    c = collections.Counter(lst)
    values_sorted = sorted(c.values(), reverse=True)
    vercolor = values_sorted[0]

    # もっとも使われている色
    keys = [k for k, v in c.items() if v == vercolor]
    print u'もっとも使われている色', keys[0]

    # 頂点カラーを塗る
    cmds.polyColorPerVertex(rgb=keys[0])

# これを書かないとインポート時に実行してしまいエラーが出る
if __name__ == "__main__":
    main()