夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Blender Pythonで指定したオブジェクトを指定した座標に配置する

本日はBlender Python枠です。

本日はオブジェクト生成系のアドオンなどでよくみられるあるオブジェクトをある座標に配置(生成)することを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()によって指定したオブジェクトを複製しています。

本日は以上です。