3d_print/Oliwka/plant_pot_saucer.scad

70 lines
1.7 KiB
OpenSCAD

// Plant pot saucer
// date: 19-3-2025
// author: Floris van den Bosch
include <BOSL2/std.scad>
// parameters
// ikea: 125
bottom_diameter = 125;
height = 20;
wall_thickness = 1;
spoke_spacing = 100.0;
// derived parameters
// height = 0.15 * bottom_diameter;
top_diameter = bottom_diameter + height;
number_of_spokes = max(floor(PI * top_diameter / spoke_spacing), 3);
spoke_center_offset = 0.15 * top_diameter;
echo("Bot diameter: ", bottom_diameter);
echo("Top diameter: ", top_diameter);
$fa = 0.5;
$fs = 0.5;
w = 2 * wall_thickness;
d_bottom = bottom_diameter + w;
d_top = top_diameter + w;
diff("R", "K"){
// outer shell
cylinder(h = height, d1 = d_bottom, d2 = d_top);
// text
tag("K") up(wall_thickness) text3d(str(bottom_diameter), center=true);
// interior cutout
tag("R") difference(){
translate([0,0,wall_thickness])
cylinder(h = height, d1 = bottom_diameter, d2 = top_diameter);
r = w;
translate([0, 0, wall_thickness / 2])
linear_extrude(3/2 * wall_thickness)
offset(r=-r)
offset(r=r)
union(){
for(angle = [0:360/number_of_spokes:360]){
rotate([0 ,0, angle])
// main spokes
hull(){
translate([spoke_center_offset, 0])
circle(r = w);
translate([d_top, 0])
circle(r = w);
}
}
//rounded corners
t = 1.001 * wall_thickness / height;
c = t * d_top + (1 - t) * bottom_diameter;
difference(){
circle(d=c + r);
circle(d=c);
}
}
}
}