|
|
@@ -31,6 +31,7 @@ FPC_POCKET_PAD = 2.0; // padding on each side of FPC cable width
|
|
|
// --- Case Parameters ---
|
|
|
WALL = 3.0; // must exceed MAG_LIP_H (2.0) to keep pocket floor
|
|
|
LIP = 1.5; // front bezel lip thickness (Z)
|
|
|
+Z_BASE = 0.75; // extra Z- wall thickness; shifts cavity/FPC pocket up, leaving magnet pocket and cap recess anchored — tune to fix thin walls
|
|
|
TOL = 0.2; // per-side display clearance
|
|
|
CHAM = 1.0;
|
|
|
CHAM_ANGLE = 60;
|
|
|
@@ -41,7 +42,7 @@ SHOW_DISP = true;
|
|
|
SCREEN_EXPLODE = 0; // mm to pull display toward X+ in preview
|
|
|
|
|
|
// --- Output ---
|
|
|
-PART = "case"; // "all" = preview scene; "case" = case STL at origin; "cap" = cap STL at origin
|
|
|
+PART = "all"; // "all" = preview scene; "case" = case STL at origin; "cap" = cap STL at origin
|
|
|
|
|
|
// --- Slip-Fit Cap (X+ end) ---
|
|
|
SHOW_CAP = true; // show cap in preview
|
|
|
@@ -66,7 +67,7 @@ MAG_TOL = 0.2; // per-side clearance for strip fit
|
|
|
cav_w = DISP_W + TOL * 2;
|
|
|
cav_d = DISP_D + TOL * 2;
|
|
|
case_w = WALL + DISP_W + (TOL * 1.5); // ends at display X+ face; cap retains display
|
|
|
-case_h = WALL + DISP_T + LIP;
|
|
|
+case_h = WALL + DISP_T + LIP + Z_BASE;
|
|
|
case_d = WALL * 2 + cav_d;
|
|
|
|
|
|
_cham_xy = CHAM * tan(CHAM_ANGLE);
|
|
|
@@ -117,11 +118,11 @@ module epd_case() {
|
|
|
rounded_box(case_w, case_d, case_h, CORNER_R);
|
|
|
|
|
|
// Display cavity — extends 0.01 mm past X+ face to leave that side open
|
|
|
- translate([WALL, WALL, WALL])
|
|
|
+ translate([WALL, WALL, WALL + Z_BASE])
|
|
|
cube([cav_w + 0.01, cav_d, DISP_T + TOL]);
|
|
|
|
|
|
// Active area window + chamfered top edges
|
|
|
- translate([win_x, win_y, WALL + DISP_T - 0.01])
|
|
|
+ translate([win_x, win_y, WALL + Z_BASE + DISP_T - 0.01])
|
|
|
cube([ACT_W, ACT_D, LIP - CHAM + 0.02]);
|
|
|
hull() {
|
|
|
translate([win_x, win_y, case_h - CHAM])
|
|
|
@@ -131,14 +132,18 @@ module epd_case() {
|
|
|
}
|
|
|
|
|
|
// FPC return pocket — drops floor of display cavity near X+ face
|
|
|
- translate([case_w - FPC_POCKET_LEN, fpc_pkt_y, WALL - FPC_FLOOR_DROP - 0.01])
|
|
|
+ translate([case_w - FPC_POCKET_LEN, fpc_pkt_y, WALL + Z_BASE - FPC_FLOOR_DROP - 0.01])
|
|
|
cube([FPC_POCKET_LEN + 0.02, fpc_pkt_yw, DISP_T + TOL + FPC_FLOOR_DROP + 0.01]);
|
|
|
|
|
|
// Magnetic strip recess in back face
|
|
|
+ // TODO: wall between Z+ of this pocket and Z- of FPC return pocket is ~1.0 mm at Z_BASE=0.75
|
|
|
+ // (MAG_LIP_H=2.0 vs WALL+Z_BASE-FPC_FLOOR_DROP=3.0) — tune Z_BASE after test prints
|
|
|
translate([_lip_x, _lip_y, -0.01])
|
|
|
cube([_lip_il, _lip_iw, MAG_LIP_H + 0.01]);
|
|
|
|
|
|
// Cap wall recess — step in z- face at X+ end so cap sits flush
|
|
|
+ // TODO: wall between Z- of FPC return pocket and this recessed Z- face is ~1.3 mm at Z_BASE=0.75
|
|
|
+ // (WALL+Z_BASE-FPC_FLOOR_DROP=3.0 vs CAP_WALL+CAP_TOL=1.7) — tune Z_BASE after test prints
|
|
|
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]);
|
|
|
|
|
|
@@ -246,7 +251,7 @@ if (PART == "case") {
|
|
|
intersection() { epd_case(); cube(_clip); }
|
|
|
|
|
|
if ($preview && SHOW_DISP)
|
|
|
- translate([WALL + TOL + SCREEN_EXPLODE, WALL + TOL, WALL])
|
|
|
+ translate([WALL + TOL + SCREEN_EXPLODE, WALL + TOL, WALL + Z_BASE])
|
|
|
EPD213B();
|
|
|
|
|
|
if (SHOW_CAP)
|