@@ -231,10 +231,11 @@ side_buttons_top = [];
231
231
side_buttons_bottom = [];
232
232
side_button_width = 9.2 ;
233
233
side_button_height = 3.2 ;
234
- side_button_extrude = 1.5 ;
235
- side_button_base = 1 ;
236
- side_button_base_border = 0.8 ;
237
- side_button_hole_gap = 0.3 ;
234
+ side_button_extrude = 1.5 ; // How much it comes out of the case
235
+ side_button_base = 1 ; // Height of square rectangle below the button
236
+ side_button_base_border = 0.8 ; // Extra around width and height
237
+ side_button_base_inner = 1.0 ; // How much does the button base go inside the case body
238
+ side_button_hole_gap = 0.3 ; // How much more to carve out of the hole
238
239
239
240
/* [Debug] */
240
241
// Gap between STL parts for visual debugging
@@ -1422,174 +1423,233 @@ module piPinholesCooling() {
1422
1423
}
1423
1424
1424
1425
module sideButtonHoles() {
1425
- // side buttons left
1426
- for (side_button = side_buttons_left) {
1427
- translate ([
1428
- - side_button_extrude,
1429
- side_button * (frame_full_height - side_button_width) / 100 - side_button_hole_gap,
1430
- (case_depth - side_button_height) / 2 - side_button_hole_gap
1431
- ])
1432
- filletBoxLeft(
1433
- panel_border_left + case_inner_padding_left + side_button_base + side_button_extrude,
1434
- side_button_width + side_button_hole_gap * 2 ,
1435
- side_button_height + side_button_hole_gap * 2 ,
1436
- min (side_button_height / 2 - 0.01 , fillet_radius_in_use)
1437
- );
1438
- }
1439
-
1440
- // side buttons right
1441
- for (side_button = side_buttons_right) {
1442
- translate ([
1443
- frame_full_width - panel_border_right - case_inner_padding_right - side_button_base,
1444
- side_button * (frame_full_height - side_button_width) / 100 - side_button_hole_gap,
1445
- (case_depth - side_button_height) / 2 - side_button_hole_gap
1446
- ])
1447
- filletBoxRight(
1448
- panel_border_right + case_inner_padding_right + side_button_base + side_button_extrude,
1449
- side_button_width + side_button_hole_gap * 2 ,
1450
- side_button_height + side_button_hole_gap * 2 ,
1451
- min (side_button_height / 2 - 0.01 , fillet_radius_in_use)
1452
- );
1453
- }
1454
-
1455
- // side buttons top
1456
- for (side_button = side_buttons_top) {
1457
- translate ([
1458
- side_button * (frame_full_width - side_button_width) / 100 - side_button_hole_gap,
1459
- - side_button_extrude,
1460
- (case_depth - side_button_height) / 2 - side_button_hole_gap
1461
- ])
1462
- filletBoxUp(
1463
- side_button_width + side_button_hole_gap * 2 ,
1464
- panel_border_top + case_inner_padding_top + side_button_base + side_button_extrude,
1465
- side_button_height + side_button_hole_gap * 2 ,
1466
- min (side_button_height / 2 - 0.01 , fillet_radius_in_use)
1467
- );
1468
- }
1469
-
1470
- // side buttons bottom
1471
- for (side_button = side_buttons_bottom) {
1472
- translate ([
1473
- side_button * (frame_full_width - side_button_width) / 100 - side_button_hole_gap,
1474
- frame_full_height - panel_border_bottom - case_inner_padding_bottom - side_button_base,
1475
- (case_depth - side_button_height) / 2 - side_button_hole_gap
1476
- ])
1477
- filletBoxDown(
1478
- side_button_width + side_button_hole_gap * 2 ,
1479
- panel_border_bottom + case_inner_padding_bottom + side_button_base + side_button_extrude,
1480
- side_button_height + side_button_hole_gap * 2 ,
1481
- min (side_button_height / 2 - 0.01 , fillet_radius_in_use)
1482
- );
1483
- }
1484
- }
1485
-
1486
-
1487
- module sideButtons() {
1488
- if (side_buttons_left) {
1489
- for (idx = [ 0 : len(side_buttons_left) - 1 ] ) {
1426
+ union () {
1427
+ // side buttons left
1428
+ for (side_button = side_buttons_left) {
1490
1429
translate ([
1491
- idx * (side_button_width + side_button_extrude * 2 + 2 ) ,
1492
- 0 ,
1493
- 0
1430
+ - side_button_extrude,
1431
+ side_button * (frame_full_height - side_button_width) - side_button_hole_gap ,
1432
+ (case_depth - side_button_height) / 2 - side_button_hole_gap
1494
1433
])
1495
- filletBoxBottom(
1496
- side_button_width,
1497
- side_button_height,
1498
- side_button_base + side_button_extrude + panel_border_left + case_inner_padding_left,
1499
- min (side_button_height / 2 - 0.01 , fillet_radius_in_use)
1434
+ filletBoxLeft(
1435
+ panel_border_left + case_inner_padding_left + side_button_base + side_button_extrude,
1436
+ side_button_width + side_button_hole_gap * 2 ,
1437
+ side_button_height + side_button_hole_gap * 2 ,
1438
+ r= min (side_button_height / 2 - 0.01 , fillet_radius_in_use),
1439
+ fn= 12
1500
1440
);
1441
+ if (side_button_base_inner > 0 ) {
1442
+ translate ([
1443
+ panel_border_left + case_inner_padding_left - side_button_base_inner - 0.01 ,
1444
+ side_button * (frame_full_height - side_button_width) - side_button_base_border - side_button_hole_gap,
1445
+ (case_depth - side_button_height) / 2 - side_button_base_border - side_button_hole_gap
1446
+ ])
1447
+ cube ([
1448
+ side_button_base + side_button_base_inner + 0.02 ,
1449
+ side_button_width + side_button_base_border * 2 + side_button_hole_gap * 2 ,
1450
+ side_button_height + side_button_base_border * 2 + side_button_hole_gap * 2 ,
1451
+ ]);
1452
+ }
1453
+ }
1501
1454
1455
+ // side buttons right
1456
+ for (side_button = side_buttons_right) {
1502
1457
translate ([
1503
- idx * (side_button_width + side_button_extrude * 2 + 2 ) - side_button_base_border,
1504
- - side_button_base_border,
1505
- 0
1458
+ frame_full_width - panel_border_right - case_inner_padding_right - side_button_base,
1459
+ side_button * (frame_full_height - side_button_width) - side_button_hole_gap,
1460
+ (case_depth - side_button_height) / 2 - side_button_hole_gap
1506
1461
])
1507
- cube ([
1508
- side_button_width + side_button_base_border * 2 ,
1509
- side_button_height + side_button_base_border * 2 ,
1510
- side_button_base
1511
- ]);
1462
+ filletBoxRight(
1463
+ panel_border_right + case_inner_padding_right + side_button_base + side_button_extrude,
1464
+ side_button_width + side_button_hole_gap * 2 ,
1465
+ side_button_height + side_button_hole_gap * 2 ,
1466
+ r= min (side_button_height / 2 - 0.01 , fillet_radius_in_use),
1467
+ fn= 12
1468
+ );
1469
+ if (side_button_base_inner > 0 ) {
1470
+ translate ([
1471
+ frame_full_width - panel_border_right - case_inner_padding_right - side_button_base - 0.01 ,
1472
+ side_button * (frame_full_height - side_button_width) - side_button_base_border - side_button_hole_gap,
1473
+ (case_depth - side_button_height) / 2 - side_button_base_border - side_button_hole_gap
1474
+ ])
1475
+ cube ([
1476
+ side_button_base + side_button_base_inner + 0.02 ,
1477
+ side_button_width + side_button_base_border * 2 + side_button_hole_gap * 2 ,
1478
+ side_button_height + side_button_base_border * 2 + side_button_hole_gap * 2 ,
1479
+ ]);
1480
+ }
1512
1481
}
1513
- }
1514
1482
1515
- if (side_buttons_right) {
1516
- for (idx = [ 0 : len(side_buttons_right) - 1 ] ) {
1483
+ // side buttons top
1484
+ for (side_button = side_buttons_top ) {
1517
1485
translate ([
1518
- idx * (side_button_width + side_button_extrude * 2 + 2 ),
1519
- side_button_height + side_button_extrude * 2 + 2 ,
1520
- 0
1486
+ side_button * (frame_full_width - side_button_width) - side_button_hole_gap,
1487
+ - side_button_extrude,
1488
+ (case_depth - side_button_height) / 2 - side_button_hole_gap
1521
1489
])
1522
- filletBoxBottom(
1523
- side_button_width,
1524
- side_button_height,
1525
- side_button_base + side_button_extrude + panel_border_right + case_inner_padding_right,
1526
- min (side_button_height / 2 - 0.01 , fillet_radius_in_use)
1490
+ filletBoxUp(
1491
+ 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,
1493
+ side_button_height + side_button_hole_gap * 2 ,
1494
+ r= min (side_button_height / 2 - 0.01 , fillet_radius_in_use),
1495
+ fn= 12
1527
1496
);
1497
+ if (side_button_base_inner > 0 ) {
1498
+ translate ([
1499
+ side_button * (frame_full_width - side_button_width) - side_button_base_border - side_button_hole_gap,
1500
+ panel_border_top + case_inner_padding_top - side_button_base_inner - 0.01 ,
1501
+ (case_depth - side_button_height) / 2 - side_button_base_border - side_button_hole_gap
1502
+ ])
1503
+ cube ([
1504
+ side_button_width + side_button_base_border * 2 + side_button_hole_gap * 2 ,
1505
+ side_button_base + side_button_base_inner,
1506
+ side_button_height + side_button_base_border * 2 + side_button_hole_gap * 2 ,
1507
+ ]);
1508
+ }
1509
+ }
1528
1510
1511
+ // side buttons bottom
1512
+ for (side_button = side_buttons_bottom) {
1529
1513
translate ([
1530
- idx * (side_button_width + side_button_extrude * 2 + 2 ) - side_button_base_border ,
1531
- side_button_height + side_button_extrude * 2 + 2 - side_button_base_border ,
1532
- 0
1514
+ side_button * (frame_full_width - side_button_width ) - side_button_hole_gap ,
1515
+ frame_full_height - panel_border_bottom - case_inner_padding_bottom - side_button_base ,
1516
+ (case_depth - side_button_height) / 2 - side_button_hole_gap
1533
1517
])
1534
- cube ([
1535
- side_button_width + side_button_base_border * 2 ,
1536
- side_button_height + side_button_base_border * 2 ,
1537
- side_button_base
1538
- ]);
1518
+ filletBoxDown(
1519
+ 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,
1521
+ side_button_height + side_button_hole_gap * 2 ,
1522
+ r= min (side_button_height / 2 - 0.01 , fillet_radius_in_use),
1523
+ fn= 12
1524
+ );
1525
+ if (side_button_base_inner > 0 ) {
1526
+ translate ([
1527
+ side_button * (frame_full_width - side_button_width) - side_button_base_border - side_button_hole_gap,
1528
+ frame_full_height - panel_border_bottom - case_inner_padding_bottom - side_button_base - 0.01 ,
1529
+ (case_depth - side_button_height) / 2 - side_button_base_border - side_button_hole_gap
1530
+ ])
1531
+ cube ([
1532
+ side_button_width + side_button_base_border * 2 + side_button_hole_gap * 2 ,
1533
+ side_button_base + side_button_base_inner,
1534
+ side_button_height + side_button_base_border * 2 + side_button_hole_gap * 2 ,
1535
+ ]);
1536
+ }
1539
1537
}
1540
1538
}
1539
+ }
1541
1540
1542
- if (side_buttons_top) {
1543
- for (idx = [ 0 : len(side_buttons_top) - 1 ] ) {
1544
- translate ([
1545
- idx * (side_button_width + side_button_extrude * 2 + 2 ),
1546
- (side_button_height + side_button_extrude * 2 + 2 ) * 2 ,
1547
- 0
1548
- ])
1549
- filletBoxBottom(
1550
- side_button_width,
1551
- side_button_height,
1552
- side_button_base + side_button_extrude + panel_border_top + case_inner_padding_top,
1553
- min (side_button_height / 2 - 0.01 , fillet_radius_in_use)
1554
- );
1541
+ module sideButtons() {
1542
+ union () {
1543
+ if (side_buttons_left) {
1544
+ for (idx = [ 0 : len(side_buttons_left) - 1 ] ) {
1545
+ translate ([
1546
+ idx * (side_button_width + side_button_extrude * 2 + 2 ),
1547
+ 0 ,
1548
+ 0
1549
+ ])
1550
+ filletBoxBottom(
1551
+ side_button_width,
1552
+ side_button_height,
1553
+ side_button_base + side_button_extrude + panel_border_left + case_inner_padding_left - side_button_base_inner,
1554
+ r= min (side_button_height / 2 - 0.01 , fillet_radius_in_use),
1555
+ fn= 12
1556
+ );
1555
1557
1556
- translate ([
1557
- idx * (side_button_width + side_button_extrude * 2 + 2 ) - side_button_base_border,
1558
- (side_button_height + side_button_extrude * 2 + 2 ) * 2 - side_button_base_border,
1559
- 0
1560
- ])
1561
- cube ([
1562
- side_button_width + side_button_base_border * 2 ,
1563
- side_button_height + side_button_base_border * 2 ,
1564
- side_button_base
1565
- ]);
1558
+ translate ([
1559
+ idx * (side_button_width + side_button_extrude * 2 + 2 ) - side_button_base_border,
1560
+ - side_button_base_border,
1561
+ 0
1562
+ ])
1563
+ cube ([
1564
+ side_button_width + side_button_base_border * 2 ,
1565
+ side_button_height + side_button_base_border * 2 ,
1566
+ side_button_base
1567
+ ]);
1568
+ }
1566
1569
}
1567
- }
1568
1570
1569
- if (side_buttons_bottom) {
1570
- for (idx = [ 0 : len(side_buttons_bottom) - 1 ] ) {
1571
- translate ([
1572
- idx * (side_button_width + side_button_extrude * 2 + 2 ),
1573
- (side_button_height + side_button_extrude * 2 + 2 ) * 3 ,
1574
- 0
1575
- ])
1576
- filletBoxBottom(
1577
- side_button_width,
1578
- side_button_height,
1579
- side_button_base + side_button_extrude + panel_border_bottom + case_inner_padding_bottom,
1580
- min (side_button_height / 2 - 0.01 , fillet_radius_in_use)
1581
- );
1571
+ if (side_buttons_right) {
1572
+ for (idx = [ 0 : len(side_buttons_right) - 1 ] ) {
1573
+ translate ([
1574
+ idx * (side_button_width + side_button_extrude * 2 + 2 ),
1575
+ side_button_height + side_button_extrude * 2 + 2 ,
1576
+ 0
1577
+ ])
1578
+ filletBoxBottom(
1579
+ side_button_width,
1580
+ side_button_height,
1581
+ side_button_base + side_button_extrude + panel_border_right + case_inner_padding_right - side_button_base_inner,
1582
+ r= min (side_button_height / 2 - 0.01 , fillet_radius_in_use),
1583
+ fn= 12
1584
+ );
1582
1585
1583
- translate ([
1584
- idx * (side_button_width + side_button_extrude * 2 + 2 ) - side_button_base_border,
1585
- (side_button_height + side_button_extrude * 2 + 2 ) * 3 - side_button_base_border,
1586
- 0
1587
- ])
1588
- cube ([
1589
- side_button_width + side_button_base_border * 2 ,
1590
- side_button_height + side_button_base_border * 2 ,
1591
- side_button_base
1592
- ]);
1586
+ translate ([
1587
+ idx * (side_button_width + side_button_extrude * 2 + 2 ) - side_button_base_border,
1588
+ side_button_height + side_button_extrude * 2 + 2 - side_button_base_border,
1589
+ 0
1590
+ ])
1591
+ cube ([
1592
+ side_button_width + side_button_base_border * 2 ,
1593
+ side_button_height + side_button_base_border * 2 ,
1594
+ side_button_base
1595
+ ]);
1596
+ }
1597
+ }
1598
+
1599
+ if (side_buttons_top) {
1600
+ for (idx = [ 0 : len(side_buttons_top) - 1 ] ) {
1601
+ translate ([
1602
+ idx * (side_button_width + side_button_extrude * 2 + 2 ),
1603
+ (side_button_height + side_button_extrude * 2 + 2 ) * 2 ,
1604
+ 0
1605
+ ])
1606
+ filletBoxBottom(
1607
+ side_button_width,
1608
+ side_button_height,
1609
+ side_button_base + side_button_extrude + panel_border_top + case_inner_padding_top - side_button_base_inner,
1610
+ r= min (side_button_height / 2 - 0.01 , fillet_radius_in_use),
1611
+ fn= 12
1612
+ );
1613
+
1614
+ translate ([
1615
+ idx * (side_button_width + side_button_extrude * 2 + 2 ) - side_button_base_border,
1616
+ (side_button_height + side_button_extrude * 2 + 2 ) * 2 - side_button_base_border,
1617
+ 0
1618
+ ])
1619
+ cube ([
1620
+ side_button_width + side_button_base_border * 2 ,
1621
+ side_button_height + side_button_base_border * 2 ,
1622
+ side_button_base
1623
+ ]);
1624
+ }
1625
+ }
1626
+
1627
+ if (side_buttons_bottom) {
1628
+ for (idx = [ 0 : len(side_buttons_bottom) - 1 ] ) {
1629
+ translate ([
1630
+ idx * (side_button_width + side_button_extrude * 2 + 2 ),
1631
+ (side_button_height + side_button_extrude * 2 + 2 ) * 3 ,
1632
+ 0
1633
+ ])
1634
+ filletBoxBottom(
1635
+ side_button_width,
1636
+ side_button_height,
1637
+ side_button_base + side_button_extrude + panel_border_bottom + case_inner_padding_bottom - side_button_base_inner,
1638
+ r= min (side_button_height / 2 - 0.01 , fillet_radius_in_use),
1639
+ fn= 12
1640
+ );
1641
+
1642
+ translate ([
1643
+ idx * (side_button_width + side_button_extrude * 2 + 2 ) - side_button_base_border,
1644
+ (side_button_height + side_button_extrude * 2 + 2 ) * 3 - side_button_base_border,
1645
+ 0
1646
+ ])
1647
+ cube ([
1648
+ side_button_width + side_button_base_border * 2 ,
1649
+ side_button_height + side_button_base_border * 2 ,
1650
+ side_button_base
1651
+ ]);
1652
+ }
1593
1653
}
1594
1654
}
1595
1655
}
0 commit comments