// Button plunger for EE04 case +Y wall // At rest: flange flush with interior face, head proud of exterior face include module plunger() { color("orange") union() { translate([0, -FLANGE_T, 0]) rotate([-90, 0, 0]) cylinder(d = PLUNGER_D, h = FLANGE_T + WALL + PLUNGER_HEAD_H, $fn = 32); translate([0, -FLANGE_T, 0]) rotate([-90, 0, 0]) cylinder(d = FLANGE_D, h = FLANGE_T, $fn = 32); translate([0, WALL, 0]) rotate([-90, 0, 0]) cylinder(d = PLUNGER_D, h = PLUNGER_HEAD_H, $fn = 32); } } // ============================================================ // RENDER — 4x plunger strip with breakaway sprues // 2 mm gap between flanges; snap the 3 bridges to separate. // ============================================================ SPRUE_GAP = 2.0; // gap between adjacent flanges SPRUE_PITCH = FLANGE_D + SPRUE_GAP; // centre-to-centre SPRUE_T = 1.0; // bridge thickness — 1.5mm meets resin min SPRUE_OVL = 0.2; // overlap into each flange edge so shells merge module plunger_strip() { union() { for (i = [0:7]) translate([i * SPRUE_PITCH, 0, FLANGE_T]) rotate([90, 0, 0]) plunger(); // Sprues on flange outer edges — hidden surface, no post-removal cleanup needed for (i = [0:6]) { x0 = i * SPRUE_PITCH + FLANGE_D / 2 - SPRUE_OVL; x1 = (i + 1) * SPRUE_PITCH - FLANGE_D / 2 + SPRUE_OVL; translate([x0, -SPRUE_T / 2, FLANGE_T / 2 - SPRUE_T / 2]) cube([x1 - x0, SPRUE_T, SPRUE_T]); } } } plunger_strip();