【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, 非表示 でループするようにしました。
メッシュ選択した状態で実行してください。
maya2022でpython3になったためコードを修正しました。
# -*- 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(end='法線サイズ 10')
elif cmds.getAttr(sl_node[0] + ".normalSize") == 10:
cmds.setAttr(sl_node[0] + ".normalSize", 7)
print(end='法線サイズ 7')
elif cmds.getAttr(sl_node[0] + ".normalSize") == 7:
cmds.setAttr(sl_node[0] + ".normalSize", 5)
print(end='法線サイズ 5')
elif cmds.getAttr(sl_node[0] + ".normalSize") == 5:
cmds.setAttr(sl_node[0] + ".normalSize", 2)
print(end='法線サイズ 2')
else:
cmds.setAttr(sl_node[0] + ".displayNormal", 0)
print(end='法線 非表示')
# -*- 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 '法線 非表示',