Untitled
unknown
plain_text
a year ago
2.8 kB
10
Indexable
import bpy
# Funkcja do tworzenia pojedynczego klocka LEGO 2x4
def create_lego_brick(width_count=2, length_count=4, height=1.2):
stud_radius = 0.25 # Promień pojedynczego studa
stud_height = 0.2 # Wysokość studa
stud_spacing = 0.8 # Odległość między studami
# Wymiary klocka
brick_width = width_count * stud_spacing
brick_length = length_count * stud_spacing
brick_height = height
# Tworzenie podstawy klocka (prostopadłościan)
bpy.ops.mesh.primitive_cube_add(size=2)
brick = bpy.context.object
brick.scale = (brick_width / 2, brick_length / 2, brick_height / 2)
brick.location.z = brick_height / 2
# Nazwij klocek
brick.name = f"LEGO_Brick_{width_count}x{length_count}"
# Tworzenie studów na górze klocka
for i in range(width_count):
for j in range(length_count):
bpy.ops.mesh.primitive_cylinder_add(radius=stud_radius, depth=stud_height)
stud = bpy.context.object
stud.location = (
i * stud_spacing - (brick_width - stud_spacing) / 2,
j * stud_spacing - (brick_length - stud_spacing) / 2,
brick_height + stud_height / 2
)
stud.select_set(True)
brick.select_set(True)
bpy.context.view_layer.objects.active = brick
bpy.ops.object.join() # Łączenie studów z klockiem
# Tworzenie otworów (recesses) pod spodem klocka
recess_radius = stud_radius * 0.95
recess_depth = stud_height * 1.5
for i in range(width_count - 1):
for j in range(length_count - 1):
bpy.ops.mesh.primitive_cylinder_add(radius=recess_radius, depth=recess_depth)
recess = bpy.context.object
recess.location = (
i * stud_spacing - (brick_width - stud_spacing) / 2 + stud_spacing / 2,
j * stud_spacing - (brick_length - stud_spacing) / 2 + stud_spacing / 2,
-brick_height / 2 - recess_depth / 2
)
recess.rotation_euler = (0, 0, 0)
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 wnęki 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 2x4
create_lego_brick(2, 4, 1.2) # Można zmieniać wymiary (np. 1x2, 2x2, 4x4 itp.)
Editor is loading...
Leave a Comment