import { pcbDimensions, pcbOutline, pcbValues, PCB_SEGMENTS, validatePcbAdapter } from "../pcb-mounting-adapter"; import type { CadKernel, CadParameters } from "./kernel"; /** Positive supports and full-height through bores. Bottom bolt seats narrow * upward at 45 degrees; ordinary 90-degree flat-head bolts require no inserts. */ export function buildPcbAdapter(c: CadKernel, input: CadParameters) { validatePcbAdapter(input); const p = pcbValues(input), d = pcbDimensions(p), n = PCB_SEGMENTS; const plate = c.extrude(c.polygon(pcbOutline(p)), p.plate_thickness); const bosses = d.boardHoles.map(h => c.move(c.cylinder(p.standoff_height, d.bossRadius, d.bossRadius, n), [h.x, h.y, p.plate_thickness])); const boardBores = d.boardHoles.flatMap(h => [ c.move(c.cylinder(d.bbox.z + 2, d.boardRadius, d.boardRadius, n), [h.x, h.y, -1]), c.move(c.cylinder(d.sinkDepth, d.headRadius, d.boardRadius, n), [h.x, h.y, 0]), ]); const caseBores = d.caseHoles.map(h => c.move(c.cylinder(p.plate_thickness + 2, d.caseRadius, d.caseRadius, n), [h.x, h.y, -1])); return c.move(c.difference(c.union(plate, ...bosses), ...boardBores, ...caseBores), [-p.plate_width / 2, -p.plate_length / 2, 0]); }