|
@@ -42,7 +42,9 @@ SCREEN_EXPLODE = 0; // mm to pull display toward X+ in preview
|
|
|
|
|
|
|
|
// --- Slip-Fit Cap (X+ end) ---
|
|
// --- Slip-Fit Cap (X+ end) ---
|
|
|
SHOW_CAP = true; // show cap in preview
|
|
SHOW_CAP = true; // show cap in preview
|
|
|
-CAP_RIBS = false; // include retention ribs in cap
|
|
|
|
|
|
|
+CAP_RIBS = false; // include retention ribs in cap
|
|
|
|
|
+CAP_DETENT = true; // include snap detent nubs and dimples
|
|
|
|
|
+DETENT_R = 0.5; // detent nub/dimple radius (mm); tune across prints
|
|
|
CAP_PAD = 4.0; // Min cap bore depth
|
|
CAP_PAD = 4.0; // Min cap bore depth
|
|
|
CAP_ENGAGE = CAP_PAD + 6.0; // sleeve engagement length over case exterior (X)
|
|
CAP_ENGAGE = CAP_PAD + 6.0; // sleeve engagement length over case exterior (X)
|
|
|
CAP_WALL = 1.5; // sleeve and end-wall thickness
|
|
CAP_WALL = 1.5; // sleeve and end-wall thickness
|
|
@@ -77,6 +79,7 @@ fpc_pkt_yw = FPC_W + 2 * FPC_POCKET_PAD;
|
|
|
_cap_bore_w = case_d - 2*CAP_WALL; // bore Y width (fits recessed case)
|
|
_cap_bore_w = case_d - 2*CAP_WALL; // bore Y width (fits recessed case)
|
|
|
_cap_bore_h = case_h + CAP_TOL; // bore Z height (CAP_TOL clearance on each Z face)
|
|
_cap_bore_h = case_h + CAP_TOL; // bore Z height (CAP_TOL clearance on each Z face)
|
|
|
_cap_gap_w = (case_w - CAP_ENGAGE + CAP_PAD) - (win_x + ACT_W + _cham_xy); // gap between cap X- face and beveled bezel X+ end
|
|
_cap_gap_w = (case_w - CAP_ENGAGE + CAP_PAD) - (win_x + ACT_W + _cham_xy); // gap between cap X- face and beveled bezel X+ end
|
|
|
|
|
+_detent_x = (CAP_ENGAGE - CAP_PAD) / 2; // detent offset from cap X- face; same in cap local and case global offset
|
|
|
// Magnetic strip recess geometry (centered on back face)
|
|
// Magnetic strip recess geometry (centered on back face)
|
|
|
_lip_il = MAG_L + 2 * MAG_TOL;
|
|
_lip_il = MAG_L + 2 * MAG_TOL;
|
|
|
_lip_iw = MAG_W + 2 * MAG_TOL;
|
|
_lip_iw = MAG_W + 2 * MAG_TOL;
|
|
@@ -135,6 +138,12 @@ module epd_case() {
|
|
|
translate([case_w - CAP_ENGAGE + CAP_PAD, -0.01, -0.01])
|
|
translate([case_w - CAP_ENGAGE + CAP_PAD, -0.01, -0.01])
|
|
|
cube([CAP_ENGAGE + 0.02 - CAP_PAD, case_d + 0.02, CAP_WALL + CAP_TOL + 0.01]);
|
|
cube([CAP_ENGAGE + 0.02 - CAP_PAD, case_d + 0.02, CAP_WALL + CAP_TOL + 0.01]);
|
|
|
|
|
|
|
|
|
|
+ // Detent dimples on Y± faces — accept cap nubs when fully seated
|
|
|
|
|
+ if (CAP_DETENT)
|
|
|
|
|
+ for (dy = [CAP_WALL + CAP_TOL, case_d - CAP_WALL - CAP_TOL])
|
|
|
|
|
+ translate([case_w - CAP_ENGAGE + CAP_PAD + _detent_x, dy, case_h / 2])
|
|
|
|
|
+ sphere(r=DETENT_R);
|
|
|
|
|
+
|
|
|
// Cap wall recess — step in y- face at X+ end so cap sits flush
|
|
// Cap wall recess — step in y- face at X+ end so cap sits flush
|
|
|
translate([case_w - CAP_ENGAGE + CAP_PAD, -0.01, -0.01])
|
|
translate([case_w - CAP_ENGAGE + CAP_PAD, -0.01, -0.01])
|
|
|
cube([CAP_ENGAGE - CAP_PAD + 0.02, CAP_WALL + CAP_TOL + 0.01, case_h + 0.02]);
|
|
cube([CAP_ENGAGE - CAP_PAD + 0.02, CAP_WALL + CAP_TOL + 0.01, case_h + 0.02]);
|
|
@@ -205,6 +214,12 @@ module cable_cap() {
|
|
|
translate([CAP_ENGAGE - CAP_PAD, rib_dy, 0])
|
|
translate([CAP_ENGAGE - CAP_PAD, rib_dy, 0])
|
|
|
cube([CAP_WALL, CAP_WALL, _cap_h]);
|
|
cube([CAP_WALL, CAP_WALL, _cap_h]);
|
|
|
|
|
|
|
|
|
|
+ // Detent nubs on Y± bore walls — snap into case dimples when fully seated
|
|
|
|
|
+ if (CAP_DETENT)
|
|
|
|
|
+ for (ny = [CAP_WALL, case_d - CAP_WALL])
|
|
|
|
|
+ translate([_detent_x, ny, case_h / 2])
|
|
|
|
|
+ sphere(r=DETENT_R);
|
|
|
|
|
+
|
|
|
// Chamfer tab: extends window bezel chamfer across the gap to the cap X- face
|
|
// Chamfer tab: extends window bezel chamfer across the gap to the cap X- face
|
|
|
hull() {
|
|
hull() {
|
|
|
translate([-_cap_gap_w, 0, _cap_bore_h])
|
|
translate([-_cap_gap_w, 0, _cap_bore_h])
|