Untitled

mail@pastecode.io avatar
unknown
plain_text
24 days ago
2.7 kB
4
Indexable
Never
import bpy

# Funkcja tworząca pojedynczy klocek LEGO o wymiarach (x, y, z) w jednostkach Blender
def create_lego_brick(width, length, height):
    # Tworzenie prostopadłościanu (klocka)
    bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, align='WORLD')
    brick = bpy.context.object
    brick.scale = (width / 2, length / 2, height / 2)
    
    # Przemieszczamy klocek lekko do góry, aby wypustki pojawiły się nad powierzchnią
    brick.location.z = height / 2
    
    # Nazwij klocek
    brick.name = f"LEGO_Brick_{width}x{length}"

    # Tworzenie wypustek na górze klocka (studs)
    stud_radius = 0.25
    stud_height = 0.2
    stud_spacing = 0.8  # Odstęp między studami (w jednostkach LEGO)

    for i in range(width):
        for j in range(length):
            # Dodanie cylindrycznego studa
            bpy.ops.mesh.primitive_cylinder_add(radius=stud_radius, depth=stud_height, enter_editmode=False, align='WORLD')
            stud = bpy.context.object
            stud.location = (i * stud_spacing - (width - 1) * stud_spacing / 2, j * stud_spacing - (length - 1) * stud_spacing / 2, height / 2 + stud_height / 2)
            stud.select_set(True)
            # Połącz cylindry z klockiem
            bpy.context.view_layer.objects.active = brick
            bpy.ops.object.join()  # Łączenie obiektów

    # Tworzenie otworów pod spodem klocka (stud recesses)
    recess_radius = stud_radius * 0.95
    recess_depth = stud_height + 0.1

    for i in range(width - 1):
        for j in range(length - 1):
            bpy.ops.mesh.primitive_cylinder_add(radius=recess_radius, depth=recess_depth, enter_editmode=False, align='WORLD')
            recess = bpy.context.object
            recess.location = (i * stud_spacing - (width - 2) * stud_spacing / 2, j * stud_spacing - (length - 2) * stud_spacing / 2, -height / 2 - recess_depth / 2)
            recess.select_set(True)
            # Usunięcie cylindrów od spodu
            bpy.context.view_layer.objects.active = brick
            bpy.ops.object.modifier_add(type='BOOLEAN')
            bpy.context.object.modifiers["Boolean"].operation = 'DIFFERENCE'
            bpy.context.object.modifiers["Boolean"].object = recess
            bpy.ops.object.modifier_apply(modifier="Boolean")
            bpy.data.objects.remove(recess)  # Usunięcie obiektu po zastosowaniu modyfikatora
    
    return brick

# Usuwanie domyślnej kostki w scenie
if "Cube" in bpy.data.objects:
    bpy.data.objects['Cube'].select_set(True)
    bpy.ops.object.delete()

# Tworzenie kilku klocków
create_lego_brick(2, 4, 1.2)  # Klocek 2x4
create_lego_brick(1, 2, 1.2)  # Klocek 1x2
Leave a Comment