python - 使用 Blender 的 Python API 打开 .blend 文件

标签 python blender bpy

我正在尝试为 Blender 2.73 制作一个自动构建系统,该系统读取具有大量路径的 XML 文件,一个接一个地打开文件,然后呈现它们。

我使用以下代码打开:

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)

最佳答案

您的运算符调用的问题在于它不接受位置参数,您需要为每个参数命名 -

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

Blender 一次只允许打开一个文件,当您打开另一个 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 到 open and render each file .

blender --background thefile.blend -a

将根据 blend 文件中的设置渲染动画。

要获得更多控制,您还可以指定在打开 blend 文件后运行的 python 脚本。 This question可以为您扩展。

关于python - 使用 Blender 的 Python API 打开 .blend 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28075599/

相关文章:

python - 如何使用enable_load_extension()?

python - 使用 sed 编辑 PDF 属性

c++ - 如何创建大地形/景观

python - blender 2.6 : Select object by name through Python

python - 如何在 Blender Python 中将 UV 设置为网格?

python - 从 Blender 中的每个像素读取 Alpha

python - 在 Python 中将 RGB 图像转换为灰度图像

python - 我在将文本文件解析为字典时遇到问题

python - tsfresh select_features 方法背后的算法

frameworks - Blender GUI 中使用的框架是什么?