Simplified some of the code in box.scad in response to comments from SCA2D.

This commit is contained in:
Chris Palmer 2020-11-27 18:23:44 +00:00
parent 773a53829f
commit 9bb9f09dca
1 changed files with 40 additions and 27 deletions

View File

@ -121,11 +121,12 @@ module grill(width, height, r = 1000, poly = false, h = 0) { //! A staggered arr
module box_corner_profile_2D(type) { //! The 2D shape of the corner profile. module box_corner_profile_2D(type) { //! The 2D shape of the corner profile.
t = box_sheet_slot(type); t = box_sheet_slot(type);
inset = box_corner_gap(type) + box_profile_overlap(type);
difference() { difference() {
union() { union() {
quadrant(box_hole_inset(type) + box_boss_r(type), box_boss_r(type)); // inside corner quadrant(box_hole_inset(type) + box_boss_r(type), box_boss_r(type)); // inside corner
translate([box_corner_gap(type) + box_profile_overlap(type), box_corner_gap(type) + box_profile_overlap(type)]) translate([inset, inset])
rotate(180) rotate(180)
quadrant(box_profile_overlap(type) + box_corner_rad(type), box_corner_rad(type)); // outside corner quadrant(box_profile_overlap(type) + box_corner_rad(type), box_corner_rad(type)); // outside corner
} }
@ -212,33 +213,39 @@ module box_bezel(type, bottom) { //! Generates top and bottom bezel STLs
feet = bottom && box_feet(type); feet = bottom && box_feet(type);
t = box_sheet_slot(type); t = box_sheet_slot(type);
outset = box_outset(type); outset = box_outset(type);
inset = box_inset(type);
inner_r = box_sheet_r(type); inner_r = box_sheet_r(type);
foot_height = box_corner_gap(type) + sheet_thickness(box_base_sheet(type)) + washer_thickness(box_washer(type)) + screw_head_height(box_screw(type)) + box_profile_overlap(type) + 2; cgap = box_corner_gap(type);
foot_height = cgap + sheet_thickness(box_base_sheet(type)) + washer_thickness(box_washer(type)) + screw_head_height(box_screw(type)) + box_profile_overlap(type) + 2;
foot_length = box_corner_rad(type) * 2; foot_length = box_corner_rad(type) * 2;
height = box_bezel_height(type, bottom); height = box_bezel_height(type, bottom);
foot_extension = foot_height - height; foot_extension = foot_height - height;
difference() { difference() {
w = box_width(type);
d = box_depth(type);
translate_z(-box_profile_overlap(type)) difference() { translate_z(-box_profile_overlap(type)) difference() {
rounded_rectangle([box_width(type) + 2 * outset, box_depth(type) + 2 * outset, feet ? foot_height : height], box_corner_rad(type), false); tw = w + 2 * outset;
td = d + 2 * outset;
rounded_rectangle([tw, td, feet ? foot_height : height], box_corner_rad(type), false);
// //
// Remove edges between the feet // Remove edges between the feet
// //
if(feet) if(feet)
hull() { hull() {
translate_z(height + 0.5) translate_z(height + 0.5)
cube([box_width(type) - 2 * foot_length, box_depth(type) + 2 * outset + 1, 1], center = true); cube([w - 2 * foot_length, td + 1, 1], center = true);
translate_z(foot_height + 1) translate_z(foot_height + 1)
cube([box_width(type) - 2 * (foot_length - foot_extension), box_depth(type) + 2 * outset + 1, 1], center = true); cube([w - 2 * (foot_length - foot_extension), td + 1, 1], center = true);
} }
if(feet) if(feet)
hull() { hull() {
translate_z(height + 0.5) translate_z(height + 0.5)
cube([box_width(type) + 2 * outset + 1, box_depth(type) - 2 * foot_length, 1], center = true); cube([tw + 1, d - 2 * foot_length, 1], center = true);
translate_z(foot_height + 1) translate_z(foot_height + 1)
cube([box_width(type) + 2 * outset + 1, box_depth(type) - 2 * (foot_length - foot_extension), 1], center = true); cube([tw + 1, d - 2 * (foot_length - foot_extension), 1], center = true);
} }
} }
// //
@ -247,28 +254,28 @@ module box_bezel(type, bottom) { //! Generates top and bottom bezel STLs
translate_z(-box_profile_overlap(type)) translate_z(-box_profile_overlap(type))
linear_extrude(2 * box_profile_overlap(type), center = true) linear_extrude(2 * box_profile_overlap(type), center = true)
for(i = [-1, 1]) { for(i = [-1, 1]) {
translate([i * (box_width(type) / 2 + t / 2 - sheet_slot_clearance / 2), 0]) translate([i * (w + t - sheet_slot_clearance) / 2, 0])
square([t, box_depth(type) - 2 * box_corner_gap(type)], center = true); square([t, d - 2 * cgap], center = true);
translate([0, i * (box_depth(type) / 2 + t / 2 - sheet_slot_clearance / 2)]) translate([0, i * (d + t - sheet_slot_clearance) / 2])
square([box_width(type) - 2 * box_corner_gap(type), t], center = true); square([w - 2 * cgap, t], center = true);
} }
// //
// recess for top / bottom panel // recess for top / bottom panel
// //
translate_z(box_corner_gap(type)) translate_z(cgap)
rounded_rectangle([box_width(type) + bezel_clearance, box_depth(type) + bezel_clearance, height], inner_r + bezel_clearance / 2, false); rounded_rectangle([w + bezel_clearance, d + bezel_clearance, height], inner_r + bezel_clearance / 2, false);
// //
// leave plastic over the corner profiles // leave plastic over the corner profiles
// //
translate_z(-box_profile_overlap(type) - 1) translate_z(-box_profile_overlap(type) - 1)
linear_extrude(box_profile_overlap(type) + box_corner_gap(type) + 2) linear_extrude(box_profile_overlap(type) + cgap + 2)
union() { union() {
difference() { difference() {
square([box_width(type) - 2 * box_inset(type), square([w - 2 * inset,
box_depth(type) - 2 * box_inset(type)], center = true); d - 2 * inset], center = true);
box_corner_quadrants(type, box_width(type), box_depth(type)); box_corner_quadrants(type, w, d);
} }
box_screw_hole_positions(type) box_screw_hole_positions(type)
poly_circle(screw_clearance_radius(box_screw(type))); poly_circle(screw_clearance_radius(box_screw(type)));
@ -291,7 +298,9 @@ module box_bezel_section(type, bottom, rows, cols, x, y) { //! Generates interlo
dw = bw - 2 * dowel_wall; dw = bw - 2 * dowel_wall;
dh = box_bezel_height(type, bottom) - dowel_h_wall; dh = box_bezel_height(type, bottom) - dowel_h_wall;
dh2 = box_profile_overlap(type) + box_corner_gap(type) - dowel_h_wall; profile_overlap = box_profile_overlap(type);
dh2 = profile_overlap + box_corner_gap(type) - dowel_h_wall;
end_clearance = 0.5; end_clearance = 0.5;
module male() { module male() {
@ -299,14 +308,14 @@ module box_bezel_section(type, bottom, rows, cols, x, y) { //! Generates interlo
linear_extrude(dowel_length - 2 * end_clearance, center = true) linear_extrude(dowel_length - 2 * end_clearance, center = true)
difference() { difference() {
union() { union() {
h = dh - layer_height; h1 = dh - layer_height;
h2 = dh2 - layer_height; h2 = dh2 - layer_height;
hull() { hull() {
translate([bw / 2, h / 2]) translate([bw / 2, h1 / 2])
square([dw - 1, h], center = true); square([dw - 1, h1], center = true);
translate([bw / 2, (h - 1) / 2]) translate([bw / 2, (h1 - 1) / 2])
square([dw, h - 1], center = true); square([dw, h1 - 1], center = true);
} }
hull() { hull() {
@ -318,7 +327,7 @@ module box_bezel_section(type, bottom, rows, cols, x, y) { //! Generates interlo
} }
} }
translate([bw2 / 2, 0]) translate([bw2 / 2, 0])
square([box_sheet_slot(type), 2 * box_profile_overlap(type)], center = true); square([box_sheet_slot(type), 2 * profile_overlap], center = true);
} }
} }
@ -359,7 +368,7 @@ module box_bezel_section(type, bottom, rows, cols, x, y) { //! Generates interlo
render() difference() { render() difference() {
union() { union() {
clip(xmin = 0, xmax = w, ymin = 0, ymax = h) clip(xmin = 0, xmax = w, ymin = 0, ymax = h)
translate([tw / 2 - x * w, th / 2 - y * h, box_profile_overlap(type)]) translate([tw / 2 - x * w, th / 2 - y * h, profile_overlap])
box_bezel(type, bottom); box_bezel(type, bottom);
if(x < cols - 1 && y == 0) if(x < cols - 1 && y == 0)
@ -419,10 +428,14 @@ module box_bezel_section(type, bottom, rows, cols, x, y) { //! Generates interlo
} }
} }
module box_screw_hole_positions(type) module box_screw_hole_positions(type) {
inset = box_hole_inset(type);
w = box_width(type) / 2 - inset;
d = box_depth(type) / 2 - inset;
for(x = [-1, 1], y = [-1, 1]) for(x = [-1, 1], y = [-1, 1])
translate([x * (box_width(type) / 2 - box_hole_inset(type)), y * (box_depth(type) / 2 - box_hole_inset(type))]) translate([x * w, y * d])
children(); children();
}
module box_base_blank(type) { //! Generates a 2D template for the base sheet module box_base_blank(type) { //! Generates a 2D template for the base sheet
dxf("box_base"); dxf("box_base");