【Maya:Python】UVセットをコピー
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()