120 lines
1.8 KiB
OpenSCAD
120 lines
1.8 KiB
OpenSCAD
$fn = 20;
|
|
through = 20;
|
|
d = 4.5;
|
|
e = 0.01;
|
|
|
|
function midxy(a, b) = [(a[0]-b[0])/2, (a[1]-b[1])/2, 0];
|
|
function centerx(w) = [-w/2, 0, 0];
|
|
|
|
module rcube(s, r=2) {
|
|
hull() {
|
|
for (y = [r, s[1]-r]) {
|
|
for (x = [r, s[0]-r]) {
|
|
translate([x, y, 0]) {
|
|
cylinder(r=r, s[2]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module sixmount() {
|
|
pad = 1.5;
|
|
m = 3;
|
|
ow = 10;
|
|
oh = 6.5;
|
|
s = [ow+3, 10, 4.5];
|
|
color("grey") {
|
|
translate(midxy(s, [ow, oh, 0])) {
|
|
translate([m/2, m/2, -through/2])
|
|
cylinder(d=m, through);
|
|
translate([ow-m/2, oh-m/2, -through/2])
|
|
cylinder(d=m, through);
|
|
}
|
|
}
|
|
translate([-pad/2, -pad/2, 0])
|
|
rcube(s + [pad, pad, 0], 1);
|
|
}
|
|
|
|
module midmounts() {
|
|
m = 2;
|
|
ow = 18;
|
|
oh = 6.2;
|
|
h = 3.2;
|
|
w = 7.5;
|
|
for (y = [h+m/2, h+oh-m/2]) {
|
|
for (x = [-ow/2+m/2, ow/2-m/2]) {
|
|
translate([x, y, -through/2]) {
|
|
cylinder(d=m, through);
|
|
}
|
|
}
|
|
}
|
|
for (x = [-ow/2+m/2, ow/2-m/2]) {
|
|
hull() {
|
|
for (y = [h+m/2, h+oh-m/2]) {
|
|
translate([x, y, 0]) {
|
|
cylinder(d=w, d);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module sixmounts() {
|
|
d = 0.5 + 37 + 3;
|
|
ang = 26;
|
|
translate([d/2, 0, 0])
|
|
rotate(ang, [0, 0, 1])
|
|
sixmount();
|
|
translate([-d/2, 0, 0])
|
|
mirror([1, 0, 0]) {
|
|
rotate(ang, [0, 0, 1])
|
|
sixmount();
|
|
}
|
|
}
|
|
|
|
module crossbar() {
|
|
s = [45, 10, d];
|
|
translate([-s[0]/2, 0, 0])
|
|
rcube(s, r=1);
|
|
}
|
|
|
|
module bar() {
|
|
w = 100;
|
|
d = 16;
|
|
h = 10;
|
|
t = 3;
|
|
r = 2;
|
|
translate(centerx(w)) {
|
|
hull() {
|
|
translate([r+d, r, 0])
|
|
cylinder(r=r, t);
|
|
translate([w-r-d, r, 0])
|
|
cylinder(r=r, t);
|
|
translate([0, d-r, 0])
|
|
cube([r, r, t]);
|
|
translate([w-r, d-r, 0])
|
|
cube([r, r, t]);
|
|
}
|
|
}
|
|
translate([0, d, 0]) {
|
|
translate(centerx(w))
|
|
cube([w, t, t+2]);
|
|
}
|
|
}
|
|
|
|
module assembly() {
|
|
module cutout() {
|
|
sixmounts();
|
|
midmounts();
|
|
crossbar();
|
|
}
|
|
difference() {
|
|
bar();
|
|
translate([0, -e, 2])
|
|
cutout();
|
|
}
|
|
}
|
|
|
|
assembly();
|