本日はオブジェクト生成系のアドオンなどでよくみられるあるオブジェクトをある座標に配置(生成)することをPythonを使用して行っていきます。
〇オブジェクトを生成する
UnityのC#などではInstanciate()などを使用して生成します。
まずはBlenderのプリミティブオブジェクトを生成していきます。
・プリミティブオブジェクトの作成
プリミティブオブジェクトとはBlenderでデフォルトで定義されているオブジェクト群です。
一番シンプルな例としてはBlender起動時に表示されるプリミティブキューブなどがあります。
次のようなコードになります。
import bpy # 既存のメッシュオブジェクトをクリア bpy.ops.object.select_all(action='DESELECT') bpy.ops.object.select_by_type(type='MESH') bpy.ops.object.delete() # 指定した座標に新しい立方体を作成 x, y, z = 1.0, 2.0, 3.0 bpy.ops.mesh.primitive_cube_add(size=1, enter_editmode=False, align='WORLD', location=(x, y, z))
プリミティブのオブジェクトの場合はAPIが提供されおりprimitive_○○_add()
を呼ぶだけで生成することができます。
では次に任意のコレクション内のオブジェクトを複製、配置するコードを見ていきます。
これを行うためにはまず、は複製するオブジェクトを選別する必要があります。
import bpy # 指定したオブジェクト名とコレクション名 object_name_to_duplicate = "Suzanne" # 任意のオブジェクト名 collection_name = "Copy" # 任意のコレクション名 # コレクションを取得 collection = bpy.data.collections.get(collection_name) if collection: # コレクション内のオブジェクト名を出力 print("コレクション内のオブジェクト:") for obj in collection.objects: print(obj.name) # 指定した名前のオブジェクトを検索 object_to_duplicate = None for obj in collection.objects: if obj.name == object_name_to_duplicate: object_to_duplicate = obj break if object_to_duplicate: # 指定されたオブジェクト名を出力 print("指定されたオブジェクト名:", object_name_to_duplicate) # オブジェクトを複製 duplicated_object = object_to_duplicate.copy() duplicated_object.data = object_to_duplicate.data duplicated_object.location.x += 2.0 # 必要に応じて位置を調整 collection.objects.link(duplicated_object) else: print(f"コレクション '{collection_name}' が見つかりませんでした")
今回はCopy
という名前のコレクションでSuzanne
を配置しました。
コードを実行することでx軸に対して2mずれた位置にスザンヌが複製配置されるようになります。
これはcopy()
によって指定したオブジェクトを複製しています。
本日は以上です。