import { GROMMET_PRINT_GAP_MM, GROMMET_SEAM_MM, grommetProfiles, grommetValues, validateGrommet } from "../split-desk-grommet"; import type { CadKernel, CadParameters, Manifold } from "./kernel"; /** Original two-piece drop-in trim. Broad flange faces are already on Z=0. */ export function buildSplitGrommet(k: CadKernel, input: CadParameters): Manifold { validateGrommet(input); const p = grommetValues(input), profiles = grommetProfiles(input); const inner = k.polygon(profiles.opening); const flange = k.extrude(k.sub2(k.polygon(profiles.flange), inner), p.flange_thickness); const sleeve = k.move(k.extrude(k.sub2(k.polygon(profiles.sleeve), inner), p.insertion_depth), [0, 0, p.flange_thickness]); const half = k.move(k.union(flange, sleeve), [0, (GROMMET_PRINT_GAP_MM - GROMMET_SEAM_MM) / 2, 0]); return k.union(half, k.mirror(half, [0, 1, 0])); }