Files
motherboard_backplate/backplate_customizer.scad
2019-05-01 12:15:17 -07:00

96 lines
3.2 KiB
OpenSCAD

/* [Main] */
// Vector of move(x,y), size(x, y) pairs
cutouts = [
[ [ 1.5, 2.5 ], [ 16.5, 32 ] ],
[ [ 19.75, 0 ], [ 38, 27.25 ] ],
[ [ 41.6, 0 ], [ 20, 30.5 ] ],
[ [ 23.9, 0 ], [ 14.75, 16.5 ] ],
[ [ 20.1, 0 ], [ 19, 30.5 ] ],
[ [ 23.5, 0 ], [ 25, 36 ] ]
];
// Bottom of cutouts to bottom edge
bottom_offset = 5;
/* [RarelyNeeded] */
// Size of backplate (x, y, z)
backbase = [ 156, 43, 1 ];
// Raised edge thickness
edge_thickness = 1;
// Raised edge height
edge_height = 3;
// Spacing around raised edge
edge_offset = 2;
// Snap-in dots per side
edge_dots = [ 9, 4 ];
// How far up the edge to start dots
dotzratio = .6; // [0:1]
/* [Hidden] */
// origin
origin = [0, 0, 0];
// Shift Dot Sphere
dotshift = .05;
// Dot Sphere Size
dotsize = .5;
backwithedge = [ backbase.x + 2 * (edge_offset + edge_thickness), backbase.y + 2 * (edge_thickness + edge_offset), backbase.z ];
fix_nonmanifold = .2;
backz = backbase.z + fix_nonmanifold;
module addCutouts(cutouts, n) {
curcutnum = len(cutouts) - n;
if (n > 0) {
if (curcutnum == 0) {
translate([cutouts[curcutnum][0][0], cutouts[curcutnum][0][1], -(fix_nonmanifold) / 2]) {
cube([cutouts[curcutnum][1][0], cutouts[curcutnum][1][1], backz], false);
addCutouts(cutouts, n - 1);
}
} else {
translate([cutouts[curcutnum][0][0], cutouts[curcutnum][0][1], 0]) {
cube([cutouts[curcutnum][1][0], cutouts[curcutnum][1][1], backz], false);
addCutouts(cutouts, n - 1);
}
}
}
}
module addEdges(edgetrfms, eoff, eheight) {
for (edgetrfm = edgetrfms) {
translate([edgetrfm[0][0] + eoff, edgetrfm[0][1] + eoff, edgetrfm[0][2] ]) {
cube([edgetrfm[1][0], edgetrfm[1][1], eheight ], false);
spacingx = floor(edgetrfm[1][0] / edgetrfm[2][0]);
spacingy = floor(edgetrfm[1][1] / edgetrfm[2][1]);
enddotx = edgetrfm[2][0];
enddoty = edgetrfm[2][1];
dshiftx = edgetrfm[0][0] ? dotshift + edge_thickness : dotshift;
dshifty = edgetrfm[0][1] ? dotshift + edge_thickness : dotshift;
shiftx = spacingy ? dshiftx: 0;
shifty = spacingx ? dshifty: 0;
for (dotoff = [1:((spacingx ? enddotx : enddoty) - 1)]) {
translate([ spacingx * dotoff + shiftx, spacingy * dotoff + shifty, dotzratio * edge_height]) {
sphere(dotsize);
}
}
}
}
}
translate(origin) {
union() {
difference() {
cube(backwithedge, false);
translate([edge_offset + edge_thickness, edge_offset + edge_thickness, 0]) {
addCutouts(cutouts, len(cutouts));
}
}
union() {
addEdges([
[ [ 0, 0, backbase.z ], [ backbase.x + 2 * edge_thickness, edge_thickness, 0 ], edge_dots ],
[ [ 0, 0, backbase.z ], [ edge_thickness, backbase.y + 2 * edge_thickness, 0 ], edge_dots ],
[ [ 0, backbase.y + edge_thickness, backbase.z ], [ backbase.x + 2 * edge_thickness, edge_thickness, 0 ], edge_dots ],
[ [ backbase.x + edge_thickness, 0, backbase.z ], [ edge_thickness, backbase.y + 2 * edge_thickness, 0 ], edge_dots ]
], edge_offset, edge_height);
}
}
};