コマンド – Command

コードをオペレーターとして実行できるボタンにします。
オペレーターの細かなオプションや、プロパティの変更をそのまま実行ボタンにできます

  • 「直前の履歴を登録」で登録すると、表示用の名前はコードを元に生成されます
  • 下記のような形である必要があります
    • bpy.ops.xxx.xxx()
    • bpy.xxx.xxx.xxx = XXX

複数行のスクリプトを実行

複数の行のコードを1行にまとめることで、複数の動作を一括して実行することができます。
if文やfor文のような処理を実行することができます。
コードを1行にまとめるには、改行を”;”に変換します

【サンプル】未使用マテリアルを一括削除

■ 元のコード

for mat in bpy.data.materials:
    if not mat.users:
        bpy.data.materials.remove(mat)

■ 1行にまとめたコード

for mat in bpy.data.materials:;    if not mat.users:;        bpy.data.materials.remove(mat)

注意点

  • 関数化されているコードは利用できません
    • 例:def xxx():というような行がある
  • 最初のインデントは付けないようにしてください
# 最初にインデントがついていて失敗する例
    for mat in bpy.data.materials:
        if not mat.users:
            bpy.data.materials.remove(mat)

「クリップボードからコードを貼り付け」機能

クリップボードのコードを貼り付けます。
改行がある場合は、改行を ‘ ; ‘ に自動で変換します。
ネットで紹介されている様々なPythonスクリプトをコピーして貼り付けることで、簡単にボタンとして実行することができます。

「コードをクリップボードにコピー」機能

コードをクリップボードにコピーします。
‘ ; ‘がある場合は、’ ; ‘を改行に自動で変換します。
1行に変換されたコードを、整形前のコードとして取得したい時に便利です。

「’INVOKE_DEFAULT’を追加」機能

オペレーターのオプションに’INVOKE_DEFAULT’を追加します。

いくつかのオペレーターは、コマンドで実行するとうまくいかない場合があります。
これは、なんらかの事前処理をしてからメインの処理を実行するオペレーターであり、コマンドから実行するとメイン処理から実行されてしまうため起こる問題です。

これを回避するには、’INVOKE_DEFAULT’ を追加します。
このオプションがあると、事前処理(invoke)の関数を実行します。

■ INVOKE_DEFAULTにより操作が改善されるオペレーター

  • モーダルを利用するオペレーター
  • アニメーションレンダー
  • トランスフォーム
  • クリック選択(view3d.select)