原型 立方体と 頂点の基本セット
4月 18, 2023
https://chatgpt111blender2023.blogspot.com/2023/04/blog-post_18.html
原型 立方体の対角線 面と立体と 辺長さ 3種類
4月 18, 2023
https://chatgpt111blender2023.blogspot.com/2023/04/blog-post_71.html
blender python
先頭業に 設定を定義して
オブジェクト名 obj = zion_name
zion_namer = "円柱”で 1から12番の番号を付け加える
円柱を12本 使って 立方体の骨格を作る
円柱12本が配置される立方体の大きさは 1辺2単位
これも 長さが変えられるように設定
円柱12本が配置される立方体の中心位置も設定できるようにする
初期値は 000
円柱の半径は 0.1 が初期値
想定される 立方体の12の辺に相当する位置に 円柱12本を配置して
以下は、中心が (0, 0, 0) で1辺の長さが2の立方体の12本の辺に沿って円柱を配置するスクリプト例です。
blender が 強制終了する不具合 したから まず1辺 2の立方体をオブジェクト名 付きで 描く 次に 半径 0.1の球体8個を
立方体の頂点 8つに オブジェクト名 付きで 描く
ここまで やって
ball のオブヘクト名を ball_001 から008 連番にして
ball と ballを 両端とする円柱を半径 0.05 で 12本描けるはず
描いて
import bpy
# 1辺2の立方体を作成
bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(0,0,0))
cube = bpy.context.object
cube.name = "cube"
# 立方体の頂点の座標
vertex_coords = [(1,1,1), (-1,1,1), (-1,-1,1), (1,-1,1), (1,1,-1), (-1,1,-1), (-1,-1,-1), (1,-1,-1)]
# 頂点に球体を作成
for i in range(8):
bpy.ops.mesh.primitive_uv_sphere_add(radius=0.1, enter_editmode=False, location=vertex_coords[i])
ball = bpy.context.object
ball.name = "ball"
-1,0,1
-1,0,-1
1,0,1
1,0,-1 4頂点の正方形と
-1,zion_length,1 の正方形と
-1,-zion_length,1 の正方形
合わせて 3つの平行な 正方形を描く
import bpy
# 正方形の中心
center = (0, 0, 0)
# 正方形の大きさ
size = 1.0
# 正方形の座標
square_vertices = [
(center[0] - size/2, center[1], center[2] - size/2),
(center[0] + size/2, center[1], center[2] - size/2),
(center[0] + size/2, center[1], center[2] + size/2),
(center[0] - size/2, center[1], center[2] + size/2)
]
square_edges = [(0,1), (1,2), (2,3), (3,0)]
square_faces = [(0,1,2,3)]
# 正方形を作成する関数
def create_square(x, y, z):
# Meshデータの作成
mesh = bpy.data.meshes.new("Square")
# 座標を変換して、正方形をx,y,zの位置に移動
vertices = [(vx+x,vy+y,vz+z) for vx,vy,vz in square_vertices]
# Meshデータに頂点、エッジ、面情報を追加
mesh.from_pydata(vertices, square_edges, square_faces)
# オブジェクトの作成
obj = bpy.data.objects.new("SquareObject", mesh)
# オブジェクトをシーンに追加
scene = bpy.context.scene
scene.collection.objects.link(obj)
# オブジェクトのマテリアルを設定
mat = bpy.data.materials.new(name="SquareMaterial")
obj.data.materials.append(mat)
# 3つの正方形を作成
create_square(0, -1, 0)
create_square(0, 0, 0)
create_square(0, 1, 0)
import bpy
# 正方形の中心
center = (0, 0, 10)
# 正方形の大きさ
size = 1.0
# 正方形の座標
square_vertices = [
(center[0] - size/2, center[1], center[2] - size/2),
(center[0] + size/2, center[1], center[2] - size/2),
(center[0] + size/2, center[1], center[2] + size/2),
(center[0] - size/2, center[1], center[2] + size/2)
]
square_edges = [(0,1), (1,2), (2,3), (3,0)]
square_faces = [(0,1,2,3)]
# 正方形を作成する関数
def create_square(x, y, z):
# Meshデータの作成
mesh = bpy.data.meshes.new("Square")
# 座標を変換して、正方形をx,y,zの位置に移動
vertices = [(vx+x,vy+y,vz+z) for vx,vy,vz in square_vertices]
# Meshデータに頂点、エッジ、面情報を追加
mesh.from_pydata(vertices, square_edges, square_faces)
# オブジェクトの作成
obj = bpy.data.objects.new("SquareObject", mesh)
# オブジェクトをシーンに追加
scene = bpy.context.scene
scene.collection.objects.link(obj)
# 3つの正方形を作成
create_square(0, -1, 0) # y = -1
create_square(0, 0, 0) # y = 0
create_square(0, 1, 0) # y = 1
import bpy
import math
# 楕円のメジャー半径
major_radius = 1.0
# 楕円のマイナー半径
minor_radius = 0.1
# 楕円の座標
ellipse_vertices = []
for i in range(0, 360, 10):
x = major_radius * cos(radians(i))
y = minor_radius * sin(radians(i))
z = 0
ellipse_vertices.append((x, y, z))
# 楕円を作成する関数
def create_ellipse(x, y, z, obj_name):
# Meshデータの作成
mesh = bpy.data.meshes.new(obj_name)
# 座標を変換して、楕円をx,y,zの位置に移動
vertices = [(vx+x,vy+y,vz+z) for vx,vy,vz in ellipse_vertices]
# Meshデータに頂点、エッジ、面情報を追加
mesh.from_pydata(vertices, [], [])
mesh.update()
# オブジェクトの作成
obj = bpy.data.objects.new(obj_name, mesh)
# オブジェクトをシーンに追加
scene = bpy.context.scene
scene.collection.objects.link(obj)
# 楕円を3つ作成
create_ellipse(0, -1, 0, "Ellipse1")
create_ellipse(0, 0, 0, "Ellipse2")
create_ellipse(0, 1, 0, "Ellipse3")
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)
import bpy
import math
import mathutils
# 外接円の半径とトーラスの minor 半径
RADIUS = 1.0
MINOR_RADIUS = 0.05
# 中央のトーラスの中心座標
zion_torus_center = (1, 0, 10)
import bpy
import mathutils
import math
# 外接円の半径とトーラスの minor 半径
RADIUS = 1.0
MINOR_RADIUS = 0.05
# 平行移動する座標を指定する
zion_center = mathutils.Vector((0, 0, 0))
zion_parallel = 3
# トーラスを作成する関数
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)) + zion_center
# オブジェクトをシーンに追加する
scene = bpy.context.scene
scene.collection.objects.link(obj)
# トーラスを3つ生成する
create_torus(0, -1, 0)
create_torus(0, 0, 0)
create_torus(0, 1, 0)
# トーラスをすべてx軸に90度回転する
for obj in bpy.data.objects:
if obj.name.startswith("TorusObject"):
obj.rotation_euler.rotate_axis("X", math.radians(90))
import bpy
import mathutils
import math
zion_hanare_doai = 10
zion_heikou_idou = (2,3,5)
# 外接円の半径とトーラスの 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, -1*zion_hanare_doai, 0)
create_torus(0, 0, 0)
create_torus(0, 1*zion_hanare_doai, 0)
# トーラスをすべてx軸に90度回転する
for obj in bpy.data.objects:
if obj.name.startswith("TorusObject"):
obj.rotation_euler.rotate_axis("X", math.radians(90))