You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.3 KiB
50 lines
1.3 KiB
epsilon = 0.1;
|
|
$fn = 30;
|
|
|
|
module handle(r1 = 4, h1 = 2.5, r2 = 6) {
|
|
rotate_extrude() {
|
|
square([r1, h1]);
|
|
|
|
translate([0, h1 + sqrt(pow(r2, 2) - pow(r1, 2)), 0])
|
|
intersection() {
|
|
circle(r=r2, center=true);
|
|
translate([0, -r2, 0]) square([r2, 2 * r2]);
|
|
}
|
|
}
|
|
}
|
|
|
|
module montessori_cylinder(h, d) {
|
|
translate([0, 0, -h]) cylinder(h=h, d=d);
|
|
}
|
|
|
|
module montessori_cylinders(n = 10, origin = [0,0,0], h, d, margin = 5, on_base = true, play = 0) {
|
|
hn = lookup(n, h);
|
|
dn = lookup(n, d);
|
|
|
|
translate(origin + (on_base ? [0, 0, hn] : [0, 0, 0])) {
|
|
montessori_cylinder(hn, dn + play);
|
|
handle();
|
|
}
|
|
|
|
if (n > 1) {
|
|
montessori_cylinders(n = n - 1,
|
|
origin = origin + [ dn + margin, 0, 0 ],
|
|
h = h,
|
|
d = d,
|
|
margin = margin,
|
|
on_base = on_base,
|
|
play = play);
|
|
}
|
|
}
|
|
|
|
module montessori_cylinder_set(heights, diameters, bloc_base, bloc_height, play = 2) {
|
|
translate([ 0, -100, 0 ])
|
|
montessori_cylinders(h = heights, d = diameters);
|
|
|
|
difference() {
|
|
linear_extrude(bloc_height)
|
|
polygon(bloc_base);
|
|
translate([ 0, 0, bloc_height + epsilon ])
|
|
montessori_cylinders(h = heights, d = diameters, on_base = false, play = play);
|
|
}
|
|
}
|
|
|