Skip to content

Commit 77c66ac

Browse files
committed
side button holes
1 parent 39b7984 commit 77c66ac

File tree

5 files changed

+40
-36
lines changed

5 files changed

+40
-36
lines changed

cases/case1.scad

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ case_depth = 10.0;
5555
back_depth = 1.2;
5656

5757
/* [Thick border] */
58-
thick_border = false; // Thick border, does not support side buttons
58+
thick_border = false;
5959
thick_border_width = 12.0;
6060
thick_border_extra_depth = 15.0;
6161

@@ -236,6 +236,7 @@ side_button_base = 1; // Height of square rectangle below the button
236236
side_button_base_border = 1; // Extra around width and height
237237
side_button_base_inner = 1.0; // How much does the button base go inside the case body
238238
side_button_hole_gap = 0.3; // How much more to carve out of the hole
239+
side_button_fillet_radius = 1.0; // Radius of the fillet on the button
239240

240241
/* [Debug] */
241242
// Gap between STL parts for visual debugging
@@ -529,6 +530,8 @@ module caseThickBorder () {
529530
frame_full_height,
530531
case_depth + back_depth + thick_border_extra_depth + 22
531532
]);
533+
534+
sideButtonHoles();
532535
}
533536
}
534537

@@ -1423,59 +1426,59 @@ module piPinholesCooling() {
14231426
}
14241427

