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)







import bpy

import math


# 長方形のサイズ

width = 2.0

height = 1.0


# 長方形の中心座標

center = (0.0, 0.0, 0.0)


# 回転角度(ラジアン)

rotation_angle = math.radians(90)


# 回転するオブジェクトを選択

obj = bpy.context.object


# 頂点座標の計算

vertices = [

    (-width/2, -height/2, center[2]),

    (-width/2, height/2, center[2]),

    (width/2, height/2, center[2]),

    (width/2, -height/2, center[2])

]


# 頂点インデックスの定義

edges = [(0, 1), (1, 2), (2, 3), (3, 0)]


# オブジェクトの作成

mesh = bpy.data.meshes.new("Rectangle")

obj = bpy.data.objects.new("Rectangle_Object", mesh)


# オブジェクトをシーンに追加

scene = bpy.context.scene

scene.collection.objects.link(obj)


# メッシュデータの設定

mesh.from_pydata(vertices, edges, [])


# メッシュの更新

mesh.update()


# 回転軸を設定(x軸)

rotation_axis = 'X'


# オブジェクトの回転を設定

obj.rotation_euler.rotate_axis(rotation_axis, rotation_angle)





blender python で 作る



長方形を作る

長さ 2 x1


xy平面に 作る

長方形の角が

(-1,0,0)

(+1,+1,0) になるように作る


長方形に 厚みを作る

厚さ 0.02

厚みの中心が z=0 する


import bpy

import bmesh


# 長方形の頂点座標を定義

vertices = [

    (-1, 0, 0),

    (1, 0, 0),

    (1, 1, 0),

    (-1, 1, 0)

]


# 頂点をメッシュに追加

mesh = bpy.data.meshes.new("Rectangle")

bm = bmesh.new()


for v in vertices:

    bm.verts.new(v)


# メッシュを作成し、オブジェクトに割り当て

bm.faces.new(bm.verts)

bm.to_mesh(mesh)

bm.free()


obj = bpy.data.objects.new("Rectangle_Object", mesh)


scene = bpy.context.scene

scene.collection.objects.link(obj)


# 厚みを持たせるためのモディファイアを追加

thickness = 0.02


modifier = obj.modifiers.new("Solidify", 'SOLIDIFY')

modifier.thickness = thickness

modifier.use_even_offset = True


# 厚みの中心を設定

obj.location.z = -thickness / 2


# Blenderビューを更新してオブジェクトを表示

bpy.context.view_layer.update()




名前を付ける

t=0 _train

t=1 _train

のように 連番にする


import bpy

import bmesh


# 長方形の頂点座標を定義

vertices = [

    (-1, 0, 0),

    (1, 0, 0),

    (1, 1, 0),

    (-1, 1, 0)

]


# 頂点をメッシュに追加

mesh = bpy.data.meshes.new("Rectangle")

bm = bmesh.new()


for v in vertices:

    bm.verts.new(v)


# メッシュを作成し、オブジェクトに割り当て

bm.faces.new(bm.verts)

bm.to_mesh(mesh)

bm.free()


# オブジェクトを作成し、名前を設定

obj = bpy.data.objects.new("Rectangle_Object", mesh)


# 名前に連番を追加

scene = bpy.context.scene

train_counter = len([obj for obj in scene.collection.objects if obj.name.startswith("t=")])

obj.name = f"t={train_counter}_train"


scene.collection.objects.link(obj)


# 厚みを持たせるためのモディファイアを追加

thickness = 0.02


modifier = obj.modifiers.new("Solidify", 'SOLIDIFY')

modifier.thickness = thickness

modifier.use_even_offset = True


# 厚みの中心を設定

obj.location.z = -thickness / 2


# Blenderビューを更新してオブジェクトを表示

bpy.context.view_layer.update()




複製を作る


z=1と

Z=-1 に



import bpy


# 複製元のオブジェクト名を指定

source_obj_name = "t=0_train"


# 複製元のオブジェクトを取得

source_obj = bpy.data.objects.get(source_obj_name)


if source_obj is not None:

    # 複製元のオブジェクトをz=1の位置に複製

    new_obj_1 = source_obj.copy()

    new_obj_1.location.z = 1

    new_obj_1.name = f"{source_obj_name}_copy_z1"


    scene = bpy.context.scene

    scene.collection.objects.link(new_obj_1)


    # 複製元のオブジェクトをz=-1の位置に複製

    new_obj_2 = source_obj.copy()

    new_obj_2.location.z = -1

    new_obj_2.name = f"{source_obj_name}_copy_z-1"


    scene.collection.objects.link(new_obj_2)


    # Blenderビューを更新してオブジェクトを表示

    bpy.context.view_layer.update()









blender python で 作る

長方形を作る

長さ 2 x1


xz平面に 作る

長方形の角が

(-1,0,0)

(+1,0,+1) になるように作る


長方形に 厚みを作る

厚さ 0.02

厚さの中心が y=0 にする

名前を付ける

t=0 _train















複製を作る
複製を作るけど 
それぞれのオブジェクトは リンクさせない

z=1と
Z=-1 に

名前を付ける

t=0 _train

t=+1 _train

のように 連番にする


"t=2_train"がz=-1の複製にして