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.objectsbpy.data.meshesbpy.data.*- 一組 Python 物件集合。有很多 - 每種型別一個。與普通的字典一樣,你可以按名稱或索引選擇物件,要新增新的資料塊,請使用
new()或load()(用於影像、聲音和字型)。 object.data- 物件的資料塊。
mesh.data.vertices- 網格的頂點集合。只讀。
armature.data.bonesarmature.data.edit_bones- 骨架的骨骼字典,分別在物件模式和編輯模式下。如果你訪問了當前上下文錯誤的物件,它將顯示為空。
bpy.ops.object.mode_set(mode='EDIT')- 設定當前模式。請注意,模式可能不會完全按照你在此處設定的那樣結束:例如,
EDIT可能變為EDIT_ARMATURE。 bpy.context.active_objectbpy.context.active_bonebpy.context.active_pchanbpy.context.active_base- 這些函式返回使用者當前活動專案,它通常是最後一次選擇的同類型專案。
active_base返回一個通用的 Python 型別。 - 要設定活動專案,將 Python 物件分配給以下值之一
scene.objects.activearmature.data.bones.active或armature.data.edit_bones.active
- 活動物件在概述器中以白色突出顯示。
bpy.context.selected_objectsbpy.context.selected_bonesbpy.context.selected_bases- 返回一個當前選定物件的陣列。其他函式存在於編輯骨骼、"可編輯物件" 和 pchan 中。
object.selected- 定義物件是否選中的布林值。
參見 .blender\scripts\templates\operator.py。註冊指令碼後,你就可以將它新增到工具架中,並從空格鍵選單中啟動它。