include mag_base = 16 + 1; mag_h = 6 + 1; // height of the wider base mag_width = 11 + 0.5; mag_length = 37; magnet_h = 0.8; magnet_d = 4.3; magnet_n1 = 7; magnet_n2 = 3; t = 3; n = 4; h = 20; width = n * mag_base + (n+1) * t; l = mag_length + t; $fn = 360; difference() { round3d(0.75, $fn=3) { back(width/4) cuboid([width, t, h]); difference() { cuboid([width,l,h]); xrot(-3) left(width/2) for(i = [0 : n-1]) { up(h/2) down(t) down(magnet_h) down(mag_h/2) right((i+1)*t) right(i*mag_base) right(mag_base/2) union() { cuboid([mag_base,l+0.1,mag_h]); down(mag_h/2) down(h/2) cuboid([mag_width,l+0.1,h+0.1]); } } } } up(h/2) down(magnet_h/2 - 0.1) left(width/2 - magnet_d/2 - t) back(l/2 - magnet_d/2 - t) for(i = [0 : (width - magnet_d - t*2)/(magnet_n1-1) : width]) { for(j = [0 : (l - magnet_d - t*2)/(magnet_n2-1) : l]) { right(i) fwd(j) cyl(d=magnet_d, h=magnet_h); } } }