2023年4月18日火曜日

20230419 00a  テスト中 ガリレオ先輩の帆船 箱庭

 

原型 立方体と 頂点の基本セット

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"





zion_length = 2
zion_cube_center = (0, 0, 0) の場合

-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))