14251428
module sideButtonHoles() {
1426-
union() {
1429+
let(thick_border_add = (thick_border ? thick_border_width : 0)) {
14271430
// side buttons left
14281431
for (side_button = side_buttons_left) {
14291432
translate([
1430-
-side_button_extrude,
1433+
-side_button_extrude - thick_border_add,
14311434
side_button * frame_full_height - side_button_hole_gap - side_button_width / 2,
14321435
(case_depth - side_button_height) / 2 - side_button_hole_gap
14331436
])
14341437
filletBoxLeft(
1435-
panel_border_left + case_inner_padding_left + side_button_base + side_button_extrude,
1438+
panel_border_left + case_inner_padding_left + side_button_base + side_button_extrude + thick_border_add,
14361439
side_button_width + side_button_hole_gap * 2,
14371440
side_button_height + side_button_hole_gap * 2,
1438-
r=min(side_button_height / 2 - 0.01, fillet_radius_in_use),
1441+
r=min(side_button_height / 2 - 0.01, side_button_fillet_radius),
14391442
fn=12
14401443
);
14411444
if (side_button_base_inner > 0) {
14421445
translate([
14431446
panel_border_left + case_inner_padding_left - side_button_base_inner - 0.01,
14441447
side_button * frame_full_height - side_button_base_border - side_button_hole_gap - side_button_width / 2,
1445-
max((case_depth - side_button_height) / 2 - side_button_base_border - side_button_hole_gap, 0)
1448+
max((case_depth - side_button_height) / 2 - side_button_base_border - side_button_hole_gap, -0.01)
14461449
])
14471450
cube([
14481451
side_button_base + side_button_base_inner + 0.02,
14491452
side_button_width + side_button_base_border * 2 + side_button_hole_gap * 2,
1450-
min(side_button_height + side_button_base_border * 2 + side_button_hole_gap * 2, case_depth),
1453+
min(side_button_height + side_button_base_border * 2 + side_button_hole_gap * 2, case_depth) + 0.01,
14511454
]);
14521455
}
14531456
}
14541457

14551458
// side buttons right
14561459
for (side_button = side_buttons_right) {
14571460
translate([
1458-
frame_full_width - panel_border_right - case_inner_padding_right - side_button_base,
1461+
frame_full_width - panel_border_right - case_inner_padding_right,
14591462
side_button * frame_full_height - side_button_hole_gap - side_button_width / 2,
14601463
(case_depth - side_button_height) / 2 - side_button_hole_gap
14611464
])
14621465
filletBoxRight(
1463-
panel_border_right + case_inner_padding_right + side_button_base + side_button_extrude,
1466+
panel_border_right + case_inner_padding_right + side_button_base + side_button_extrude + thick_border_add,
14641467
side_button_width + side_button_hole_gap * 2,
14651468
side_button_height + side_button_hole_gap * 2,
1466-
r=min(side_button_height / 2 - 0.01, fillet_radius_in_use),
1469+
r=min(side_button_height / 2 - 0.01, side_button_fillet_radius),
14671470
fn=12
14681471
);
14691472
if (side_button_base_inner > 0) {
14701473
translate([
14711474
frame_full_width - panel_border_right - case_inner_padding_right - side_button_base - 0.01,
14721475
side_button * frame_full_height - side_button_base_border - side_button_hole_gap - side_button_width / 2,
1473-
max((case_depth - side_button_height) / 2 - side_button_base_border - side_button_hole_gap, 0)
1476+
max((case_depth - side_button_height) / 2 - side_button_base_border - side_button_hole_gap, -0.01)
14741477
])
14751478
cube([
14761479
side_button_base + side_button_base_inner + 0.02,
14771480
side_button_width + side_button_base_border * 2 + side_button_hole_gap * 2,
1478-
min(side_button_height + side_button_base_border * 2 + side_button_hole_gap * 2, case_depth),
1481+
min(side_button_height + side_button_base_border * 2 + side_button_hole_gap * 2, case_depth) + 0.01,
14791482
]);
14801483
}
14811484
}
@@ -1484,26 +1487,26 @@ module sideButtonHoles() {
14841487
for (side_button = side_buttons_top) {
14851488
translate([
14861489
side_button * frame_full_width - side_button_hole_gap - side_button_width / 2,
1487-
-side_button_extrude,
1490+
-side_button_extrude - thick_border_add,
14881491
(case_depth - side_button_height) / 2 - side_button_hole_gap
14891492
])
14901493
filletBoxUp(
14911494
side_button_width + side_button_hole_gap * 2,
1492-
panel_border_top + case_inner_padding_top + side_button_base + side_button_extrude - side_button_base_inner,
1495+
panel_border_top + case_inner_padding_top + side_button_base + side_button_extrude + thick_border_add,
14931496
side_button_height + side_button_hole_gap * 2,
1494-
r=min(side_button_height / 2 - 0.01, fillet_radius_in_use),
1497+
r=min(side_button_height / 2 - 0.01, side_button_fillet_radius),
14951498
fn=12
14961499
);
14971500
if (side_button_base_inner > 0) {
14981501
translate([
14991502
side_button * frame_full_width - side_button_base_border - side_button_hole_gap - side_button_width / 2,
15001503
panel_border_top + case_inner_padding_top - side_button_base_inner - 0.01,
1501-
max((case_depth - side_button_height) / 2 - side_button_base_border - side_button_hole_gap, 0)
1504+
max((case_depth - side_button_height) / 2 - side_button_base_border - side_button_hole_gap, -0.01)
15021505
])
15031506
cube([
15041507
side_button_width + side_button_base_border * 2 + side_button_hole_gap * 2,
15051508
side_button_base + side_button_base_inner,
1506-
min(side_button_height + side_button_base_border * 2 + side_button_hole_gap * 2, case_depth),
1509+
min(side_button_height + side_button_base_border * 2 + side_button_hole_gap * 2, case_depth) + 0.01,
15071510
]);
15081511
}
15091512
}
@@ -1512,26 +1515,26 @@ module sideButtonHoles() {
15121515
for (side_button = side_buttons_bottom) {
15131516
translate([
15141517
side_button * frame_full_width - side_button_hole_gap - side_button_width / 2,
1515-
frame_full_height - panel_border_bottom - case_inner_padding_bottom - side_button_base,
1518+
frame_full_height - panel_border_bottom - case_inner_padding_bottom,
15161519
(case_depth - side_button_height) / 2 - side_button_hole_gap
15171520
])
15181521
filletBoxDown(
15191522
side_button_width + side_button_hole_gap * 2,
1520-
panel_border_bottom + case_inner_padding_bottom + side_button_base + side_button_extrude - side_button_base_inner,
1523+
panel_border_bottom + case_inner_padding_bottom + side_button_base + side_button_extrude + thick_border_add + 0.01,
15211524
side_button_height + side_button_hole_gap * 2,
1522-
r=min(side_button_height / 2 - 0.01, fillet_radius_in_use),
1525+
r=min(side_button_height / 2 - 0.01, side_button_fillet_radius),
15231526
fn=12
15241527
);
15251528
if (side_button_base_inner > 0) {
15261529
translate([
15271530
side_button * frame_full_width - side_button_base_border - side_button_hole_gap - side_button_width / 2,
15281531
frame_full_height - panel_border_bottom - case_inner_padding_bottom - side_button_base - 0.01,
1529-
max((case_depth - side_button_height) / 2 - side_button_base_border - side_button_hole_gap, 0)
1532+
max((case_depth - side_button_height) / 2 - side_button_base_border - side_button_hole_gap, -0.01)
15301533
])
15311534
cube([
15321535
side_button_width + side_button_base_border * 2 + side_button_hole_gap * 2,
15331536
side_button_base + side_button_base_inner,
1534-
min(side_button_height + side_button_base_border * 2 + side_button_hole_gap * 2, case_depth),
1537+
min(side_button_height + side_button_base_border * 2 + side_button_hole_gap * 2, case_depth) + 0.01,
15351538
]);
15361539
}
15371540
}
@@ -1542,7 +1545,8 @@ module sideButtons() {
15421545
let(
15431546
side_button_x_offset = (side_button_width + side_button_base_border * 2 + side_button_extrude * 2 + 2),
15441547
side_button_y_offset = (side_button_height + side_button_base_border * 2 + side_button_extrude * 2 + 2),
1545-
side_button_base_height = min(side_button_height + side_button_base_border * 2, case_depth - 2 * side_button_hole_gap)
1548+
side_button_base_height = min(side_button_height + side_button_base_border * 2, case_depth - 2 * side_button_hole_gap),
1549+
thick_border_add = (thick_border ? thick_border_width : 0)
15461550
) {
15471551
if (side_buttons_left) {
15481552
for (idx = [ 0 : len(side_buttons_left) - 1 ] ) {
@@ -1554,8 +1558,8 @@ module sideButtons() {
15541558
filletBoxBottom(
15551559
side_button_width,
15561560
side_button_height,
1557-
side_button_base + side_button_extrude + panel_border_left + case_inner_padding_left - side_button_base_inner,
1558-
r=min(side_button_height / 2 - 0.01, fillet_radius_in_use),
1561+
side_button_base + side_button_extrude + panel_border_left + case_inner_padding_left - side_button_base_inner + thick_border_add,
1562+
r=min(side_button_height / 2 - 0.01, side_button_fillet_radius),
15591563
fn=12
15601564
);
15611565

@@ -1582,8 +1586,8 @@ module sideButtons() {
15821586
filletBoxBottom(
15831587
side_button_width,
15841588
side_button_height,
1585-
side_button_base + side_button_extrude + panel_border_right + case_inner_padding_right - side_button_base_inner,
1586-
r=min(side_button_height / 2 - 0.01, fillet_radius_in_use),
1589+
side_button_base + side_button_extrude + panel_border_right + case_inner_padding_right - side_button_base_inner + thick_border_add,
1590+
r=min(side_button_height / 2 - 0.01, side_button_fillet_radius),
15871591
fn=12
15881592
);
15891593

@@ -1610,8 +1614,8 @@ module sideButtons() {
16101614
filletBoxBottom(
16111615
side_button_width,
16121616
side_button_height,
1613-
side_button_base + side_button_extrude + panel_border_top + case_inner_padding_top - side_button_base_inner,
1614-
r=min(side_button_height / 2 - 0.01, fillet_radius_in_use),
1617+
side_button_base + side_button_extrude + panel_border_top + case_inner_padding_top - side_button_base_inner + thick_border_add,
1618+
r=min(side_button_height / 2 - 0.01, side_button_fillet_radius),
16151619
fn=12
16161620
);
16171621

@@ -1638,8 +1642,8 @@ module sideButtons() {
16381642
filletBoxBottom(
16391643
side_button_width,
16401644
side_button_height,
1641-
side_button_base + side_button_extrude + panel_border_bottom + case_inner_padding_bottom - side_button_base_inner,
1642-
r=min(side_button_height / 2 - 0.01, fillet_radius_in_use),
1645+
side_button_base + side_button_extrude + panel_border_bottom + case_inner_padding_bottom - side_button_base_inner + thick_border_add,
1646+
r=min(side_button_height / 2 - 0.01, side_button_fillet_radius),
16431647
fn=12
16441648
);
16451649

cases/pimoroni.13in3.spectra.12mm.scad

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ case_inner_padding_top = 4;
3131
case_inner_padding_bottom = 4;
3232

3333
/* [Thick border] */
34-
thick_border = false; // Thick border, does not support side buttons
34+
thick_border = false;
3535
thick_border_width = 12.0;
3636
thick_border_extra_depth = 15.0;
3737

cases/pimoroni.13in3.spectra.6mm.scad

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ case_inner_padding_top = 4;
3131
case_inner_padding_bottom = 4;
3232

3333
/* [Thick border] */
34-
thick_border = false; // Thick border, does not support side buttons
34+
thick_border = true;
3535
thick_border_width = 12.0;
3636
thick_border_extra_depth = 15.0;
3737

@@ -99,7 +99,7 @@ pi_pinholes_x_percentage = 50;
9999
pi_pinholes_y_percentage = 70;
100100

101101
/* [Side buttons] */
102-
side_buttons_left = [0.192, 0.398, 0.602, 0.808];
102+
side_buttons_left = []; //[0.192, 0.398, 0.602, 0.808];
103103
side_buttons_right = [];
104104
side_buttons_top = [];
105105
side_buttons_bottom = [];

cases/pimoroni.7in3.spectra.scad

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ case_inner_padding_top = 4;
3131
case_inner_padding_bottom = 4;
3232

3333
/* [Thick border] */
34-
thick_border = false; // Thick border, does not support side buttons
34+
thick_border = false;
3535
thick_border_width = 12.0;
3636
thick_border_extra_depth = 15.0;
3737

cases/waveshare.13in3e.scad

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ panel_border_bottom = 16.1;
2525
case_inner_padding_right = 6;
2626

2727
/* [Thick border] */
28-
thick_border = false; // Thick border, does not support side buttons
28+
thick_border = false;
2929
thick_border_width = 12.0;
3030
thick_border_extra_depth = 15.0;
3131

0 commit comments

Comments
 (0)