跳转到内容

Blender 3D:融入 Python/2.5 快速入门

来自 Wikibooks,开放世界中的开放书籍

Blender 2.5 中,bpy 替换了旧的 Blender 模块,并引入了 全新的 Python API。此页面旨在概述如何使用 bpy 执行关键的脚本任务,并且对于新手和从 2.4x 版本过渡的用户来说应该会很有趣。

控制台

[编辑 | 编辑源代码]

Blender 2.5 中内置的 Python 控制台进行了重大改进,现在支持自动完成(按 Ctrl+Space)。这对探索所有新功能非常有用,尽管内联文档很少。

最新版本 (14-7-2010) 激活控制台:Shift+F4.

上下文 + 操作 = 结果

[编辑 | 编辑源代码]

2.5 系列引入了 bpy.ops 模块。一旦你将脚本注册为“操作”,它将直接集成到 UI 中,并且可以作为与内置工具相同的标准按钮出现(这些工具也使用 ops)。对于程序员来说,每个操作的函数调用都会出现在其按钮的工具提示中。

ops 中也存在一个重大的概念变化:而不是明确地传递目标,操作会从 Blender 的当前“上下文”中推断一个目标。上下文包括一个当前选定内容的数组,当前活动对象或骨骼,活动编辑模式,Blender 窗口的状态,用户偏好,以及更多其他内容

操作不接受任何参数,也不返回值。因此,从复杂的脚本中调用它们被认为是不规范的,因为你必须间接设置操作的目标,然后(除非你已经有了一个指针)间接地寻找其结果。当然,仍然支持直接调用对象的函数;不幸的是,截至 2.5 alpha 0,仍然有很多操作无法通过直接调用来复制。

在 2.5 中执行任务

[编辑 | 编辑源代码]

请记住,ops 函数不返回值。调用一个函数来创建对象后,你需要自己获取结果的句柄!

创建和销毁

[编辑 | 编辑源代码]
bpy.ops.object.add(type='EMPTY')
创建一个对象和空数据块,并将它链接到当前场景。另请参见 #手动创建对象
bpy.ops.scene.new(type='EMPTY')
创建一个新场景。可以是当前场景的克隆或完全副本。
mesh_object.data.add_geometry(verts, edges, faces)
向网格添加顶点、边和面。仅限对象模式。
object.modifiers.new(type="ARMATURE",name="Armature")
向对象添加修改器。
bpy.ops.mesh.edge_face_add()
如果选择了两个顶点,则创建一个边。如果选择了三个或更多顶点,则还创建一个面。
bpy.ops.mesh.primitive_cube_add()
向当前网格对象添加立方体。存在其他 primitive_*_add() 函数。
bpy.ops.armature.bone_primitive_add(name="Bone")
向活动骨架添加骨骼。
bpy.ops.object.delete()
bpy.ops.*.delete()
删除选定的对象、网格等。 存在许多版本 用于不同类型。

手动创建对象

[编辑 | 编辑源代码]

如果你需要比 ops.object.add() 提供的更精细的控制,或者只需要返回值,请遵循以下示例

me_da = bpy.data.add_mesh('mesh_data') # a mesh datablock without an associated object
me_ob = bpy.data.add_object('MESH','mesh_ob') # a mesh object without an associated datablock
# N.B. in future releases the above calls will become bpy.data.<type>.new()

me_ob.data = me_da # Assign the datablock to the object

bpy.context.scene.objects.link(me_ob) # Link the object to the active scene

还有 add_armature()add_image()add_lamp()add_material()add_texture()

获取对象和数据

[编辑 | 编辑源代码]
bpy.data.objects
bpy.data.meshes
bpy.data.*
一组 Python 对象集合。有很多 - 每种类型一个。与普通的字典一样,你可以按名称或索引选择对象,要添加新的数据块,请使用 new()load()(用于图像、声音和字体)。
object.data
对象的数据块。
mesh.data.vertices
网格的顶点集合。只读。
armature.data.bones
armature.data.edit_bones
骨架的骨骼字典,分别在对象模式和编辑模式下。如果你访问了当前上下文错误的对象,它将显示为空。

上下文管理

[编辑 | 编辑源代码]
bpy.ops.object.mode_set(mode='EDIT')
设置当前模式。请注意,模式可能不会完全按照你在此处设置的那样结束:例如,EDIT 可能变为 EDIT_ARMATURE
bpy.context.active_object
bpy.context.active_bone
bpy.context.active_pchan
bpy.context.active_base
这些函数返回用户当前活动项目,它通常是最后一次选择的同类型项目。active_base 返回一个通用的 Python 类型。
要设置活动项目,将 Python 对象分配给以下值之一
  • scene.objects.active
  • armature.data.bones.active armature.data.edit_bones.active
活动对象在概述器中以白色突出显示。
bpy.context.selected_objects
bpy.context.selected_bones
bpy.context.selected_bases
返回一个当前选定对象的数组。其他函数存在于编辑骨骼、"可编辑对象" 和 pchan 中。
object.selected
定义对象是否选中的布尔值。

注册操作

[编辑 | 编辑源代码]

参见 .blender\scripts\templates\operator.py。注册脚本后,你就可以将它添加到工具架中,并从空格键菜单中启动它。

华夏公益教科书