跳轉到內容

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。註冊指令碼後,你就可以將它新增到工具架中,並從空格鍵選單中啟動它。

華夏公益教科書