首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用Blender的Python API打开.blend文件

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

Stack Overflow用户
提问于 2015-01-22 03:47:55
回答 1查看 14.6K关注 1票数 11

我正在尝试为Blender 2.73创建一个自动构建系统,它可以读取具有大量路径的XML文件,一个接一个地打开这些文件,然后渲染它们。

我使用以下代码来打开:

代码语言:javascript
代码运行次数:0
运行
复制
bpy.ops.wm.open_mainfile("file_path")

我的问题是我得到了以下错误:

代码语言:javascript
代码运行次数:0
运行
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-22 15:42:46

你的操作符调用的问题是它不接受位置参数,你需要命名每个参数-

代码语言:javascript
代码运行次数:0
运行
复制
bpy.ops.wm.open_mainfile(filepath="file_path")

Blender一次只允许一个打开的文件,当你打开另一个混合文件时,现有的数据会从ram中清除出来,这通常包括你正在运行的脚本。

如果您查看一下bpy.app.handlers,您可以将处理程序设置为持久化,因为在加载新的混合文件后,它将保留在内存中。这使您可以在打开新的混合文件后运行代码。

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
blender --background thefile.blend -a

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

为了获得更多的控制,您还可以指定在混合文件打开后运行的python脚本。This question可以为您扩展这一点。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28075599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档