include include roll_d = 200; roll_d_in = 32; roll_l = 240; roll_ch_d = 12; roll_ch_l = 25; up_w = 20; base = [100,25,10]; hole_d = 4.5; r = 2; t = 7; t2 = 10; $slop = 0.2; clearance = 1; // clearance between rod and hole $fn = 180; scr = "M27,20"; scr_l = 20; module base(thread) { // base difference() { cuboid(base, rounding=r, edges=TOP); left(base[0]/3) cyl(h=base[2], d=hole_d, chamfer2=-2); right(base[0]/3) cyl(h=base[2], d=hole_d, chamfer2=-2); } // upright and hole fwd(base[1]/2 - t/2) difference() { chain_hull() { left(base[0]/2 - up_w/2 - r) cuboid([up_w,t,base[2]], rounding=r); up(roll_d/2) xrot(90) cyl(d=roll_d_in + 2*t2, h=t, rounding=r); right(base[0]/2 - up_w/2 - r) cuboid([up_w,t,base[2]], rounding=r); } up(roll_d/2) xrot(90) cyl(d=roll_d_in + clearance, h=t*2); } // thread if(is_string(thread)) { fwd(base[1]/2 - t/2) up(roll_d/2) xrot(90) difference() { up(t/2) union() { cyl(h=scr_l, d=roll_d_in, anchor=TOP, rounding1=r); cyl(h=t, d=roll_d_in + 2*t, anchor=TOP, rounding1=r); } up(t/2) screw_hole(thread, thread=true, l=scr_l+1, anchor=TOP, bevel1=2.5); } } } // base base(scr); fwd(base[1] + t) base(); // long pole fwd((base[1] + t)*2 + roll_d_in) union() { // cyl(h=roll_l - roll_ch_l, d=roll_d_in, anchor=BOTTOM); linear_sweep(circle(d=roll_d_in), h=roll_l - roll_ch_l, texture="diamonds", style="concave", tex_depth=0.5); up(roll_l - roll_ch_l) cyl(h=roll_ch_l, d1=roll_d_in, d2=roll_d_in-roll_ch_d, anchor=BOTTOM); // hex minkowski() { cyl(h=t2, d=roll_d_in*2, anchor=BOTTOM, $fn=6); sphere(d=r); } up(roll_l) screw(scr, l=scr_l, anchor=BOTTOM, bevel1=false); }