【问题标题】:Opening .blend files using Blender's Python API使用 Blender 的 Python API 打开 .blend 文件
【发布时间】:2015-03-20 11:12:43
【问题描述】:

我正在尝试为 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)

【问题讨论】:

    标签: python blender bpy


    【解决方案1】:

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

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

    Blender 一次只允许打开一个文件,当您打开另一个混合文件时,现有数据会从内存中刷新,这通常包括您正在运行的脚本。

    如果您查看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)
    

    您可能还想考虑在 blender 之外做主要工作,循环遍历每个文件并将 blender 告诉 open and render each file

    blender --background thefile.blend -a
    

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

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

    【讨论】:

    • 我该如何打开文件?错误保持原样。我认为您打开后刚刚解决了我的下一个问题,但现在它甚至无法打开文件。
    • @sambler “打开并渲染每个文件”的链接已失效
    • @ComputerScientist 应该是旧链接的 2.79 页面。
    猜你喜欢
    • 2016-01-31
    • 2017-10-26
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2019-09-07
    相关资源
    最近更新 更多