12

Blender 2.73 用の自動ビルド システムを作成しようとしています。このシステムは、多数のパスを持つ XML ファイルを読み取り、ファイルを 1 つずつ開いてレンダリングします。

開くために次のコードを使用しています。

bpy.ops.wm.open_mainfile("file_path")

私の問題は、次のエラーが発生することです。

Traceback (most recent call last):
  File "<blender_console>", line 1, in <module>
  File "<BLENDER_PATH>/scripts/modules/bpy/ops.py", line 186, in __call__
    ret = op_call(self.idname_py(), C_dict, kw, C_exec, C_undo)
TypeError: Calling operator "bpy.ops.wm.open_mainfile" error, expected a string enum in ('INVOKE_DEFAULT', 'INVOKE_REGION_WIN', 'INVOKE_REGION_CHANNELS', 'INVOKE_REGION_PREVIEW', 'INVOKE_AREA', 'INVOKE_SCREEN', 'EXEC_DEFAULT', 'EXEC_REGION_WIN', 'EXEC_REGION_CHANNELS', 'EXEC_REGION_PREVIE)
4

1 に答える 1

18

オペレーター呼び出しの問題は、位置引数を受け入れないことです。各引数に名前を付ける必要があります-

bpy.ops.wm.open_mainfile(filepath="file_path")

Blender では、一度に 1 つのファイルしか開くことができません。別の Blend ファイルを開くと、既存のデータが RAM からフラッシュされます。これには通常、実行中のスクリプトが含まれます。

bpy.app.handlersを見ると、新しいblendファイルをロードした後もハンドラーがメモリに残るように、ハンドラーを永続的にセットアップできます。これにより、新しいblendファイルを開いた後にコードを実行できます。

import bpy
from bpy.app.handlers import persistent

@persistent
def load_handler(dummy):
    print("Load Handler:", bpy.data.filepath)

bpy.app.handlers.load_post.append(load_handler)

主な作業を Blender の外で行うことを検討し、各ファイルをループして、blender に各ファイルを開いてレンダリングするように指示することもできます。

blender --background thefile.blend -a

blend ファイルの設定に基づいてアニメーションをレンダリングします。

より細かく制御するために、blend ファイルを開いたときに実行する python スクリプトを指定することもできます。この質問は、あなたのためにそれを拡張することができます。

于 2015-01-22T07:42:45.760 に答える