nppilot-v2/hw/back_mount.scad

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();