Untitled
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