Blender 3D:融入 Python/2.5 快速入门
在 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,仍然有很多操作无法通过直接调用来复制。
请记住,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
。注册脚本后,你就可以将它添加到工具架中,并从空格键菜单中启动它。