Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
3.0 kB
3
Indexable
Never
import bpy

# Tworzy podstawowy klocek LEGO 2x4
def create_lego_brick():
    # Wymiary klocka LEGO (w jednostkach Blender)
    width = 3.2  # Szerokość klocka (2 studsy)
    length = 6.4 # Długość klocka (4 studsy)
    height = 3.2  # Wysokość klocka
    stud_radius = 0.5  # Promień studa
    stud_height = 0.2  # Wysokość studa
    stud_spacing = 0.8  # Odstęp między studami

    # Tworzenie podstawy klocka (prostopadłościan)
    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)
    brick.location.z = height / 2

    # Nazwij klocek
    brick.name = "LEGO_Brick_2x4"

    # Tworzenie wypustek na górze klocka (studs)
    for i in range(2):  # Dwa studsy w szerokości
        for j in range(4):  # Cztery studsy w długości
            # 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 * 3.2 - width / 2 + 1.6, j * 3.2 - length / 2 + 1.6, height / 2 + stud_height / 2)
            # Połącz cylindry z klockiem
            bpy.context.view_layer.objects.active = brick
            bpy.ops.object.select_all(action='DESELECT')
            stud.select_set(True)
            brick.select_set(True)
            bpy.context.view_layer.objects.active = brick
            bpy.ops.object.join()  # Łączenie obiektów

    # Tworzenie wnęk na spodzie klocka (recesses)
    recess_radius = stud_radius * 0.95  # Trochę mniejszy niż stud
    recess_depth = height / 2  # Wnęki sięgają na połowę wysokości klocka

    for i in range(1):  # Jedna kolumna wnęk między studsami w szerokości
        for j in range(3):  # Trzy kolumny wnęk w długości
            # Dodanie cylindrycznej wnęki pod spodem
            bpy.ops.mesh.primitive_cylinder_add(radius=recess_radius, depth=recess_depth, enter_editmode=False, align='WORLD')
            recess = bpy.context.object
            recess.location = (i * 3.2 - width / 2 + 1.6, j * 3.2 - length / 2 + 3.2, -height / 2 - recess_depth / 2)
            recess.rotation_euler = (0, 0, 0)
            # Dodanie modyfikatora boolean do odjęcia wnęki od klocka
            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 klocka LEGO
create_lego_brick()
Leave a Comment