@@ -55,7 +55,7 @@ case_depth = 10.0;
5555back_depth = 1.2 ;
5656
5757/* [Thick border] */
58- thick_border = false ; // Thick border, does not support side buttons
58+ thick_border = false ;
5959thick_border_width = 12.0 ;
6060thick_border_extra_depth = 15.0 ;
6161
@@ -236,6 +236,7 @@ side_button_base = 1; // Height of square rectangle below the button
236236side_button_base_border = 1 ; // Extra around width and height
237237side_button_base_inner = 1.0 ; // How much does the button base go inside the case body
238238side_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
14251428module 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
0 commit comments