原型 トーラス円周 3つ x軸 方向
import bpy
import math
import mathutils
# 外接円の半径とトーラスの minor 半径
RADIUS = 1.0
MINOR_RADIUS = 0.05
# トーラスを作成する関数
def create_torus(x, y, z):
# Meshデータの作成
mesh = bpy.data.meshes.new("Torus")
# 頂点を生成する
verts = []
for i in range(32):
theta = 2 * math.pi * i / 32
for j in range(32):
phi = 2 * math.pi * j / 32
x1 = (RADIUS + MINOR_RADIUS * math.cos(phi)) * math.cos(theta)
y1 = (RADIUS + MINOR_RADIUS * math.cos(phi)) * math.sin(theta)
z1 = MINOR_RADIUS * math.sin(phi)
verts.append((x1, y1, z1))
# 面を生成する
faces = []
for i in range(32):
for j in range(32):
v1 = i * 32 + j
v2 = i * 32 + (j + 1) % 32
v3 = ((i + 1) % 32) * 32 + j
v4 = ((i + 1) % 32) * 32 + (j + 1) % 32
faces.append((v1, v2, v4, v3))
# Meshデータに頂点、面情報を追加する
mesh.from_pydata(verts, [], faces)
# オブジェクトを作成する
obj = bpy.data.objects.new("TorusObject", mesh)
# オブジェクトを指定位置に移動する
obj.location = mathutils.Vector((x, y, z))
# オブジェクトをシーンに追加する
scene = bpy.context.scene
scene.collection.objects.link(obj)
# トーラスを3つ生成する
create_torus(0, 0, 0)
create_torus(2, 0, 0)
create_torus(-2, 0, 0)