2023年4月3日月曜日

トーラス 複数 平行並べ  円柱のように

 20230404 mon


# 今回の コレクション まとまり を作成する


import bpy

import math

zion_collection_name = "y=0 torus"


# コレクションを作成する

col = bpy.data.collections.new(zion_collection_name)

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



import bpy

import math

zion_collection_name = "y > 0 torus"


# コレクションを作成する

col = bpy.data.collections.new(zion_collection_name)

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



import bpy

import math

zion_collection_name = "y < 0 torus"


# コレクションを作成する

col = bpy.data.collections.new(zion_collection_name)

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


import bpy

import math

zion_collection_name = "遮断 正方形"


# コレクションを作成する

col = bpy.data.collections.new(zion_collection_name)

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








# y=0 平行 トーラス -30から ++30


import bpy
from math import radians

# トーラスの設定
major_radius = 30  # 大半径
minor_radius = 1  # 小半径
torus_segments = 48  # トーラスの面数
torus_ring_segments = 48  # トーラスのリング数

# トーラスを作成する
bpy.ops.mesh.primitive_torus_add(
    major_radius=major_radius,
    minor_radius=minor_radius,
    major_segments=torus_segments,
    minor_segments=torus_ring_segments
)

# 軸を中心に90度回転させる
bpy.context.object.rotation_euler[0] = radians(90)
bpy.context.object.rotation_euler[1] = radians(90)
bpy.context.object.rotation_euler[2] = radians(0)

# X軸方向に伸ばす
bpy.context.object.scale[0] = 1
bpy.context.object.scale[1] = 1
bpy.context.object.scale[2] = 1

# トーラスを選択する
bpy.context.view_layer.objects.active = bpy.context.selected_objects[0]

# トーラスをコピーして移動させる
for i in range(-30, 31):
    # コピーを作成する
    bpy.ops.object.duplicate()
    
    # オブジェクト名を設定する
    bpy.context.object.name = f"y_{i}_Torus" if i != 0 else "y_0_Torus"
    
    # 移動する
    bpy.context.object.location[1] = i




# zion_collection_name = "遮断 正方形"


import bpy

from math import radians


# y座標のリストを指定する

y_positions = [-30, 0, 30]


# 正方形のサイズを指定する

size = 60


# 平面を作成する

bpy.ops.mesh.primitive_plane_add(size=size, enter_editmode=False, align='WORLD', location=(0, 0, 0), scale=(1, 1, 1))


# 軸を中心に90度回転させる

bpy.context.object.rotation_euler[0] = radians(90)

bpy.context.object.rotation_euler[1] = radians(90)

bpy.context.object.rotation_euler[2] = radians(0)


# 平面をy=0の位置に移動する

bpy.context.object.location[1] = 0


# y座標のリストでオブジェクト名を設定

obj_names = ["plane_y_-30", "plane_y_0", "plane_y_30"]


# 平行な正方形を作成する

for i, y_pos in enumerate(y_positions):

    # 平面を複製する

    bpy.ops.object.duplicate()

    # 平面をy=y_posの位置に移動する

    bpy.context.object.location[1] = y_pos

    # オブジェクト名を設定する

    bpy.context.object.name = obj_names[i]

    # マテリアルを作成する

    mat = bpy.data.materials.new(name="TransparentMaterial_" + obj_names[i])

    mat.use_nodes = True

    nodes = mat.node_tree.nodes

    principled = nodes.get("Principled BSDF")

    # RGBA値を設定する

    color = (1.0, 1.0, 1.0, 0.5) # (R, G, B, A)

    principled.inputs["Base Color"].default_value = color

    principled.inputs["Alpha"].default_value = color[3]

    # マテリアルを割り当てる

    bpy.context.object.active_material = mat

    # 平面に厚みを設定する

    bpy.ops.object.modifier_add(type='SOLIDIFY')

    bpy.context.object.modifiers["Solidify"].thickness = 0.2







以下は 今回の作成 途中 記録




import bpy
from math import radians

# トーラスを作成する
bpy.ops.mesh.primitive_torus_add(major_radius=30, minor_radius=1)


    # 軸を中心に90度回転させる
bpy.context.object.rotation_euler[0] = radians(90)
bpy.context.object.rotation_euler[1] = radians(90)
bpy.context.object.rotation_euler[2] = radians(0)
    # X軸方向に伸ばす
bpy.context.object.scale[0] = 1
bpy.context.object.scale[1] = 1
bpy.context.object.scale[2] = 1
    
# トーラスを選択する

bpy.context.view_layer.objects.active = bpy.context.selected_objects[0]



これに平行な トーラスを y=-30から y=30に 1単位 等間隔に 作って 
blender python スクリプト 作成


# Torrus  y =0



import bpy
from math import radians

# トーラスの設定
major_radius = 30  # 大半径
minor_radius = 1  # 小半径
torus_segments = 48  # トーラスの面数
torus_ring_segments = 48  # トーラスのリング数

# トーラスを作成する
bpy.ops.mesh.primitive_torus_add(
    major_radius=major_radius,
    minor_radius=minor_radius,
    major_segments=torus_segments,
    minor_segments=torus_ring_segments
)

# 軸を中心に90度回転させる
bpy.context.object.rotation_euler[0] = radians(90)
bpy.context.object.rotation_euler[1] = radians(90)
bpy.context.object.rotation_euler[2] = radians(0)

# X軸方向に伸ばす
bpy.context.object.scale[0] = 1
bpy.context.object.scale[1] = 1
bpy.context.object.scale[2] = 1

# トーラスを選択する
bpy.context.view_layer.objects.active = bpy.context.selected_objects[0]

