MRが楽しい

MRやVRについて学習したことを書き残す

batファイルを介してドラッグ操作でBlenderのPythonスクリプトを起動する

本日は小ネタ枠です。
以前紹介したBlenderPythonスクリプトをファイルドラッグで起動する方法を記事にします。
f:id:bluebirdofoz:20191013112053j:plain

サンプルスクリプト

以下の記事で作成した ifc ファイルの画像を出力するサンプルスクリプトで試します。
bluebirdofoz.hatenablog.com

スクリプト内で直接記述していた読み込みファイルのパスを引数から受け取るよう修正します。
Python での引数の取得は、以下の記述で可能です。

# sysインポート
import sys
# sys.argvから引数を取得
args=sys.argv

以下の通りスクリプトを修正しました。
・3DRender_args.py

# 不要なシステムパスの削除
import sys, os
pythonexedir=os.path.dirname(sys.executable)
del sys.path[5:]
sys.path.append(pythonexedir + '\\lib\\site-packages')
sys.path.append(pythonexedir + '\\lib\\site-packages\\blender')

# 変換対象のファイルパスを取得
args=sys.argv
# 2つ目の引数が追加のファイルパス
importfilepath=args[1]

# bpy インポート
import bpy

# ユーザ設定での IfcBlender アドオンの有効化
bpy.ops.preferences.addon_enable(module='io_import_scene_ifc')

# デフォルトの Cube を削除
bpy.data.objects.remove(bpy.data.objects['Cube'])

# ifcファイルの読み込み
bpy.ops.import_scene.ifc(filepath=importfilepath)

# ifcファイルの大きさ調整
for item in bpy.data.objects:
  # 全メッシュオブジェクトを対象に処理を行う
  if item.type == 'MESH':
    # 大きさを15倍に設定する
    item.scale[0] = 15.0
    item.scale[1] = 15.0
    item.scale[2] = 15.0

# レンダリングの実行と画像ファイルの出力
bpy.context.scene.render.engine = 'CYCLES'
bpy.context.scene.render.resolution_percentage = 50
bpy.ops.render.render()
bpy.data.images['Render Result'].save_render(filepath='.\image.png')

batファイルの引数取得

Python スクリプトに引数を渡して起動するため、bat ファイルを作成します。
以下の bat ファイルを作成しました。
・3DRender.bat

%~dp0\(Blender組み込みPythonの相対パス)\python.exe %~dp0\3DRender_args.py %1

ドラッグした元ファイルのディレクトリが実行ディレクトリとなるため、特殊記号を使って bat ファイルのパスを取得しています。

%~dp:batファイルのカレントディレクトリ
%1:2つ目の引数(ドラッグファイルのパス)

実行結果

作成した bat ファイルに編集処理をかけたい ifc ファイルをドラッグします。
f:id:bluebirdofoz:20191013112111j:plain

読み込まれた ifc ファイルのレンダリング結果の画像が出力されました。成功です。
f:id:bluebirdofoz:20191013112120j:plain