オブジェクトオペレーター
公式サイト:
Object Operators | Blender Python API [Official]
使い方
- bpy.ops.object
- bpy.context.object
bpy.data.object
(→ bpy.data )- bpy.types.BlendData.objects
- Object
- BlendDataObjects
参考:
低レベル Python API を利用してオブジェクトを操作する – Qiita
Blender を Python で操作する – Qiita
プリミティブオブジェクトを Python で操作する | rinkak
シーン内のオブジェクトを抽出する
参考:
シーン内の全てのメッシュオブジェクトの原点を変更する – Qiita
How do I iterate through objects in a Scene? – Blender Artists Community
選択したオブジェクトを操作する
選択したオブジェクトを取得する。
selected_objects = bpy.context.selected_objects
for object in selected_objects:
print(object.name)
Code language: Python (python)
ドキュメント:
bpy.context.selected_objects | Blender Python API [Official]
参考:
Looping through selected objects one at a time? – Blender Stack Exchange
Loop doesn’t work, 3-lines Python code – Stack Overflow
Get list of selected objects as string – Stack Overflow
アクティブオブジェクト
参考:
オブジェクトを選択する
オブジェクトを選択するには、選択に追加するオブジェクトにたいして select_set
メソッドを実行する。
object = bpy.data.objects["Cube"]
object.select_set(True)
Code language: Python (python)
2.79 以前は select
プロパティを設定していた。ビューレイヤー別に状態を管理する場合は select_set
メソッドを使用する。
# In 2.79 or before
object.select = True
Code language: Python (python)
ドキュメント:
bpy.types.Object.select_set | Blender Python API [Official]
Object Selection and Hiding | Blender Developer Wiki [Official]
参考:
Selecting an object via scripting? – Blender Stack Exchange
Selecting object by name in 2.8 – Blender Stack Exchange
オブジェクトをアクティブ化する
コンテキストアクセスから view_layer
を介してアクティブにするオブジェクトを指定する。
object = bpy.data.objects["Cube"]
bpy.context.view_layer.objects.active = object
Code language: Python (python)
参考:
How to set object (mesh) to active in Blender 2.8 Python API | Interplanety
Set active object with python – Blender Stack Exchange
指定した名前のオブジェクトを操作する
cube = bpy.data.objects["Cube"]
Code language: Python (python)
ドキュメント:
Data Access (bpy.data) | Blender Python API [Official]
参考:
Selecting an object via scripting? – Blender Stack Exchange
オブジェクトを作成する
参考:
Three Ways to Create Objects | wiki.blender.jp
オブジェクトを削除する
選択して削除する。
bpy.ops.object.select_all(action='DESELECT')
object = bpy.data.objects["Cube"]
object.select_set(True)
bpy.ops.object.delete()
Code language: Python (python)
データアクセスから remove
で削除する。
object = bpy.data.objects["Cube"]
bpy.data.objects.remove(object)
Code language: Python (python)
参考:
How to completely remove an object – Blender Stack Exchange
Object referenced by PointerProperty in Python can not be deleted properly – Blender Stack Exchange
Removing all meshes from a collection with Python – Blender Stack Exchange
オブジェクトの情報を取得する
bound_box
dimensions
location
matrix_world
ドキュメント:
Object (bpy.types.Object) | Blender Python API [Official]
参考:
ワールドマトリクスからオブジェクトの軸方向を取得 | Blender とか 3DCG とか
Get X, Y, Z and bounding box with script – Blender Stack Exchange
How to get global object location – Blender Stack Exchange
大きさに基づいて選択する
参考:
Select or delete small objects (based on dimension) – Blender Artists Community
Select object by dimension – Blender Stack Exchange
オブジェクトを移動/回転させる
参考:
Rotating an object about a global axis – Blender Artists Community
Matrix rotation not changing scale – Blender Stack Exchange
How do I use world_matrix.rotate correctly? – Blender Stack Exchange
オブジェクトを拡大縮小する
参考:
How to modify data from vector / arrays in Python? – Blender Stack Exchange
オブジェクトを複製する
ドキュメント:
bpy.ops.object.duplicate | Blender Python API [Official]
参考:
Making a copy of an object using the Blender Python API | Interplanety
Duplicating an object in script by name – Blender Stack Exchange
How to get the object created by bpy.ops.object.duplicate()? – Blender Stack Exchange
Duplicate a mesh via Python – Blender Stack Exchange
How to get duplicate ID via Python api? – Blender Stack Exchange
座標軸の向きを取得する
参考:
ワールドマトリクスからオブジェクトの軸方向を取得 | Blender とか 3DCG とか
How to get local axis orientation in Python? – Blender Stack Exchange
整列させる
参考:
Python code for align selected to active – Blender Stack Exchange
移動/回転/縮小を適用する
ドキュメント:
bpy.ops.object.transform_apply | Blender Python API [Official]
オブジェクトの描画領域を取得/描画する
参考:
Save the 2D bounding box of an object in rendered image to a text file – Blender Stack Exchange
How to find image coordinates of the rendered vertex? – Blender Stack Exchange
How to extract the bounding box of a model? – Stack Overflow
メッシュを扱う
ドキュメント:
bpy.types.BlendData.meshes | Blender Python API [Official]
Mesh | Blender Python API [Official]
BlendDataMeshes | Blender Python API [Official]
参考:
Blender のデータ構造を辿り、FBX から頂点座標を抽出する – Qiita
Simple face area measurement script – Blender Artists Community
メッシュを結合する
参考:
How to join objects with Python? – Blender Stack Exchange
join objects – Blender Stack Exchange
頂点を選択する
参考:
Selected vertex did not highlight – Stack Overflow
頂点データを取得/編集する
参考:
How to update mesh data via script? – Stack Overflow
How do we access Vert, Norm and UV data then print to a text file? – Blender Stack Exchange
頂点カラーを設定/編集する
参考:
How can I set and get the vertex color property? – Blender Stack Exchange
How to get random color variation on a single mesh? – Blender Stack Exchange
カーブを作成する
参考:
Scripting Curves in Blender with Python | Jeremy Behreandt
How to add or remove hairs from a hair curve – Stack Overflow
カメラビュー内の頂点を選択する
リポジトリ:
1C0D/cam_view_select_geo: A Script to Select Vertices of Selected Objects under Cam View – GitHub
参考:
How to find image coordinates of the rendered vertex? – Blender Stack Exchange
UV 展開を実行する (Unwrapping)
参考:
Can’t UV unwrap a sphere added with Python – Blender Stack Exchange
How to UV Unwrap and Scale UVs with Python (while in object mode)? – Blender Stack Exchange
照明を操作する (Light)
ドキュメント:
Light | Blender Python API [Official]
データ名を変更する
object = bpy.data.objects["Cube"]
object.data.name = "data_name.001"
Code language: Python (python)
参考:
How to synch armature name with object name? – Blender Artists Community
モディファイアーを扱う
- bpy.types.Object.modifiers
- bpy.ops.object.modifier_apply
- bpy.ops.object.modifier_apply_as_shapekey
- bpy.ops.object.modifier_copy
- bpy.ops.object.modifier_copy_to_selected
ドキュメント:
bpy.types.Object.modifiers | Blender Python API [Official]
Modifier | Blender Python API [Official]
ObjectModifiers | Blender Python API [Official]
bpy.ops.object.modifier_apply | Blender Python API [Official]
bpy.ops.object.modifier_apply_as_shapekey | Blender Python API [Official]
bpy.ops.object.modifier_copy | Blender Python API [Official]
bpy.ops.object.modifier_copy_to_selected | Blender Python API [Official]
bpy.ops.object.modifier_remove | Blender Python API [Official]
ペアレントを取得/設定/変更/解消する
ドキュメント:
bpy.ops.object.parent_set | Blender Python API [Official]
bpy.ops.object.parent_clear | Blender Python API [Official]
bpy.types.Object.parent | Blender Python API [Official]
bpy.types.Object.parent_type | Blender Python API [Official]
参考:
How to make object A a parent of object B via Python API? – Blender Stack Exchange
How do I set parent to Armature? – Blender Stack Exchange
子オブジェクトを操作する
参考:
Get children name and move it to a separated collection automatically – Blender Stack Exchange
オブジェクトを統合する (Join)
参考:
script randomly crashes Blender – Blender Stack Exchange
シェイプキーを扱う
ドキュメント:
bpy.types.Object.active_shape_key | Blender Python API [Official]
ShapeKey | Blender Python API [Official]
シェイプキーを削除する
ドキュメント:
bpy.types.Object.shape_key_remove | Blender Python API [Official]
bpy.types.Object.shape_key_clear | Blender Python API [Official]
参考:
頂点グループ/シェイプキー一括削除 | Amethyst3D
How to remove all shape keys from all selected objects? – Blender Artists Community
delete shape key by name via Python – Blender Artists Community
shape key removal – Blender Artists Community
Purging shape key data with Python – Blender Stack Exchange
apply all shape keys to selected objects except certain shape keys – Blender Stack Exchange
不要なシェイプキーを削除する
参考:
コンストレイントを操作する
- bpy.ops.object.constraint_add
- bpy.ops.object.constraint_add_with_targets
- bpy.ops.object.constraints_clear
- bpy.ops.object.constraints_copy
ドキュメント:
Object Operators | Blender Python API [Official]
指定したコレクションに移動する
ドキュメント:
bpy.ops.object.move_to_collection | Blender Python API [Official]
bpy.types.Collection.objects | Blender Python API [Official]
CollectionObjects | Blender Python API [Official]
bpy.types.CollectionObjects.link | Blender Python API [Official]
bpy.types.CollectionObjects.unlink | Blender Python API [Official]
参考:
Where to find collection_index for moving an object? – Blender Developer Talk
What’s the command for adding an object to a collection using Python? – Blender Stack Exchange
How to move multiple objects into another collection? – Blender Stack Exchange
How to put similar named objects into collection? – Blender Stack Exchange
Import obj and create collections – Blender Stack Exchange
Get children name and move it to a separated collection automatically – Blender Stack Exchange
コレクションインスタンスを操作する
参考:
How can I count objects that are in a collection instance? – Blender Stack Exchange
モデルをエクスポートする
参考:
glTF をコレクションごとに一括でエクスポートする方法 | Kazuki Sako
Export Plug-in を作る #2 データアクセス (Blender 2.6) | ホイール欲しい ハンドル欲しい
Export Plug-in を作る #1 (Blender 2.6) | ホイール欲しい ハンドル欲しい
Batch exporting scene collections or selected objects using glTF-Blender-IO – Blender Stack Exchange
視錘台に応じてオブジェクトを配置する (Camera Frustum)
参考:
Getting edges of the camera’s view on the scene XY plane – Blender Stack Exchange
削除の禁止/許可を切り替える
参考:
Prevent accidental deletion of object – Blender Stack Exchange
update_from_editmode
編集モードに入る時にメッシュのスナップショットが取られ、編集モードを抜ける時に編集の結果が書き戻される。編集モード内で編集の状態をメッシュデータに反映させたい場合には、update_from_editmode
を実行する。
ドキュメント:
bpy.types.Object.update_from_editmode | Blender Python API [Official]
参考:
選択物のリストを取る方法 – Blender.jp フォーラム
How to update mesh data in edit mode? – Blender Artists Community
Not Updating in Edit Mode – Blender Artists Community
.data.vertices returns an empty collection in Edit Mode – Blender Stack Exchange
How to get a list of edges of current face in bpy – Blender Stack Exchange
データブロック (Data-Blocks)
ドキュメント:
Data-Blocks | Blender Manual [Official]
to_mesh
ドキュメント:
bpy.types.Object.to_mesh | Blender Python API [Official]
bpy.types.Object.to_mesh_clear | Blender Python API [Official]
参考:
How to get a new mesh with modifiers applied using Python API? – Blender Stack Exchange
How do I get a mesh data-block with modifiers and shape keys applied? – Blender Stack Exchange
Is there a low level alternative for bpy.ops.object.convert()? – Blender Stack Exchange
Deleting temporary mesh after extracting data – Blender Stack Exchange
アクティブ化に失敗する
現象:
active
プロパティが見つからない旨のエラーが発生する。
bpy_prop_collection: attribute "active" not found
対処法:
バージョン 2.80 でアクティブオブジェクトを設定する方法が変更になった。ビューレイヤー毎にアクティブ化をコントロールする必要があるため、コンテキストアクセスから view_layer
を介して設定する。
object = bpy.data.objects["Cube"]
bpy.context.view_layer.objects.active = object
Code language: Python (python)
参考:
How to set object / mesh to active in Blender Python API | Interplanety
Set active object with Python – Blender Stack Exchange
スクリプト例
参考:
コード:
すべてのオブジェクトを削除する (hiroakioishi) – GitHub Gist
Tips
なるべく bpy.ops を使わない方法 | アストラルプリズム