# トーラスをコピーして移動させる
for i in range(-30, 31):
    # コピーを作成する
    bpy.ops.object.duplicate()
    
    # 移動する
    bpy.context.object.location[1] = i






以下は 今回の作成 途中 記録






import bpy

# 正方形のサイズを指定する
size = 60

# 平面を作成する
bpy.ops.mesh.primitive_plane_add(size=size)


# 軸を中心に90度回転させる
bpy.context.object.rotation_euler[0] = radians(90)
bpy.context.object.rotation_euler[1] = radians(90)
bpy.context.object.rotation_euler[2] = radians(0)


# 平面をy=0の位置に移動する
bpy.context.object.location[1] = 0

# 平面を選択する
bpy.context.view_layer.objects.active = bpy.context.selected_objects[0]
























以下のスクリプトは、指定されたy座標に平面を複数生成するものです。生成する平面の個数をnで指定し、y座標のリストをy_positionsに格納します。




import bpy
from math import radians

# 正方形のサイズを指定する
size = 60

# y座標のリストを指定する
y_positions = [0, 10, 15]

# 平面を作成する
for y in y_positions:
    bpy.ops.mesh.primitive_plane_add(size=size)

    # 軸を中心に90度回転させる
    bpy.context.object.rotation_euler[0] = radians(90)
    bpy.context.object.rotation_euler[1] = radians(90)
    bpy.context.object.rotation_euler[2] = radians(0)

    # 平面をy座標の位置に移動する
    bpy.context.object.location[1] = y

    # 平面を選択する
    bpy.context.view_layer.objects.active = bpy.context.selected_objects[0]





平面オブジェクトを3Dオブジェクトに変換するために、bpy.ops.mesh.extrude_region_shrink_fatten(value=0.2) を使用して、オブジェクトの厚みを0.2に設定


上記のスクリプトでは、show_z0_square変数をTrueに設定することで最初に作ったz=0平面に収容される正方形を表示することができます。Falseに設定すると表示されません。



import bpy
from math import radians

# y座標のリストを指定する
y_positions = [-30, 0, 30]

# 正方形のサイズを指定する
size = 60


# 平面を作成する
bpy.ops.mesh.primitive_plane_add(size=size)

# 軸を中心に90度回転させる
bpy.context.object.rotation_euler[0] = radians(90)
bpy.context.object.rotation_euler[1] = radians(90)
bpy.context.object.rotation_euler[2] = radians(0)

# 平面をy=0の位置に移動する
bpy.context.object.location[1] = 0


# 平行な正方形を作成する
for y_pos in y_positions:
    # 平面を複製する
    bpy.ops.object.duplicate()
    # 平面をy=y_posの位置に移動する
    bpy.context.object.location[1] = y_pos
    # 平面に厚みを設定する
    bpy.ops.object.modifier_add(type='SOLIDIFY')
    bpy.context.object.modifiers["Solidify"].thickness = 0.4














import bpy
from math import radians

# y座標のリストを指定する
y_positions = [0, -30, 30]

# 正方形のサイズを指定する
size = 60

# 平面を作成する
bpy.ops.mesh.primitive_plane_add(size=size)

# 軸を中心に90度回転させる
bpy.context.object.rotation_euler[0] = radians(90)
bpy.context.object.rotation_euler[1] = radians(90)
bpy.context.object.rotation_euler[2] = radians(0)

# 平面をy=0の位置に移動する
bpy.context.object.location[1] = 0

# 平行な正方形を作成する
for y_pos in y_positions:
    # 平面を複製する
    bpy.ops.object.duplicate()
    # 平面をy=y_posの位置に移動する
    bpy.context.object.location[1] = y_pos
    # 平面に厚みを設定する
    bpy.ops.object.modifier_add(type='SOLIDIFY')
    bpy.context.object.modifiers["Solidify"].thickness = 0.2










import bpy
from math import radians

# y座標のリストを指定する
y_positions = [0, -30, 30]

# 正方形のサイズを指定する
size = 60

# 平面を作成する
bpy.ops.mesh.primitive_plane_add(size=size)

# 軸を中心に90度回転させる
bpy.context.object.rotation_euler[0] = radians(90)
bpy.context.object.rotation_euler[1] = radians(90)
bpy.context.object.rotation_euler[2] = radians(0)

# 平面をy=0の位置に移動する
bpy.context.object.location[1] = 0

# マテリアルを作成する
color = (1.0, 1.0, 1.0, 0.5) # (R, G, B, A)
mat = bpy.data.materials.new(name="TransparentMaterial")
mat.use_nodes = True
nodes = mat.node_tree.nodes
principled = nodes.get("Principled BSDF")
principled.inputs["Base Color"].default_value = color
principled.inputs["Alpha"].default_value = color[3]

# 平行な正方形を作成する
for y_pos in y_positions:
    # 平面を複製する
    bpy.ops.object.duplicate()
    # 平面をy=y_posの位置に移動する
    bpy.context.object.location[1] = y_pos
    # 平面にマテリアルを設定する
    bpy.context.object.active_material = mat
    # 平面に厚みを設定する
    bpy.ops.object.modifier_add(type='SOLIDIFY')
    bpy.context.object.modifiers["Solidify"].thickness = 0.2






 # y=0以外の平面を非表示にする
    if y != 0:
        bpy.context.object.hide_viewport = True


改良中 y=-30 中心 円周への球体36個

できた y= -30 中心で z=0平面移動  import bpy import math zion_collection_name = "線路レール 観察者" # コレクションを作成する col = bpy.data.collections.new(zio...