Maya

【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, 非表示 でループするようにしました。
メッシュ選択した状態で実行してください。

python3

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='法線 非表示')

python2.7

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 '法線 非表示',
ABOUT ME
shamimatsu
shamimatsu
3DCGデザイナー
ながらくゲーム業界で2D、3DCGデザイナーとして働いてきましたが、新しい業界に挑戦中です。 ブログのデザインをリニューアル中のため、見づらい箇所もあるかもしれませんが少しづつ修正していきます。
記事URLをコピーしました