seveibar/pd-dual-stepper-controller
Bottom-side PCB silkscreen artwork consisting of embedded mirrored TS Circuit SVG logos, with via-clearance-aware lower-board placement.
- Version
- 0.1.0
- License
- unset
- Stars
- 0
tests/helpers/checkJlcClearances.ts
import {
checkEachPcbTraceNonOverlapping,
checkPadPadClearance,
checkPadTraceClearance,
checkViaPadClearance,
checkViaTraceClearance,
} from "@tscircuit/checks";
import type { CircuitJson } from "circuit-json";
import rules from "../../engineering/jlcpcb-clearance-rules.json";
/** Explicit rules avoid silently inheriting a checker's lower defaults. */
export function checkJlcClearances(json: CircuitJson) {
const min = rules.minimumMm;
const powerSources = new Set(json.flatMap(e =>
e.type === "source_trace" && (e.min_trace_thickness ?? 0) >= 0.5
? [e.source_trace_id] : []));
const powerRoutes = new Set(json.flatMap(e =>
e.type === "pcb_trace" && powerSources.has(e.source_trace_id ?? "")
? [e.pcb_trace_id] : []));
return {
padToPad: checkPadPadClearance(json, { minClearance: min.padToPad }),
padToTrace: checkPadTraceClearance(json, { minClearance: min.padToTrace }),
traceToTrace: checkEachPcbTraceNonOverlapping(json, { minClearance: min.traceToTrace }),
viaToPad: checkViaPadClearance(json, { minClearance: min.viaToPad }),
viaToTrace: checkViaTraceClearance(json, { minClearance: min.viaToTrace }),
motorPowerToPad: checkPadTraceClearance(json, { minClearance: min.motorPowerToPad })
.filter(e => powerRoutes.has(e.pcb_trace_id)),
};
}