circuit-json-to-gerber 0.0.67 → 0.0.69
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.
|
@@ -1403,6 +1403,10 @@ function defineAperturesForLayer({
|
|
|
1403
1403
|
...gerberBuilder().add("delete_attribute", {}).add("comment", { comment: "aperture END LIST" }).build()
|
|
1404
1404
|
);
|
|
1405
1405
|
}
|
|
1406
|
+
var REGION_APERTURE_CONFIG = {
|
|
1407
|
+
standard_template_code: "C",
|
|
1408
|
+
diameter: 1e-3
|
|
1409
|
+
};
|
|
1406
1410
|
var getApertureConfigFromPcbSmtpad = (elm) => {
|
|
1407
1411
|
if (elm.shape === "rect") {
|
|
1408
1412
|
return {
|
|
@@ -1737,6 +1741,7 @@ function getAllApertureTemplateConfigsForLayer({
|
|
|
1737
1741
|
const configs = [];
|
|
1738
1742
|
const configHashMap = /* @__PURE__ */ new Set();
|
|
1739
1743
|
const isSoldermaskLayer = glayer_name.endsWith("_Mask");
|
|
1744
|
+
const isCopperLayer = glayer_name.endsWith("_Cu");
|
|
1740
1745
|
const addConfigIfNew = (config) => {
|
|
1741
1746
|
const hash = stableStringify(config);
|
|
1742
1747
|
if (!configHashMap.has(hash)) {
|
|
@@ -1768,6 +1773,9 @@ function getAllApertureTemplateConfigsForLayer({
|
|
|
1768
1773
|
}
|
|
1769
1774
|
} else if (elm.type === "pcb_plated_hole") {
|
|
1770
1775
|
if (elm.layers.includes(layer)) {
|
|
1776
|
+
if (elm.shape === "hole_with_polygon_pad") {
|
|
1777
|
+
continue;
|
|
1778
|
+
}
|
|
1771
1779
|
if (glayer_name.endsWith("_Mask") && elm.is_covered_with_solder_mask === true) {
|
|
1772
1780
|
continue;
|
|
1773
1781
|
}
|
|
@@ -1806,6 +1814,27 @@ function getAllApertureTemplateConfigsForLayer({
|
|
|
1806
1814
|
addConfigIfNew(getApertureConfigFromPcbCopperText(elm));
|
|
1807
1815
|
}
|
|
1808
1816
|
}
|
|
1817
|
+
const needsRegionAperture = circuitJson.some((elm) => {
|
|
1818
|
+
if (elm.type === "pcb_copper_pour") {
|
|
1819
|
+
if (elm.layer !== layer) return false;
|
|
1820
|
+
if (isCopperLayer) return true;
|
|
1821
|
+
return isSoldermaskLayer && elm.covered_with_solder_mask === false;
|
|
1822
|
+
}
|
|
1823
|
+
if (elm.type === "pcb_smtpad" && elm.shape === "polygon") {
|
|
1824
|
+
if (elm.layer !== layer) return false;
|
|
1825
|
+
if (isCopperLayer) return true;
|
|
1826
|
+
return isSoldermaskLayer && elm.is_covered_with_solder_mask !== true;
|
|
1827
|
+
}
|
|
1828
|
+
if (elm.type === "pcb_plated_hole" && elm.shape === "hole_with_polygon_pad") {
|
|
1829
|
+
if (!elm.layers.includes(layer)) return false;
|
|
1830
|
+
if (isCopperLayer) return true;
|
|
1831
|
+
return isSoldermaskLayer && elm.is_covered_with_solder_mask !== true;
|
|
1832
|
+
}
|
|
1833
|
+
return false;
|
|
1834
|
+
});
|
|
1835
|
+
if (needsRegionAperture) {
|
|
1836
|
+
addConfigIfNew(REGION_APERTURE_CONFIG);
|
|
1837
|
+
}
|
|
1809
1838
|
return configs;
|
|
1810
1839
|
}
|
|
1811
1840
|
|
|
@@ -1835,7 +1864,7 @@ var findApertureNumber = (glayer, search_params) => {
|
|
|
1835
1864
|
// package.json
|
|
1836
1865
|
var package_default = {
|
|
1837
1866
|
name: "circuit-json-to-gerber",
|
|
1838
|
-
version: "0.0.
|
|
1867
|
+
version: "0.0.68",
|
|
1839
1868
|
main: "dist/index.js",
|
|
1840
1869
|
type: "module",
|
|
1841
1870
|
scripts: {
|
|
@@ -2068,6 +2097,34 @@ var convertSoupToGerberCommands = (circuitJson, opts = {}) => {
|
|
|
2068
2097
|
}).build()
|
|
2069
2098
|
);
|
|
2070
2099
|
const mfy = (y) => opts.flip_y_axis ? -y : y;
|
|
2100
|
+
const getRegionApertureNumber = (glayer) => findApertureNumber(glayer, REGION_APERTURE_CONFIG);
|
|
2101
|
+
const addClosedRegionFromPoints = ({
|
|
2102
|
+
target,
|
|
2103
|
+
apertureSource,
|
|
2104
|
+
points
|
|
2105
|
+
}) => {
|
|
2106
|
+
if (points.length === 0) return;
|
|
2107
|
+
const regionApertureNumber = getRegionApertureNumber(apertureSource);
|
|
2108
|
+
const regionBuilder = gerberBuilder().add("select_aperture", {
|
|
2109
|
+
aperture_number: regionApertureNumber
|
|
2110
|
+
}).add("start_region_statement", {});
|
|
2111
|
+
regionBuilder.add("move_operation", {
|
|
2112
|
+
x: points[0].x,
|
|
2113
|
+
y: mfy(points[0].y)
|
|
2114
|
+
});
|
|
2115
|
+
for (let i = 1; i < points.length; i++) {
|
|
2116
|
+
regionBuilder.add("plot_operation", {
|
|
2117
|
+
x: points[i].x,
|
|
2118
|
+
y: mfy(points[i].y)
|
|
2119
|
+
});
|
|
2120
|
+
}
|
|
2121
|
+
regionBuilder.add("plot_operation", {
|
|
2122
|
+
x: points[0].x,
|
|
2123
|
+
y: mfy(points[0].y)
|
|
2124
|
+
});
|
|
2125
|
+
regionBuilder.add("end_region_statement", {});
|
|
2126
|
+
target.push(...regionBuilder.build());
|
|
2127
|
+
};
|
|
2071
2128
|
const renderVectorText = (element, layer, layerType, getApertureConfig) => {
|
|
2072
2129
|
if (element.layer !== layer) return;
|
|
2073
2130
|
const CAP_HEIGHT_SCALE = 0.7;
|
|
@@ -2308,7 +2365,8 @@ var convertSoupToGerberCommands = (circuitJson, opts = {}) => {
|
|
|
2308
2365
|
const { brep_shape } = element;
|
|
2309
2366
|
if (!brep_shape) continue;
|
|
2310
2367
|
const { outer_ring, inner_rings } = brep_shape;
|
|
2311
|
-
const
|
|
2368
|
+
const regionApertureNumber = getRegionApertureNumber(copper_glayer);
|
|
2369
|
+
const outer_builder = gerberBuilder().add("select_aperture", { aperture_number: regionApertureNumber }).add("start_region_statement", {});
|
|
2312
2370
|
drawRingToBuilder(outer_builder, reverseRing(outer_ring));
|
|
2313
2371
|
outer_builder.add("end_region_statement", {});
|
|
2314
2372
|
all_pour_commands.push(...outer_builder.build());
|
|
@@ -2317,7 +2375,9 @@ var convertSoupToGerberCommands = (circuitJson, opts = {}) => {
|
|
|
2317
2375
|
...gerberBuilder().add("set_layer_polarity", { polarity: "C" }).build()
|
|
2318
2376
|
);
|
|
2319
2377
|
for (const inner_ring of inner_rings) {
|
|
2320
|
-
const inner_builder = gerberBuilder().add("select_aperture", {
|
|
2378
|
+
const inner_builder = gerberBuilder().add("select_aperture", {
|
|
2379
|
+
aperture_number: regionApertureNumber
|
|
2380
|
+
}).add("start_region_statement", {});
|
|
2321
2381
|
drawRingToBuilder(inner_builder, inner_ring);
|
|
2322
2382
|
inner_builder.add("end_region_statement", {});
|
|
2323
2383
|
all_pour_commands.push(...inner_builder.build());
|
|
@@ -2352,7 +2412,8 @@ var convertSoupToGerberCommands = (circuitJson, opts = {}) => {
|
|
|
2352
2412
|
const transformedPoints = points.map(
|
|
2353
2413
|
(p) => applyToPoint(transformMatrix, p)
|
|
2354
2414
|
);
|
|
2355
|
-
const
|
|
2415
|
+
const regionApertureNumber = getRegionApertureNumber(copper_glayer);
|
|
2416
|
+
const rect_builder = gerberBuilder().add("select_aperture", { aperture_number: regionApertureNumber }).add("start_region_statement", {});
|
|
2356
2417
|
rect_builder.add("move_operation", {
|
|
2357
2418
|
x: transformedPoints[0].x,
|
|
2358
2419
|
y: mfy(transformedPoints[0].y)
|
|
@@ -2371,25 +2432,11 @@ var convertSoupToGerberCommands = (circuitJson, opts = {}) => {
|
|
|
2371
2432
|
all_pour_commands.push(...rect_builder.build());
|
|
2372
2433
|
} else if (element.shape === "polygon") {
|
|
2373
2434
|
const { points } = element;
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
});
|
|
2380
|
-
for (let i = 1; i < points.length; i++) {
|
|
2381
|
-
poly_builder.add("plot_operation", {
|
|
2382
|
-
x: points[i].x,
|
|
2383
|
-
y: mfy(points[i].y)
|
|
2384
|
-
});
|
|
2385
|
-
}
|
|
2386
|
-
poly_builder.add("plot_operation", {
|
|
2387
|
-
x: points[0].x,
|
|
2388
|
-
y: mfy(points[0].y)
|
|
2389
|
-
});
|
|
2390
|
-
poly_builder.add("end_region_statement", {});
|
|
2391
|
-
all_pour_commands.push(...poly_builder.build());
|
|
2392
|
-
}
|
|
2435
|
+
addClosedRegionFromPoints({
|
|
2436
|
+
target: all_pour_commands,
|
|
2437
|
+
apertureSource: copper_glayer,
|
|
2438
|
+
points
|
|
2439
|
+
});
|
|
2393
2440
|
}
|
|
2394
2441
|
copper_glayer.push(...all_pour_commands);
|
|
2395
2442
|
if (element.covered_with_solder_mask === false) {
|
|
@@ -2540,26 +2587,13 @@ var convertSoupToGerberCommands = (circuitJson, opts = {}) => {
|
|
|
2540
2587
|
);
|
|
2541
2588
|
}
|
|
2542
2589
|
for (const glayer of layers_to_add_to) {
|
|
2543
|
-
const pad_builder = gerberBuilder().add("select_aperture", { aperture_number: 10 }).add("start_region_statement", {});
|
|
2544
2590
|
const { points } = element;
|
|
2545
|
-
if (points
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
pad_builder.add("plot_operation", {
|
|
2552
|
-
x: points[i].x,
|
|
2553
|
-
y: mfy(points[i].y)
|
|
2554
|
-
});
|
|
2555
|
-
}
|
|
2556
|
-
pad_builder.add("plot_operation", {
|
|
2557
|
-
x: points[0].x,
|
|
2558
|
-
y: mfy(points[0].y)
|
|
2559
|
-
});
|
|
2560
|
-
}
|
|
2561
|
-
pad_builder.add("end_region_statement", {});
|
|
2562
|
-
glayer.push(...pad_builder.build());
|
|
2591
|
+
if (!points) continue;
|
|
2592
|
+
addClosedRegionFromPoints({
|
|
2593
|
+
target: glayer,
|
|
2594
|
+
apertureSource: glayer,
|
|
2595
|
+
points
|
|
2596
|
+
});
|
|
2563
2597
|
}
|
|
2564
2598
|
}
|
|
2565
2599
|
} else if (element.type === "pcb_solder_paste") {
|
|
@@ -2609,6 +2643,16 @@ var convertSoupToGerberCommands = (circuitJson, opts = {}) => {
|
|
|
2609
2643
|
layersToAddTo.push(glayers[getGerberLayerName(layer, "soldermask")]);
|
|
2610
2644
|
}
|
|
2611
2645
|
for (const glayer of layersToAddTo) {
|
|
2646
|
+
if (element.shape === "hole_with_polygon_pad") {
|
|
2647
|
+
const { pad_outline } = element;
|
|
2648
|
+
if (!pad_outline?.length) continue;
|
|
2649
|
+
addClosedRegionFromPoints({
|
|
2650
|
+
target: glayer,
|
|
2651
|
+
apertureSource: glayer,
|
|
2652
|
+
points: pad_outline
|
|
2653
|
+
});
|
|
2654
|
+
continue;
|
|
2655
|
+
}
|
|
2612
2656
|
const holeW = "hole_width" in element && typeof element.hole_width === "number" ? element.hole_width : 0;
|
|
2613
2657
|
const holeH = "hole_height" in element && typeof element.hole_height === "number" ? element.hole_height : 0;
|
|
2614
2658
|
const padWidthCandidates = [holeW];
|
|
@@ -2988,4 +3032,4 @@ export {
|
|
|
2988
3032
|
stringifyGerberCommands,
|
|
2989
3033
|
convertSoupToGerberCommands
|
|
2990
3034
|
};
|
|
2991
|
-
//# sourceMappingURL=chunk-
|
|
3035
|
+
//# sourceMappingURL=chunk-ERVO7VGV.js.map
|