import { maskCircle, maskDimensions, maskFaceHoles, maskFaceOutline, maskValues, validateMask } from "../bahtinov-mask"; import type { CadKernel, CadParameters, Manifold } from "./kernel"; /** Original cap-style focusing mask, already oriented for support-free printing. */ export function buildBahtinovMask(k: CadKernel, input: CadParameters): Manifold { validateMask(input); const p = maskValues(input), d = maskDimensions(input); const face = k.extrude(k.sub2(k.polygon(maskFaceOutline(input)), ...maskFaceHoles(input).map(hole => k.polygon(hole))), p.face_thickness); const collar = k.move(k.extrude(k.sub2(k.polygon(maskCircle(d.outerRadius)), k.polygon(maskCircle(d.innerRadius))), p.sleeve_depth), [0, 0, p.face_thickness]); return k.union(face, collar); }