blendeer python でスクリプト書き出す
000を中心に 半径1のトーラス マイナー半径 0.02 を z=-1に描く
0、0、0.1を中心に 半径1-0.01のトーラス マイナー半径 0.02 を z=ー0.9に描く
0、0、0.2を中心に 半径1-0.02のトーラス マイナー半径 0.02 を z=ー0.8に描く
これを繰り返し z=0 まで トーラスを複数描く
import bpy
import math
center_x = 0.0
center_y = 0.0
minor_radius = 0.02
z = -1.0
z_increment = 0.1
num_toruses = 11
for i in range(num_toruses):
major_radius = 1.0 - (i * 0.1)
bpy.ops.mesh.primitive_torus_add(
align='WORLD',
location=(center_x, center_y, z),
rotation=(0, 0, 0),
major_radius=major_radius,
minor_radius=minor_radius,
major_segments=48,
minor_segments=12
)
torus_obj = bpy.context.object
bpy.context.view_layer.objects.active = torus_obj
bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS', center='BOUNDS')
z += z_increment
今度は
z=0から Z=1に トーラスを11個描く
半径が 0から 0.1ずつ大きくする
この11個のトーラスに future torus 0.0 から 1.0の連番で名前を付ける
import bpy
import math
center_x = 0.0
center_y = 0.0
minor_radius = 0.02
z = 0.0
z_increment = 1.0 / 10.0 # Zの増分を計算
num_toruses = 11
for i in range(num_toruses):
major_radius = i * 0.1 # 半径を0から0.1ずつ増加させる
bpy.ops.mesh.primitive_torus_add(
align='WORLD',
location=(center_x, center_y, z),
rotation=(0, 0, 0),
major_radius=major_radius,
minor_radius=minor_radius,
major_segments=48,
minor_segments=12
)
torus_obj = bpy.context.object
bpy.context.view_layer.objects.active = torus_obj
bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS', center='BOUNDS')
# トーラスに名前を付ける
torus_obj.name = "FutureTorus" + str(round(major_radius, 1))
z += z_increment
今度は
z=0から Z=-1に トーラスを11個描く
半径が 0から 0.1ずつ大きくする
この11個のトーラスに past torus -0.0 から -1.0 の連番で名前を付ける
import bpy
import math
center_x = 0.0
center_y = 0.0
minor_radius = 0.02
z = 0.0
z_decrement = -1.0 / 10.0 # Zの減分を計算
num_toruses = 11
for i in range(num_toruses):
major_radius = i * 0.1 # 半径を0から0.1ずつ増加させる
bpy.ops.mesh.primitive_torus_add(
align='WORLD',
location=(center_x, center_y, z),
rotation=(0, 0, 0),
major_radius=major_radius,
minor_radius=minor_radius,
major_segments=48,
minor_segments=12
)
torus_obj = bpy.context.object
bpy.context.view_layer.objects.active = torus_obj
bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS', center='BOUNDS')
# トーラスに名前を付ける
torus_obj.name = "PastTorus" + str(round(-major_radius, 1))
z += z_decrement
コレクション名を 作る
Future torus
Past torus
+5 Future torus
+5 Past torus
-5 Future torus
-5 Past torus
6つ作る
import bpy
collection_names = ["Future torus", "Past torus", "+5 Future torus", "+5 Past torus", "-5 Future torus", "-5 Past torus"]
for collection_name in collection_names:
new_collection = bpy.data.collections.new(collection_name)
bpy.context.scene.collection.children.link(new_collection)
x軸に +5 移動させて 名前を +5 PastTorus で連番に
以下を x軸に +5 移動させて 連番名を +5 Future torus にして
以下を x軸に ー5 移動させて 連番名を -5 Future torus にして
コレクション名
球体群 A
import bpy
collection_name = "球体群 A"
# コレクションを作成
collection = bpy.data.collections.new(collection_name)
# シーンにコレクションを追加
bpy.context.scene.collection.children.link(collection)
-5、0、-1 から
+5,0,1 を両端とする線分に
球体を 半径 0.03 で
21個 等間隔で 配置する
import bpy
start_x = -5.0
end_x = 5.0
start_z = -1.0
end_z = 1.0
radius = 0.03
num_spheres = 21
# 線分上の等間隔のポイントを計算
points = [(start_x + (end_x - start_x) * i / (num_spheres - 1), 0, start_z + (end_z - start_z) * i / (num_spheres - 1)) for i in range(num_spheres)]
# 球体を作成し、配置
for i, point in enumerate(points):
bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=point)
sphere_obj = bpy.context.object
sphere_obj.name = "A_Sphere_" + str(i)
import bpy
collection_name = "球体群 B"
# コレクションを作成
collection = bpy.data.collections.new(collection_name)
# シーンにコレクションを追加
bpy.context.scene.collection.children.link(collection)
blender python 底面 半径1 高さ1の円錐を描け
import bpy
# Clear existing objects
bpy.ops.object.select_all(action='DESELECT')
bpy.ops.object.select_by_type(type='MESH')
bpy.ops.object.delete()
# Create cone mesh
bpy.ops.mesh.primitive_cone_add(vertices=32, radius1=1, radius2=0, depth=1)
# Set cone as the active object
cone = bpy.context.object
cone.name = "Cone"
# Center the cone's origin
bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS', center='BOUNDS')
# Apply scale and rotation to the cone
bpy.ops.object.transform_apply(scale=True, rotation=True)
# Select and show the cone
cone.select_set(True)
bpy.context.view_layer.objects.active = cone
bpy.ops.object.shade_smooth()
いま 描画したものを
z軸に -0.5ずらせ
import bpy
# Clear existing objects
bpy.ops.object.select_all(action='DESELECT')
bpy.ops.object.select_by_type(type='MESH')
bpy.ops.object.delete()
# Create cone mesh
bpy.ops.mesh.primitive_cone_add(vertices=32, radius1=1, radius2=0, depth=1)
# Set cone as the active object
cone = bpy.context.object
cone.name = "cone_past"
# Center the cone's origin
bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS', center='BOUNDS')
# Apply scale and rotation to the cone
bpy.ops.object.transform_apply(scale=True, rotation=True)
# Shift the cone along the z-axis
cone.location.z -= 0.5
# Select and show the cone
cone.select_set(True)
bpy.context.view_layer.objects.active = cone
bpy.ops.object.shade_smooth()
修正後のコードでは、まず円錐の底面をZ=1に描き、その後円錐の頂点を(0, 0, 0)に描くようになっています。
円錐の頂点の半径0 円錐中心の半径0.5 で z=0.5 円錐底面 半径1で z=0に描く
import bpy
# Clear existing objects
bpy.ops.object.select_all(action='DESELECT')
bpy.ops.object.select_by_type(type='MESH')
bpy.ops.object.delete()
# Create cone mesh
bpy.ops.mesh.primitive_cone_add(vertices=32, radius1=1, radius2=0, depth=1)
# Set cone as the active object
cone = bpy.context.object
cone.name = "cone_past"
# Center the cone's origin
bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS', center='BOUNDS')
# Apply scale and rotation to the cone
bpy.ops.object.transform_apply(scale=True, rotation=True)
# Shift the cone along the z-axis
cone.location.z -= 0.5
# Select and show the cone
cone.select_set(True)
bpy.context.view_layer.objects.active = cone
bpy.ops.object.shade_smooth()
追加で
いまの円錐の
z=0平面に 面対称で
円錐を作り
cone future と名付ける
cone future だけ z軸に +1 ズラス
円錐を作る
円錐頂点の位置 0,0,0
円錐底面 中心の位置 0.0.ー1
「円錐底面の円」 その中心が 0.0.ー1
つまり z=-1に 半径1の円
円錐頂点の位置 0,0,0 ここ
「円錐の 中心」と
「円錐の底面の中心」を 区別すること
「円錐の 中心」 0,0,ー0.5
「円錐頂点」 0,0,0
「円錐の底面の中心」 0,0.ー1
「円錐の底面」は 半径1の円
Apologies for the confusion. Here's the modified script to create a cone with the following specifications:
Cone center: (0, 0, -0.5)
Cone vertex: (0, 0, 0)
Base center: (0, 0, -1)
Base radius: 1
import bpy
# Clear existing objects
bpy.ops.object.select_all(action='DESELECT')
bpy.ops.object.select_by_type(type='MESH')
bpy.ops.object.delete()
# Define cone parameters
base_radius = 1
cone_height = 0
# Create cone mesh
bpy.ops.mesh.primitive_cone_add(vertices=32, radius1=0, radius2=base_radius, depth=cone_height, location=(0, 0, 0))
cone_obj = bpy.context.object
# Move the cone's base plane to z = +1
cone_obj.location += (0, 0, 0.5)
# Set the cone vertex at (0, 0, 0)
cone_obj.location -= cone_obj.data.vertices[0].co
# Set the cone as the active object
bpy.context.view_layer.objects.active = cone_obj
cone_obj.select_set(True)