@tscircuit/checks 0.0.152 → 0.0.154
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +7 -2
- package/dist/index.js +68 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -80,6 +80,11 @@ declare function checkViaTraceClearance(circuitJson: AnyCircuitElement[], { conn
|
|
|
80
80
|
minClearance?: number;
|
|
81
81
|
}): PcbViaTraceClearanceError[];
|
|
82
82
|
|
|
83
|
+
declare function checkViaPadClearance(circuitJson: AnyCircuitElement[], { connMap, minClearance, }?: {
|
|
84
|
+
connMap?: ConnectivityMap;
|
|
85
|
+
minClearance?: number;
|
|
86
|
+
}): PcbPadPadClearanceError[];
|
|
87
|
+
|
|
83
88
|
declare function checkViasInPads(circuitJson: AnyCircuitElement[]): PcbPlacementError[];
|
|
84
89
|
|
|
85
90
|
/**
|
|
@@ -141,7 +146,7 @@ declare function runAllNetlistChecks(circuitJson: AnyCircuitElement[]): Promise<
|
|
|
141
146
|
subcircuit_id?: string;
|
|
142
147
|
}[]>;
|
|
143
148
|
declare function runAllPinSpecificationChecks(circuitJson: AnyCircuitElement[]): Promise<(circuit_json.SourceComponentPinsUnderspecifiedWarning | circuit_json.SourceNoPowerPinDefinedWarning | circuit_json.SourceNoGroundPinDefinedWarning)[]>;
|
|
144
|
-
declare function runAllRoutingChecks(circuitJson: AnyCircuitElement[]): Promise<(circuit_json.PcbPortNotConnectedError | circuit_json.PcbTraceError | circuit_json.PcbViaClearanceError | circuit_json.PcbTraceMissingError | circuit_json.PcbTraceTooLongWarning | circuit_json.PcbPadTraceClearanceError | circuit_json.PcbViaTraceClearanceError)[]>;
|
|
149
|
+
declare function runAllRoutingChecks(circuitJson: AnyCircuitElement[]): Promise<(circuit_json.PcbPortNotConnectedError | circuit_json.PcbTraceError | circuit_json.PcbViaClearanceError | circuit_json.PcbTraceMissingError | circuit_json.PcbTraceTooLongWarning | circuit_json.PcbPadPadClearanceError | circuit_json.PcbPadTraceClearanceError | circuit_json.PcbViaTraceClearanceError)[]>;
|
|
145
150
|
declare function runAllChecks(circuitJson: AnyCircuitElement[]): Promise<(circuit_json.PcbPortNotConnectedError | circuit_json.PcbTraceError | circuit_json.PcbPlacementError | circuit_json.PcbComponentOutsideBoardError | circuit_json.PcbViaClearanceError | circuit_json.PcbTraceMissingError | circuit_json.PcbFootprintOverlapError | circuit_json.PcbTraceTooLongWarning | circuit_json.PcbPadPadClearanceError | circuit_json.PcbPadTraceClearanceError | circuit_json.PcbViaTraceClearanceError | {
|
|
146
151
|
type: "source_pin_must_be_connected_error";
|
|
147
152
|
source_pin_must_be_connected_error_id: string;
|
|
@@ -161,4 +166,4 @@ declare function checkConnectorAccessibleOrientation(circuitJson: AnyCircuitElem
|
|
|
161
166
|
*/
|
|
162
167
|
declare function checkTestPointAccessibility(circuitJson: AnyCircuitElement[]): PcbPlacementError[];
|
|
163
168
|
|
|
164
|
-
export { NetManager, checkAllPinsInComponentAreUnderspecified, checkConnectorAccessibleOrientation, checkDifferentNetViaSpacing, checkEachPcbPortConnectedToPcbTraces, checkEachPcbTraceNonOverlapping, checkNoGroundPinDefined, checkNoPowerPinDefined, checkPadPadClearance, checkPadTraceClearance, checkPcbComponentOverlap, checkPcbComponentsOutOfBoard, checkPcbTraceLengths, checkPcbTracesOutOfBoard, checkPinMustBeConnected, checkSameNetViaSpacing, checkSourceTracesHavePcbTraces, checkSourceTracesMatchPcbTraceThickness, checkTestPointAccessibility, checkTracesAreContiguous, checkViaTraceClearance, checkViasInPads, checkViasOffBoard, dedupePcbDrcErrors, runAllChecks, runAllNetlistChecks, runAllPinSpecificationChecks, runAllPlacementChecks, runAllRoutingChecks };
|
|
169
|
+
export { NetManager, checkAllPinsInComponentAreUnderspecified, checkConnectorAccessibleOrientation, checkDifferentNetViaSpacing, checkEachPcbPortConnectedToPcbTraces, checkEachPcbTraceNonOverlapping, checkNoGroundPinDefined, checkNoPowerPinDefined, checkPadPadClearance, checkPadTraceClearance, checkPcbComponentOverlap, checkPcbComponentsOutOfBoard, checkPcbTraceLengths, checkPcbTracesOutOfBoard, checkPinMustBeConnected, checkSameNetViaSpacing, checkSourceTracesHavePcbTraces, checkSourceTracesMatchPcbTraceThickness, checkTestPointAccessibility, checkTracesAreContiguous, checkViaPadClearance, checkViaTraceClearance, checkViasInPads, checkViasOffBoard, dedupePcbDrcErrors, runAllChecks, runAllNetlistChecks, runAllPinSpecificationChecks, runAllPlacementChecks, runAllRoutingChecks };
|
package/dist/index.js
CHANGED
|
@@ -589,7 +589,7 @@ var getPadRadius = (pad) => {
|
|
|
589
589
|
const bounds = getPadBounds(pad);
|
|
590
590
|
return Math.min(bounds.maxX - bounds.minX, bounds.maxY - bounds.minY) / 2;
|
|
591
591
|
};
|
|
592
|
-
var isCircularPad = (pad) => pad.shape === "circle";
|
|
592
|
+
var isCircularPad = (pad) => pad.type === "pcb_via" || pad.shape === "circle";
|
|
593
593
|
var isPillPad = (pad) => pad.type === "pcb_smtpad" && (pad.shape === "pill" || pad.shape === "rotated_pill");
|
|
594
594
|
var getCircleShape = (pad) => {
|
|
595
595
|
const center = getPadCenter(pad);
|
|
@@ -2770,8 +2770,69 @@ function checkViaTraceClearance(circuitJson, {
|
|
|
2770
2770
|
return Array.from(errors.values()).map(({ error }) => error);
|
|
2771
2771
|
}
|
|
2772
2772
|
|
|
2773
|
+
// lib/check-via-pad-clearance.ts
|
|
2774
|
+
import {
|
|
2775
|
+
getPrimaryId as getPrimaryId5,
|
|
2776
|
+
getReadableNameForElement as getReadableNameForElement9
|
|
2777
|
+
} from "@tscircuit/circuit-json-util";
|
|
2778
|
+
import {
|
|
2779
|
+
getFullConnectivityMapFromCircuitJson as getFullConnectivityMapFromCircuitJson11
|
|
2780
|
+
} from "circuit-json-to-connectivity-map";
|
|
2781
|
+
function checkViaPadClearance(circuitJson, {
|
|
2782
|
+
connMap,
|
|
2783
|
+
minClearance
|
|
2784
|
+
} = {}) {
|
|
2785
|
+
const vias = circuitJson.filter(
|
|
2786
|
+
(element) => element.type === "pcb_via"
|
|
2787
|
+
);
|
|
2788
|
+
const pads = getPads(circuitJson);
|
|
2789
|
+
if (vias.length === 0 || pads.length === 0) return [];
|
|
2790
|
+
const board = getPcbBoard(circuitJson);
|
|
2791
|
+
const requiredClearance = minClearance ?? getBoardDrcValue(board, "min_pad_edge_to_pad_edge_clearance") ?? jlcMinTolerances.min_pad_edge_to_pad_edge_clearance;
|
|
2792
|
+
connMap ??= getFullConnectivityMapFromCircuitJson11(circuitJson);
|
|
2793
|
+
const padIndex = new SpatialObjectIndex({
|
|
2794
|
+
objects: pads,
|
|
2795
|
+
getBounds: getPadBounds,
|
|
2796
|
+
getId: getPrimaryId5
|
|
2797
|
+
});
|
|
2798
|
+
const errors = [];
|
|
2799
|
+
for (const via of vias) {
|
|
2800
|
+
const nearbyPads = padIndex.getObjectsInBounds(
|
|
2801
|
+
getPadBounds(via),
|
|
2802
|
+
requiredClearance
|
|
2803
|
+
);
|
|
2804
|
+
for (const pad of nearbyPads) {
|
|
2805
|
+
const padId = getPrimaryId5(pad);
|
|
2806
|
+
if (!getLayersOfPcbElement(via).some(
|
|
2807
|
+
(layer) => getLayersOfPcbElement(pad).includes(layer)
|
|
2808
|
+
)) {
|
|
2809
|
+
continue;
|
|
2810
|
+
}
|
|
2811
|
+
if (connMap.areIdsConnected(via.pcb_via_id, padId)) continue;
|
|
2812
|
+
const gap = getPadToPadGap(via, pad);
|
|
2813
|
+
if (gap + EPSILON >= requiredClearance) continue;
|
|
2814
|
+
const viaCenter = getPadCenter(via);
|
|
2815
|
+
const padCenter = getPadCenter(pad);
|
|
2816
|
+
errors.push({
|
|
2817
|
+
type: "pcb_pad_pad_clearance_error",
|
|
2818
|
+
pcb_pad_pad_clearance_error_id: `via_pad_clearance_${via.pcb_via_id}_${padId}`,
|
|
2819
|
+
error_type: "pcb_pad_pad_clearance_error",
|
|
2820
|
+
message: `Via ${getReadableNameForElement9(circuitJson, via.pcb_via_id)} and pad ${getReadableNameForElement9(circuitJson, padId)} are too close (clearance: ${formatMm(gap)}, minimum: ${formatMm(requiredClearance)})`,
|
|
2821
|
+
pcb_pad_ids: [via.pcb_via_id, padId],
|
|
2822
|
+
minimum_clearance: requiredClearance,
|
|
2823
|
+
actual_clearance: gap,
|
|
2824
|
+
center: {
|
|
2825
|
+
x: (viaCenter.x + padCenter.x) / 2,
|
|
2826
|
+
y: (viaCenter.y + padCenter.y) / 2
|
|
2827
|
+
}
|
|
2828
|
+
});
|
|
2829
|
+
}
|
|
2830
|
+
}
|
|
2831
|
+
return errors;
|
|
2832
|
+
}
|
|
2833
|
+
|
|
2773
2834
|
// lib/check-vias-in-pads.ts
|
|
2774
|
-
import { getPrimaryId as
|
|
2835
|
+
import { getPrimaryId as getPrimaryId6 } from "@tscircuit/circuit-json-util";
|
|
2775
2836
|
function checkViasInPads(circuitJson) {
|
|
2776
2837
|
const board = getPcbBoard(circuitJson);
|
|
2777
2838
|
if (board && "is_via_in_pad_allowed" in board && board.is_via_in_pad_allowed === true) {
|
|
@@ -2783,12 +2844,12 @@ function checkViasInPads(circuitJson) {
|
|
|
2783
2844
|
const pads = getPads(circuitJson);
|
|
2784
2845
|
if (vias.length === 0 || pads.length === 0) return [];
|
|
2785
2846
|
const padOrdinals = new Map(
|
|
2786
|
-
pads.map((pad, index) => [
|
|
2847
|
+
pads.map((pad, index) => [getPrimaryId6(pad), index])
|
|
2787
2848
|
);
|
|
2788
2849
|
const padIndex = new SpatialObjectIndex({
|
|
2789
2850
|
objects: pads,
|
|
2790
2851
|
getBounds: getPadBounds,
|
|
2791
|
-
getId:
|
|
2852
|
+
getId: getPrimaryId6
|
|
2792
2853
|
});
|
|
2793
2854
|
const errors = [];
|
|
2794
2855
|
for (const via of vias) {
|
|
@@ -2803,7 +2864,7 @@ function checkViasInPads(circuitJson) {
|
|
|
2803
2864
|
const padLayers = getLayersOfPcbElement(pad);
|
|
2804
2865
|
if (!viaLayers.some((layer) => padLayers.includes(layer))) continue;
|
|
2805
2866
|
if (!isPointInPad(via, pad)) continue;
|
|
2806
|
-
const padId =
|
|
2867
|
+
const padId = getPrimaryId6(pad);
|
|
2807
2868
|
const padOrdinal = padOrdinals.get(padId) ?? 0;
|
|
2808
2869
|
const padName = getReadableNameForFootprintPad(
|
|
2809
2870
|
circuitJson,
|
|
@@ -3346,6 +3407,7 @@ async function runAllRoutingChecks(circuitJson) {
|
|
|
3346
3407
|
...checkEachPcbTraceNonOverlapping(circuitJson),
|
|
3347
3408
|
...checkPadTraceClearance(circuitJson),
|
|
3348
3409
|
...checkViaTraceClearance(circuitJson),
|
|
3410
|
+
...checkViaPadClearance(circuitJson),
|
|
3349
3411
|
...checkSameNetViaSpacing(circuitJson),
|
|
3350
3412
|
...checkDifferentNetViaSpacing(circuitJson),
|
|
3351
3413
|
...checkTracesAreContiguous(circuitJson),
|
|
@@ -3381,6 +3443,7 @@ export {
|
|
|
3381
3443
|
checkSourceTracesMatchPcbTraceThickness,
|
|
3382
3444
|
checkTestPointAccessibility,
|
|
3383
3445
|
checkTracesAreContiguous,
|
|
3446
|
+
checkViaPadClearance,
|
|
3384
3447
|
checkViaTraceClearance,
|
|
3385
3448
|
checkViasInPads,
|
|
3386
3449
|
checkViasOffBoard,
|