2023年6月22日木曜日

20230623 列車慣性系の3枚重ね





import bpy

import math


# 長方形のサイズ

width = 2.0

height = 1.0


# 長方形の中心座標

center = (0.0, 0.0, 0.0)


# 球体の半径と個数

sphere_radius = 0.02

sphere_count = 80


# コレクションの作成と名前付け

collection_names = ["t=0_train", "t=-1_train", "t=+1_train"]


for collection_name in collection_names:

    if collection_name not in bpy.data.collections:

        collection = bpy.data.collections.new(collection_name)

        bpy.context.scene.collection.children.link(collection)


# 球体を配置する関数

def create_spheres(collection_name, z_position):

    collection = bpy.data.collections[collection_name]


    # 球体の作成と配置

    for i in range(sphere_count):

        angle = 2 * math.pi * i / sphere_count

        x = center[0] + (width/2 + sphere_radius) * math.cos(angle)

        y = center[1] + (height/2 + sphere_radius) * math.sin(angle)

        z = z_position


        bpy.ops.mesh.primitive_uv_sphere_add(radius=sphere_radius, location=(x, y, z))


        # 最後に作成された球体オブジェクトを選択状態にする

        obj = bpy.context.object

        obj.name = f"t{z_position}_Sphere_{i+1}"

        obj.select_set(True)

        bpy.context.view_layer.objects.active = obj


        # 不要なリンクを削除

        bpy.context.collection.objects.unlink(obj)


        # 球体を対応するコレクションに追加

        collection.objects.link(obj)


# 球体を配置する関数を呼び出し

create_spheres("t=0_train", 0.0)

create_spheres("t=-1_train", -1.0)

create_spheres("t=+1_train", 1.0)