如何从命令行运行Blender exporter脚本?

2024-04-28 03:55:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一些对象从blender导出为专有格式。我希望我编写的脚本能够从blender的文件下拉列表和命令行导出对象。我在Ubuntu12.04LTS上使用Blender2.66。下面是我当前试图运行的文件。

# Required Blender information.
bl_info = {
           "name": "My Exporter",
           "author": "",
           "version": (1, 0),
           "blender": (2, 65, 0),
           "location": "File > Export > Test (.tst)",
           "description": "",
           "warning": "",
           "wiki_url": "",
           "tracker_url": "",
           "category": "Import-Export"
          }

# Import the Blender required namespaces.
import bpy
from bpy_extras.io_utils import ExportHelper


# The main exporter class.
class MyExporter(bpy.types.Operator, ExportHelper):
   bl_idname       = "test.tst";
   bl_label        = "My Exporter";
   bl_options      = {'PRESET'};

   filename_ext    = ".tst";

   object_count    = 0;

   def __init__(self):
      pass

   def execute(self, context):
      print("Execute was called.");

      # Parse all the objects in the scene.
      return {'FINISHED'};

   def export_object(self, gameObject):
      if (gameObject.type != "MESH"):
         print("Object was not of type mesh.");
      else:
         object_count += 1;

      return;


# Define a function to create the menu option for exporting.
def create_menu(self, context):
   self.layout.operator(MyExporter.bl_idname,text="test (.tst)");

# Define the Blender required registration functions.
def register():
   """
   Handles the registration of the Blender Addon.
   """
   bpy.utils.register_module(__name__);
   bpy.types.INFO_MT_file_export.append(create_menu);

def unregister():
   """
   Handles the unregistering of this Blender Addon.
   """
   bpy.utils.unregister_module(__name__);
   bpy.types.INFO_MT_file_export.remove(create_menu);

# Handle running the script from Blender's text editor.
if (__name__ == "__main__"):
   print("Registering.");
   register();

   print("Executing.");

   # I have tried with these lines uncommented to force it to run
   # the execute function, but I get an error saying:
   #    exporter = MyExporter();
   #    TypeError: bpy_struct.__new__(type): expected a single argument

   #exporter = MyExporter();
   #exporter.execute(bpy.context.scene);

我尝试了以下命令:

blender model.blend --background --python myexporter.py

从中我得到以下输出:

Note: No (valid) '~/.config/blender/2.66/config/startup.blend' found,
      fall back to built-in default.

Read new prefs: ~/.config/blender/2.66/config/userpref.blend
found bundled python: ~/blender/2.66/python
read blend: ~/model.blend
Registering.
Executing.

Blender quit

MyExporter类中的execute函数似乎从未被调用过。我甚至尝试直接调用execute函数,但是,如果您阅读了该区域上方的注释,我似乎也遗漏了一些内容。

当脚本被添加为blender的附加组件时,一切工作正常。它叫完美执行。所以至少我有一半能用。

提前谢谢你能给我的帮助。如果我犯了一个愚蠢的错误,我道歉,我正在学习python的同时,我写这个脚本。


Tags: thetonameselfexecutedefexporterprint