$fn = 50; module torus(r1=1, r2=2, angle=360, $fn=$fn){ rotate_extrude(convexity=10, $fn=$fn) translate([r2, 0, 0]) circle(r=r1, $fn=$fn); } module rounded_cube(size, r=0, center=false, $fn=$fn){ translate([r, r, r]) minkowski(){ cube([size[0]-r*2, size[1]-r*2, size[2]-r*2]); sphere(r, $fn=$fn); } } boden_h = 1; sphere_d = 3; sphere_spiel = 0.5; sphere_ueberstand = 0.5; torus_d = 20; befestigung_d = 3; screw_hole_d = 3; gesamt_h = sphere_d + boden_h - sphere_ueberstand; gesamt_r = torus_d / 2 + sphere_d; torus_inner_r = (sphere_d + sphere_spiel) / 2; difference() { difference() { union () { cylinder(r=gesamt_r, h=gesamt_h); translate([-befestigung_d, -(gesamt_r + gesamt_h),0]) { cube([befestigung_d, (gesamt_r + gesamt_h) * 2, gesamt_h], r=0.25); } } translate([0,0,torus_inner_r + boden_h]) { torus(r1=torus_inner_r, r2=torus_d / 2); } } // Boden translate([0,-gesamt_r,0]) cube([gesamt_r, gesamt_r*2, sphere_d + boden_h]); // Screw holes translate([-befestigung_d,-(gesamt_r + gesamt_h / 2),gesamt_h / 2]) { rotate(a = [0, 90, 0]) cylinder(d=screw_hole_d, h=befestigung_d); } translate([-befestigung_d,(gesamt_r + gesamt_h / 2),gesamt_h / 2]) { rotate(a = [0, 90, 0]) cylinder(d=screw_hole_d, h=befestigung_d); } }