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)),
  };
}