Maya

【Maya:Python】法線の表示切り替え

shamimatsu

法線の転送のために表示切替は非常によく行うのですが、既存のチェックボックスがある場所にたどり着くのが大変だったためpythonで作成しました。
以前の記事で書いたコードの一部を変更するだけでした。

表示切り替え

maya2022のpython3で動くことを確認しました(2021/12/26)
法線が非表示ならオンに、法線が表示されていたらオフに、トグルになっています。
メッシュ選択した状態で実行してください。
デフォルトだと法線のタイプがフェースになっていますが、頂点タイプで確認したかったため変更するコードも書いています。

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

sl_node = cmds.ls(sl=True)
# 法線のタイプを頂点に変更
cmds.setAttr(sl_node[0] + ".normalType", 2)

if cmds.getAttr(sl_node[0] + ".displayNormal") == False:
    cmds.setAttr(sl_node[0] + ".displayNormal", 1)
elif cmds.getAttr(sl_node[0] + ".displayNormal") == True:
    cmds.setAttr(sl_node[0] + ".displayNormal", 0)

サイズを変更しながら切り替え

実行するたびに法線を表示しつつサイズを切り替えられるスクリプトを作りました。
法線サイズはデフォルトで 0.400 と短めなので 10, 7, 5, 2, 非表示 でループするようにしました。
メッシュ選択した状態で実行してください。

python3

maya2022でpython3になったためコードを修正しました。
printをステータスバーに表示するための関数(pm.displayInfo)を追加しています。
参考サイト:Maya print in status bar

# -*- coding: utf-8 -*-
import maya.cmds as cmds
import pymel.core as pm

sl_node = cmds.ls(sl=True)

# 法線のタイプを頂点に変更
cmds.setAttr(sl_node[0] + ".normalType", 2)

# 切り替え設定
if cmds.getAttr(sl_node[0] + ".displayNormal") == False:
    cmds.setAttr(sl_node[0] + ".displayNormal", 1)
    cmds.setAttr(sl_node[0] + ".normalSize", 10)
    pm.displayInfo('法線サイズ 10')
    
elif cmds.getAttr(sl_node[0] + ".normalSize") == 10:
    cmds.setAttr(sl_node[0] + ".normalSize", 7)
    pm.displayInfo('法線サイズ 7')
    
elif cmds.getAttr(sl_node[0] + ".normalSize") == 7:
    cmds.setAttr(sl_node[0] + ".normalSize", 5)
    pm.displayInfo('法線サイズ 5')
    
elif cmds.getAttr(sl_node[0] + ".normalSize") == 5:
    cmds.setAttr(sl_node[0] + ".normalSize", 2)
    pm.displayInfo('法線サイズ 2')
    
else:
    cmds.setAttr(sl_node[0] + ".displayNormal", 0)
    pm.displayInfo('法線 非表示')

python2.7

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

sl_node = cmds.ls(sl=True)

# 法線のタイプを頂点に変更
cmds.setAttr(sl_node[0] + ".normalType", 2)

# 切り替え設定
if cmds.getAttr(sl_node[0] + ".displayNormal") == False:
    cmds.setAttr(sl_node[0] + ".displayNormal", 1)
    cmds.setAttr(sl_node[0] + ".normalSize", 10)
    print '法線サイズ 10',
    
elif cmds.getAttr(sl_node[0] + ".normalSize") == 10:
    cmds.setAttr(sl_node[0] + ".normalSize", 7)
    print '法線サイズ 7',
    
elif cmds.getAttr(sl_node[0] + ".normalSize") == 7:
    cmds.setAttr(sl_node[0] + ".normalSize", 5)
    print '法線サイズ 5',
    
elif cmds.getAttr(sl_node[0] + ".normalSize") == 5:
    cmds.setAttr(sl_node[0] + ".normalSize", 2)
    print '法線サイズ 2',
    
else:
    cmds.setAttr(sl_node[0] + ".displayNormal", 0)
    print '法線 非表示',
ABOUT ME
shamimatsu
shamimatsu
3DCGデザイナー
ながらくゲーム業界で2D、3DCGデザイナーとして働いてきましたが、新しい業界に挑戦中です。 ブログのデザインをリニューアル中のため、見づらい箇所もあるかもしれませんが少しづつ修正していきます。
記事URLをコピーしました