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