From e28a6a6d19e45204f1b4f3e01f0ef654d4d41e9b Mon Sep 17 00:00:00 2001 From: Julien Calixte Date: Sat, 11 Jul 2026 08:46:47 +0200 Subject: [PATCH] feat(case): add exploded horizontal plan section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New `show="plan"` lifts the deck/screen half off the cavity half so the board layout reads at a glance — standoffs, corner posts, ports, and the internal FPC clearance. Tunable via `plan_z` and `explode`. --- hardware/case/typoena-case.scad | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/hardware/case/typoena-case.scad b/hardware/case/typoena-case.scad index 6afca83..7c7abcc 100644 --- a/hardware/case/typoena-case.scad +++ b/hardware/case/typoena-case.scad @@ -18,10 +18,11 @@ // "bracket" – the screen retaining frame (print flat) // "baseplate" – the chassis / bottom cover (print flat) // "print_plate" – all printed parts laid out side by side -// "section" – midline cross-section: how the screen is trapped +// "section" – vertical cross-section: how the screen is trapped +// "plan" – exploded horizontal section: deck lifted off the cavity // ============================================================================ -show = "section"; +show = "plan"; $fn = 48; // ---- body envelope -------------------------------------------------------- @@ -280,6 +281,14 @@ module placed_foam() { on_deck() translate([screen_off, screen_cy+screen_off, -lip_t-G_t-foam_t]) color(C_foam) foam(); } +// full coloured assembly, reused by the exploded plan section +module plan_assembly() { + color(C_body) case_body(); + ghost_screen(); + placed_foam(); + placed_bracket(); + translate([0,0,-0.01]) color(C_plate) baseplate(); +} if (show == "assembled") { color(C_body) case_body(); @@ -297,7 +306,7 @@ if (show == "assembled") { translate([W+30, 0, 0]) color(C_plate) baseplate(); translate([W+30, D+30, foot_h]) color(C_bracket) bracket(); } else if (show == "section") { - // slice away the +X half: the cut face shows the screen clamp, and the + // VERTICAL slice (remove +X half): cut face shows the screen clamp, and the // retained LEFT half exposes the internal FPC clearance behind the bezel difference() { union() { @@ -309,4 +318,18 @@ if (show == "assembled") { } translate([W/2, -30, -70]) cube([W, D+60, 220]); } -} +} else if (show == "plan") { + // HORIZONTAL slice at plan_z, shown EXPLODED: the bottom half (cavity — + // baseplate standoffs, corner posts, back-wall ports) stays put; the top + // half (deck, screen, bracket) lifts up so you see both sides of the cut. + plan_z = 30; + explode = 62; + intersection() { // bottom: the cavity + plan_assembly(); + translate([-60, -60, plan_z-200]) cube([W+120, D+120, 200]); + } + translate([0, 0, explode]) intersection() { // top: the deck, lifted + plan_assembly(); + translate([-60, -60, plan_z]) cube([W+120, D+120, 200]); + } +} \ No newline at end of file