Untitled
unknown
plain_text
a year ago
2.7 kB
12
Indexable
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 1x2Editor is loading...
Leave a Comment