【Maya:Python】マテリアル全選択リストから指定名を除外する
shamimatsu
三味松ブログ
maya2022でpython3になったためコードを修正しました。
このようなスクリプトは需要がないと思いますが、僕はたまに使うときがあるのと勉強もかねて作りました。
実際、四捨五入や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()