Files
2026-04-15 16:29:12 +02:00

74 lines
1.9 KiB
OpenSCAD

// --- Parameters ---
base_radius = 45;
slot_depth = 2;
floor_thickness = 1.5;
total_base_h = slot_depth + floor_thickness;
wall_height = 110;
wall_thickness = 1.5;
flare_angle = 10;
hole_d = 8;
slot_width = 8;
$fn = 500;
// --- assembly ---
difference() {
flower_pot_body();
// radial slots
translate([0, 0, -0.1])
linear_extrude(height = slot_depth + 0.1)
radial_slots_pattern();
// drainage holes
translate([0, 0, -0.1])
linear_extrude(height = total_base_h + 0.2)
holes_pattern();
}
// --- modules ---
module flower_pot_body() {
top_x_outer = base_radius + wall_height * tan(flare_angle);
top_x_inner = top_x_outer - (wall_thickness / cos(flare_angle));
rotate_extrude() {
polygon(points = [
[0, 0],
[base_radius, 0],
[top_x_outer, wall_height + total_base_h],
[top_x_inner, wall_height + total_base_h],
[base_radius - wall_thickness, total_base_h],
[0, total_base_h]
]);
}
}
module radial_slots_pattern() {
// 6 slots
for(a = [0 : 60 : 359]) {
rotate([0, 0, a])
translate([base_radius / 2, 0, 0])
square([base_radius + 5, slot_width], center = true);
}
}
module holes_pattern() {
union() {
circle(d = hole_d);
// rings based on the base radius
hole_circles = (base_radius < 35)
? [base_radius * 0.5]
: (base_radius < 55)
? [base_radius * 0.33, base_radius * 0.66]
: [base_radius * 0.25, base_radius * 0.5, base_radius * 0.75];
for(r = hole_circles) {
for(a = [0 : 60 : 359]) {
rotate([0, 0, a])
translate([r, 0, 0])
circle(d = hole_d);
}
}
}
}