Mayaってごちゃごちゃやってるとたまに、マテリアルがアサインできなくなったり、裏面でもなく頂点カラーもないのにフェースが真っ黒になってしまったり、何かツールで編集しようとしてもエラーになってしまったり、色々オブジェクトの挙動がおかしくなるときがありますよね(よく起こるのにいい例が思い浮かびませんでしたが、とにかく色々)。
適当にキューブを作る→結合→キューブの部分削除 をして強制的にオブジェクトを綺麗にするのが手っ取り早い事が多く、今回はその一連の動作をスクリプト化してみました。
#導入方法
以下のソースコードをスクリプトエディタのPythonタブに貼り付け、中ボタンでシェルフフィールドにドラッグ&ドロップ。
import maya.cmds as cmds
def Main():
selectedObjects = cmds.ls(sl=True, tr=True)
targetMesh = []
for i in selectedObjects: #ポリゴンオブジェクトだけを抽出
shape = cmds.listRelatives(i, s=True, typ='mesh')
if shape:
targetMesh.append(i)
if len(targetMesh) == 0:
cmds.confirmDialog(t='エラー', m='ポリゴンオブジェクトを選択してください')
return
for i in targetMesh:
temp = cmds.polyCube()
afterMesh = cmds.polyUnite(temp, i, op=True) #キューブを作成し結合
cmds.delete(temp) #不要になったメッシュの削除
cmds.delete(afterMesh, ch=True) #ヒストリを削除
cmds.rename(i) #名前を元に戻す
Main()
#使い方
ポリゴンオブジェクトを選択してスクリプトを実行するだけです。
複数選択に対応していますが子に別のメッシュを持ってる場合は対応していません。