69 lines
No EOL
1.9 KiB
OpenSCAD
69 lines
No EOL
1.9 KiB
OpenSCAD
include <BOSL2/std.scad>
|
|
include <BOSL2/screws.scad>
|
|
|
|
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);
|
|
} |