本日は Blender の技術調査枠です。
Blender2.8で利用可能なpythonスクリプトを作ります。
bluebirdofoz.hatenablog.com
オブジェクトの作成
指定のメッシュオブジェクトを作成します。
オブジェクトタイプを指定すると任意のメッシュを作成することができます。
・make_object_mesh.py
# bpyインポート import bpy # メッシュオブジェクトの作成 # オブジェクト作成関数のマニュアル # (https://docs.blender.org/api/2.80/bpy.ops.mesh.html) def make_object_mesh(arg_objectname="Default",arg_objecttype="Cube") -> bool: """メッシュオブジェクトの作成 オブジェクト作成関数のマニュアル (https://docs.blender.org/api/2.80/bpy.ops.mesh.html) Keyword Arguments: arg_objectname {str} -- 作成オブジェクト名 (default: {"Default"}) arg_objecttype {str} -- 作成メッシュタイプ (default: {"Cube"}) Returns: bool -- 作成の正否 """ # もし同名のメッシュオブジェクトが既に存在していれば新規作成しない if arg_objectname in bpy.data.meshes: return False # 作成するオブジェクトを判定 if arg_objecttype == "Cube": # Cubeオブジェクトを作成する bpy.ops.mesh.primitive_cube_add( size=2.0, location=(0.0, 0.0, 0.0), rotation=(0.0, 0.0, 0.0) ) elif arg_objecttype == "Sphere": # UV_Sphereオブジェクトを作成する bpy.ops.mesh.primitive_uv_sphere_add( segments=32, ring_count=16, radius=1.0, location=(0.0, 0.0, 0.0), rotation=(0.0, 0.0, 0.0) ) elif arg_objecttype == "Cone": # Coneオブジェクトを作成する bpy.ops.mesh.primitive_cone_add( vertices=32, radius1=1.0, radius2=0.0, depth=2.0, location=(0.0, 0.0, 0.0), rotation=(0.0, 0.0, 0.0) ) elif arg_objecttype == "Torus": # Coneオブジェクトを作成する bpy.ops.mesh.primitive_torus_add( major_segments=48, minor_segments=12, major_radius=1.0, minor_radius=0.25, abso_major_rad=1.25, abso_minor_rad=0.75, location=(0.0, 0.0, 0.0), rotation=(0.0, 0.0, 0.0) ) else: # エンプティオブジェクトを作成する bpy.ops.object.empty_add( type='PLAIN_AXES', location=(0.0, 0.0, 0.0), rotation=(0.0, 0.0, 0.0) ) # 作成したオブジェクトの参照を取得する ob = bpy.context.view_layer.objects.active # オブジェクト名を変更する ob.name = arg_objectname # スケールを変更する ob.scale=( 1, 1, 1 ) # 選択状態を解除する ob.select_set(False) return True # 関数の実行例 make_object_mesh( arg_objectname="MakeObject", arg_objecttype="Sphere" )
対象オブジェクトの削除
名前で指定したオブジェクトを削除します。
オブジェクトが存在しない場合は何もしません。
・delete_object_target.py
# bpyインポート import bpy # 指定オブジェクトの削除 def delete_object_target(arg_objectname=""): """指定オブジェクトの削除 Keyword Arguments: arg_objectname {str} -- 削除するオブジェクト名 (default: {""}) """ # 指定オブジェクトを取得する # (get関数は対象が存在しない場合 None が返る) targetob = bpy.data.objects.get(arg_objectname) # 指定オブジェクトが存在するか確認する if targetob != None: # オブジェクトが存在する場合は削除を行う bpy.data.objects.remove(targetob) return # 関数の実行例 delete_object_target(arg_objectname="Cube")
全オブジェクトの削除
全てのオブジェクトを削除します。
新規プロジェクト作成時に、プロジェクトを真っ新にしたい場合などに便利です。
・delete_object_all.py
# bpyインポート import bpy # 全オブジェクトの削除 def delete_object_all(): """全オブジェクトの削除 """ # 全シーンオブジェクトを削除する for item in bpy.context.scene.collection.objects: bpy.context.scene.collection.objects.unlink(item) # 全データオブジェクトを削除する for item in bpy.data.objects: bpy.data.objects.remove(item) # 全メッシュデータを削除する for item in bpy.data.meshes: bpy.data.meshes.remove(item) # 全マテリアルデータを削除する for item in bpy.data.materials: bpy.data.materials.remove(item) return # 関数の実行例 delete_object_all()