include sens_h = 68; sens_l = 15; sens_w = 15; bottom_d = 5; base_d = 50; base_h = 3; wall = 2; clip_angle = 30; $fn = 128; for (angle = [0:120:360]) Rz(angle) { intersection() { difference($fn = 128) { cylinder(r = base_d/2, h = base_h); Tz(-eps) cylinder(r = base_d/2-wall, h = base_h + 2*eps); } Rz(-clip_angle/2) cube([base_d/2+eps, base_d/2+eps, base_h]); Rz(clip_angle/2) Sy(-1) cube([base_d/2+eps, base_d/2+eps, base_h]); } Rz(clip_angle/2) Ty(-wall/2) Tx(base_d/2) cylinder(r = wall/2, h = base_h); Rz(-clip_angle/2) Tx(base_d/2-3*wall) intersection() { difference() { cylinder(r = 3*wall, h = base_h); Tz(-eps) cylinder(r = 2*wall, h = base_h+2*eps); } Tx(-wall) Ty(-infty) cube(infty); } } // base_plate difference() { cylinder(r = base_d/2-3*wall, h = base_h); Tz(wall) cylinder(r = base_d/2-4*wall, h = base_h); } sens_side = 15; My() { Tx(-sens_side/2) Ty(sens_l/2) { cube([sens_side, wall, sens_h]); // sensor side Tz(sens_h/2+wall) Ry(90) Sx(2) cylinder(r=wall/2, h = sens_side); // middle strut } } translate([-sens_side/2, -sens_l/2-wall, sens_h-wall]) cube([sens_side, sens_l+2*wall, wall]);