【maya:python】最初に選択したメッシュにアサインされているマテリアルを転送
shamimatsu
三味松ブログ
法線の転送のために表示切替は非常によく行うのですが、既存のチェックボックスがある場所にたどり着くのが大変だったためpythonで作成しました。
以前の記事で書いたコードの一部を変更するだけでした。
maya2022のpython3で動くことを確認しました(2021/12/26)
法線が非表示ならオンに、法線が表示されていたらオフに、トグルになっています。
メッシュ選択した状態で実行してください。
デフォルトだと法線のタイプがフェースになっていますが、頂点タイプで確認したかったため変更するコードも書いています。
1# -*- coding: utf-8 -*-
2import maya.cmds as cmds
3
4sl_node = cmds.ls(sl=True)
5# 法線のタイプを頂点に変更
6cmds.setAttr(sl_node[0] + ".normalType", 2)
7
8if cmds.getAttr(sl_node[0] + ".displayNormal") == False:
9 cmds.setAttr(sl_node[0] + ".displayNormal", 1)
10elif cmds.getAttr(sl_node[0] + ".displayNormal") == True:
11 cmds.setAttr(sl_node[0] + ".displayNormal", 0)
実行するたびに法線を表示しつつサイズを切り替えられるスクリプトを作りました。
法線サイズはデフォルトで 0.400 と短めなので 10, 7, 5, 2, 非表示 でループするようにしました。
メッシュ選択した状態で実行してください。
maya2022でpython3になったためコードを修正しました。
1# -*- coding: utf-8 -*-
2import maya.cmds as cmds
3
4
5sl_node = cmds.ls(sl=True)
6
7# 法線のタイプを頂点に変更
8cmds.setAttr(sl_node[0] + ".normalType", 2)
9
10# 切り替え設定
11if cmds.getAttr(sl_node[0] + ".displayNormal") == False:
12 cmds.setAttr(sl_node[0] + ".displayNormal", 1)
13 cmds.setAttr(sl_node[0] + ".normalSize", 10)
14 print(end='法線サイズ 10')
15
16elif cmds.getAttr(sl_node[0] + ".normalSize") == 10:
17 cmds.setAttr(sl_node[0] + ".normalSize", 7)
18 print(end='法線サイズ 7')
19
20elif cmds.getAttr(sl_node[0] + ".normalSize") == 7:
21 cmds.setAttr(sl_node[0] + ".normalSize", 5)
22 print(end='法線サイズ 5')
23
24elif cmds.getAttr(sl_node[0] + ".normalSize") == 5:
25 cmds.setAttr(sl_node[0] + ".normalSize", 2)
26 print(end='法線サイズ 2')
27
28else:
29 cmds.setAttr(sl_node[0] + ".displayNormal", 0)
30 print(end='法線 非表示')
1# -*- coding: utf-8 -*-
2import maya.cmds as cmds
3
4sl_node = cmds.ls(sl=True)
5
6# 法線のタイプを頂点に変更
7cmds.setAttr(sl_node[0] + ".normalType", 2)
8
9# 切り替え設定
10if cmds.getAttr(sl_node[0] + ".displayNormal") == False:
11 cmds.setAttr(sl_node[0] + ".displayNormal", 1)
12 cmds.setAttr(sl_node[0] + ".normalSize", 10)
13 print '法線サイズ 10',
14
15elif cmds.getAttr(sl_node[0] + ".normalSize") == 10:
16 cmds.setAttr(sl_node[0] + ".normalSize", 7)
17 print '法線サイズ 7',
18
19elif cmds.getAttr(sl_node[0] + ".normalSize") == 7:
20 cmds.setAttr(sl_node[0] + ".normalSize", 5)
21 print '法線サイズ 5',
22
23elif cmds.getAttr(sl_node[0] + ".normalSize") == 5:
24 cmds.setAttr(sl_node[0] + ".normalSize", 2)
25 print '法線サイズ 2',
26
27else:
28 cmds.setAttr(sl_node[0] + ".displayNormal", 0)
29 print '法線 非表示',