MayaScripts_CameraRemover:削除できないカメラを除去
Mayaにて新規シーンを作成すると、大体以下のカメラが最初からシーンに含まれていると思います。
- persp
- top
- front
- side
んで、仕事しているとたま~にこれらのカメラが複製されて・・・
- persp
- persp1
- persp2
- persp3
- persp4
- top
- top1
- top2
- front
- front1
- front2
- side
- side1
- side2
みたいな感じになっているシーンに出くわすことがあるのですが、もうこんなのは明らかに 「ゴミ」 なので削除しようとDeleteを実行すると・・・、
「削除不能ノード 'front1' は削除できません。」
こんなエラーが出て削除できないことがあります!
この原因は何なのかと言うと、各ゴミカメラが StartupCemera として設定されたまま複製されていることで暗黙的に削除不能ノードとされているから・・・だと思います。しらんけど。
まぁ、とにかく削除するにはこのフラグを折ってから削除すれば良いのです。
CameraRemover
本日の本題である「選択しているゴミカメラを削除する」コードになります。
# encoding=utf8 # -*- coding:utf-8 -*- import pymel.core as pm BUTTON = ["Yes", "No"] def main (): # Dagフラグを立てて選択からカメラのみを抽出 selected = pm.ls(sl = True, dag = True, type = "camera") if not selected : return# 選択なし処理キャンセル # 念の為の確認ダイアログ msg = "Are you sure to delete following camera ?\n" + "".join(["\n-" + i.name() for i in selected]) confirmed = pm.confirmDialog(t = "Delete Camera", m = msg, b = BUTTON, ds = BUTTON[1]) if confirmed != BUTTON[0] : return# 処理キャンセル for i in selected: i.setStartupCamera(False)# 削除不能の原因となるStartupCemeraフラグを折る # カメラの親のTransformごと削除 pm.delete([i.getParent() for i in selected])
削除したいカメラを選択して上記を実行すると以下のような確認ダイアログが表示されるので、「Yes」を選択するとそれで終わりです。
選択していたゴミはシーンから削除されます。
なんでゴミカメラが生まれるのかは分かりませんが、入れ子になっているリファレンスの編集中にとか、なんかショートカットを押してしまっているとか、何かしらのヒューマンエラーが根源でしょう。どんだけ気を付けていてもミスるときはありますから・・・。
それでは、また。