2015-01-21 3 views
4

Я пытаюсь создать автоматизированную систему сборки для Blender 2.73, которая читает XML-файлы с большим количеством путей, открывает файлы один за другим, а затем отображает их.Открытие .blend файлов с использованием Python API-интерфейса Blender

Я использую следующий код для того, чтобы открыть:

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) 

ответ

10

Проблема с оператором вызова является то, что он Безразлично Не принимайте позиционные аргументы, вам нужно называть каждый аргумент -

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

Blender допускает только одно открытое fil e за раз, когда вы открываете другой файл смешивания, существующие данные выходят из строя, это обычно включает в себя скрипт, который вы используете.

Если у вас есть bpy.app.handlers, вы можете настроить обработчик на постоянство, поскольку он останется в памяти после загрузки нового файла смешивания. Это может позволить вам запустить ваш код после открытия нового файла 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) 

Вы также можете рассмотреть возможность делать основную работу за пределами блендере, петля через каждый файл и сказать блендер open and render each file.

blender --background thefile.blend -a 

будет отображать анимацию, основанную на настройках в файле смешивания.

Для большего контроля вы также можете указать скрипт python для запуска после открытия файла blend. This question может расшириться для вас.

+0

Как открыть файл? Ошибка остается такой, какая есть. Я думаю, что вы только что решили мою следующую проблему после открытия, но сейчас она даже не открывает файл. – user3684240

+0

DOH !!!! Я обновил ответ на этот бит. – sambler