@tscircuit/pcb-viewer 1.11.296 → 1.11.297
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.js +79 -152
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/dist/index.js
CHANGED
|
@@ -6019,6 +6019,15 @@ var getBoundsOfPcbElements = (elements) => {
|
|
|
6019
6019
|
let maxY = Number.NEGATIVE_INFINITY;
|
|
6020
6020
|
for (const elm of elements) {
|
|
6021
6021
|
if (!elm.type.startsWith("pcb_")) continue;
|
|
6022
|
+
if (elm.type === "pcb_smtpad" && elm.shape === "polygon" && Array.isArray(elm.points)) {
|
|
6023
|
+
for (const point of elm.points) {
|
|
6024
|
+
minX = Math.min(minX, point.x);
|
|
6025
|
+
minY = Math.min(minY, point.y);
|
|
6026
|
+
maxX = Math.max(maxX, point.x);
|
|
6027
|
+
maxY = Math.max(maxY, point.y);
|
|
6028
|
+
}
|
|
6029
|
+
continue;
|
|
6030
|
+
}
|
|
6022
6031
|
let centerX;
|
|
6023
6032
|
let centerY;
|
|
6024
6033
|
let width;
|
|
@@ -8047,87 +8056,6 @@ var convertElementToPrimitives = (element, allElements) => {
|
|
|
8047
8056
|
});
|
|
8048
8057
|
return primitives;
|
|
8049
8058
|
}
|
|
8050
|
-
case "pcb_silkscreen_rect": {
|
|
8051
|
-
return [
|
|
8052
|
-
{
|
|
8053
|
-
_pcb_drawing_object_id: `rect_${globalPcbDrawingObjectCount++}`,
|
|
8054
|
-
pcb_drawing_type: "rect",
|
|
8055
|
-
x: element.center.x,
|
|
8056
|
-
y: element.center.y,
|
|
8057
|
-
w: element.width,
|
|
8058
|
-
h: element.height,
|
|
8059
|
-
layer: element.layer === "bottom" ? "bottom_silkscreen" : "top_silkscreen",
|
|
8060
|
-
stroke_width: element.stroke_width,
|
|
8061
|
-
is_filled: element.is_filled,
|
|
8062
|
-
has_stroke: element.has_stroke,
|
|
8063
|
-
is_stroke_dashed: element.is_stroke_dashed,
|
|
8064
|
-
roundness: element.corner_radius,
|
|
8065
|
-
_element: element
|
|
8066
|
-
}
|
|
8067
|
-
];
|
|
8068
|
-
}
|
|
8069
|
-
case "pcb_silkscreen_circle": {
|
|
8070
|
-
return [
|
|
8071
|
-
{
|
|
8072
|
-
_pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,
|
|
8073
|
-
pcb_drawing_type: "circle",
|
|
8074
|
-
x: element.center.x,
|
|
8075
|
-
y: element.center.y,
|
|
8076
|
-
r: element.radius,
|
|
8077
|
-
layer: element.layer === "bottom" ? "bottom_silkscreen" : "top_silkscreen"
|
|
8078
|
-
}
|
|
8079
|
-
];
|
|
8080
|
-
}
|
|
8081
|
-
case "pcb_silkscreen_oval": {
|
|
8082
|
-
return [
|
|
8083
|
-
{
|
|
8084
|
-
_pcb_drawing_object_id: `oval_${globalPcbDrawingObjectCount++}`,
|
|
8085
|
-
pcb_drawing_type: "oval",
|
|
8086
|
-
x: element.center.x,
|
|
8087
|
-
y: element.center.y,
|
|
8088
|
-
rX: element.radius_x / 2,
|
|
8089
|
-
rY: element.radius_y / 2,
|
|
8090
|
-
layer: element.layer === "bottom" ? "bottom_silkscreen" : "top_silkscreen"
|
|
8091
|
-
}
|
|
8092
|
-
];
|
|
8093
|
-
}
|
|
8094
|
-
// @ts-ignore
|
|
8095
|
-
case "pcb_silkscreen_pill": {
|
|
8096
|
-
return [
|
|
8097
|
-
{
|
|
8098
|
-
_pcb_drawing_object_id: `pill_${globalPcbDrawingObjectCount++}`,
|
|
8099
|
-
pcb_drawing_type: "pill",
|
|
8100
|
-
// @ts-ignore
|
|
8101
|
-
x: element.center.x,
|
|
8102
|
-
// @ts-ignore
|
|
8103
|
-
y: element.center.y,
|
|
8104
|
-
// @ts-ignore
|
|
8105
|
-
w: element.width,
|
|
8106
|
-
// @ts-ignore
|
|
8107
|
-
h: element.height,
|
|
8108
|
-
layer: (
|
|
8109
|
-
// @ts-ignore
|
|
8110
|
-
element.layer === "bottom" ? "bottom_silkscreen" : "top_silkscreen"
|
|
8111
|
-
)
|
|
8112
|
-
}
|
|
8113
|
-
];
|
|
8114
|
-
}
|
|
8115
|
-
case "pcb_silkscreen_line": {
|
|
8116
|
-
return [
|
|
8117
|
-
{
|
|
8118
|
-
_pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,
|
|
8119
|
-
pcb_drawing_type: "line",
|
|
8120
|
-
x1: element.x1,
|
|
8121
|
-
y1: element.y1,
|
|
8122
|
-
x2: element.x2,
|
|
8123
|
-
y2: element.y2,
|
|
8124
|
-
width: 0.1,
|
|
8125
|
-
// TODO add strokewidth
|
|
8126
|
-
squareCap: false,
|
|
8127
|
-
layer: element.layer === "bottom" ? "bottom_silkscreen" : "top_silkscreen"
|
|
8128
|
-
}
|
|
8129
|
-
];
|
|
8130
|
-
}
|
|
8131
8059
|
case "pcb_fabrication_note_rect": {
|
|
8132
8060
|
const rectElement = element;
|
|
8133
8061
|
const layer = rectElement.layer === "bottom" ? "bottom_fabrication" : "top_fabrication";
|
|
@@ -8156,73 +8084,28 @@ var convertElementToPrimitives = (element, allElements) => {
|
|
|
8156
8084
|
}
|
|
8157
8085
|
];
|
|
8158
8086
|
}
|
|
8159
|
-
case "pcb_fabrication_note_path":
|
|
8160
|
-
|
|
8161
|
-
const
|
|
8162
|
-
|
|
8163
|
-
route
|
|
8164
|
-
|
|
8165
|
-
|
|
8166
|
-
|
|
8167
|
-
|
|
8168
|
-
|
|
8169
|
-
|
|
8170
|
-
|
|
8171
|
-
|
|
8172
|
-
|
|
8173
|
-
|
|
8174
|
-
|
|
8175
|
-
|
|
8176
|
-
|
|
8177
|
-
|
|
8178
|
-
|
|
8179
|
-
|
|
8180
|
-
|
|
8181
|
-
layer,
|
|
8182
|
-
_element: element,
|
|
8183
|
-
_parent_pcb_component,
|
|
8184
|
-
_parent_source_component,
|
|
8185
|
-
_source_port
|
|
8186
|
-
};
|
|
8187
|
-
}).filter(Boolean);
|
|
8188
|
-
} else if (type === "pcb_fabrication_note_path") {
|
|
8189
|
-
layer = "top_fabrication";
|
|
8190
|
-
return route.slice(0, -1).map((point, index) => {
|
|
8191
|
-
const nextPoint = route[index + 1];
|
|
8192
|
-
return {
|
|
8193
|
-
_pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,
|
|
8194
|
-
pcb_drawing_type: "line",
|
|
8195
|
-
x1: point.x,
|
|
8196
|
-
y1: point.y,
|
|
8197
|
-
x2: nextPoint.x,
|
|
8198
|
-
y2: nextPoint.y,
|
|
8199
|
-
width: element.stroke_width ?? 0.1,
|
|
8200
|
-
squareCap: false,
|
|
8201
|
-
layer,
|
|
8202
|
-
color: element.color,
|
|
8203
|
-
_element: element,
|
|
8204
|
-
_parent_pcb_component,
|
|
8205
|
-
_parent_source_component,
|
|
8206
|
-
_source_port
|
|
8207
|
-
};
|
|
8208
|
-
}).filter(Boolean);
|
|
8209
|
-
}
|
|
8210
|
-
}
|
|
8211
|
-
case "pcb_silkscreen_text": {
|
|
8212
|
-
return [
|
|
8213
|
-
{
|
|
8214
|
-
_pcb_drawing_object_id: `text_${globalPcbDrawingObjectCount++}`,
|
|
8215
|
-
pcb_drawing_type: "text",
|
|
8216
|
-
x: element.anchor_position.x,
|
|
8217
|
-
y: element.anchor_position.y,
|
|
8218
|
-
layer: element.layer === "bottom" ? "bottom_silkscreen" : "top_silkscreen",
|
|
8219
|
-
align: element.anchor_alignment ?? "center",
|
|
8220
|
-
text: element.text,
|
|
8221
|
-
size: element.font_size,
|
|
8222
|
-
// Add the required 'size' property
|
|
8223
|
-
ccw_rotation: element.ccw_rotation
|
|
8224
|
-
}
|
|
8225
|
-
];
|
|
8087
|
+
case "pcb_fabrication_note_path": {
|
|
8088
|
+
const { route } = element;
|
|
8089
|
+
const layer = "top_fabrication";
|
|
8090
|
+
return route.slice(0, -1).map((point, index) => {
|
|
8091
|
+
const nextPoint = route[index + 1];
|
|
8092
|
+
return {
|
|
8093
|
+
_pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,
|
|
8094
|
+
pcb_drawing_type: "line",
|
|
8095
|
+
x1: point.x,
|
|
8096
|
+
y1: point.y,
|
|
8097
|
+
x2: nextPoint.x,
|
|
8098
|
+
y2: nextPoint.y,
|
|
8099
|
+
width: element.stroke_width ?? 0.1,
|
|
8100
|
+
squareCap: false,
|
|
8101
|
+
layer,
|
|
8102
|
+
color: element.color,
|
|
8103
|
+
_element: element,
|
|
8104
|
+
_parent_pcb_component,
|
|
8105
|
+
_parent_source_component,
|
|
8106
|
+
_source_port
|
|
8107
|
+
};
|
|
8108
|
+
}).filter(Boolean);
|
|
8226
8109
|
}
|
|
8227
8110
|
case "pcb_copper_text": {
|
|
8228
8111
|
return convertPcbCopperTextToPrimitive(element, {
|
|
@@ -9859,6 +9742,27 @@ var drawPrimitives = (drawer, primitives) => {
|
|
|
9859
9742
|
}
|
|
9860
9743
|
};
|
|
9861
9744
|
|
|
9745
|
+
// src/lib/draw-silkscreen.ts
|
|
9746
|
+
import {
|
|
9747
|
+
DEFAULT_PCB_COLOR_MAP,
|
|
9748
|
+
CircuitToCanvasDrawer
|
|
9749
|
+
} from "circuit-to-canvas";
|
|
9750
|
+
var PCB_VIEWER_COLOR_MAP = {
|
|
9751
|
+
...DEFAULT_PCB_COLOR_MAP,
|
|
9752
|
+
silkscreen: {
|
|
9753
|
+
top: colors_default.board.f_silks,
|
|
9754
|
+
bottom: colors_default.board.b_silks
|
|
9755
|
+
}
|
|
9756
|
+
};
|
|
9757
|
+
function drawSilkscreenElementsForLayer(canvas, elements, layer, realToCanvasMat) {
|
|
9758
|
+
const drawer = new CircuitToCanvasDrawer(canvas);
|
|
9759
|
+
drawer.configure({
|
|
9760
|
+
colorOverrides: PCB_VIEWER_COLOR_MAP
|
|
9761
|
+
});
|
|
9762
|
+
drawer.realToCanvasMat = realToCanvasMat;
|
|
9763
|
+
drawer.drawElements(elements, { layers: [layer] });
|
|
9764
|
+
}
|
|
9765
|
+
|
|
9862
9766
|
// src/components/CanvasPrimitiveRenderer.tsx
|
|
9863
9767
|
import { jsx as jsx3, jsxs } from "react/jsx-runtime";
|
|
9864
9768
|
var orderedLayers = [
|
|
@@ -9883,6 +9787,7 @@ var orderedLayers = [
|
|
|
9883
9787
|
];
|
|
9884
9788
|
var CanvasPrimitiveRenderer = ({
|
|
9885
9789
|
primitives,
|
|
9790
|
+
elements,
|
|
9886
9791
|
transform,
|
|
9887
9792
|
grid,
|
|
9888
9793
|
width = 500,
|
|
@@ -9910,8 +9815,28 @@ var CanvasPrimitiveRenderer = ({
|
|
|
9910
9815
|
drawer.foregroundLayer = selectedLayer;
|
|
9911
9816
|
const filteredPrimitives = isShowingSolderMask ? primitives : primitives.filter((p) => !p.layer?.includes("soldermask"));
|
|
9912
9817
|
drawPrimitives(drawer, filteredPrimitives);
|
|
9818
|
+
if (transform) {
|
|
9819
|
+
const topSilkscreenCanvas = canvasRefs.current.top_silkscreen;
|
|
9820
|
+
if (topSilkscreenCanvas) {
|
|
9821
|
+
drawSilkscreenElementsForLayer(
|
|
9822
|
+
topSilkscreenCanvas,
|
|
9823
|
+
elements,
|
|
9824
|
+
"top_silkscreen",
|
|
9825
|
+
transform
|
|
9826
|
+
);
|
|
9827
|
+
}
|
|
9828
|
+
const bottomSilkscreenCanvas = canvasRefs.current.bottom_silkscreen;
|
|
9829
|
+
if (bottomSilkscreenCanvas) {
|
|
9830
|
+
drawSilkscreenElementsForLayer(
|
|
9831
|
+
bottomSilkscreenCanvas,
|
|
9832
|
+
elements,
|
|
9833
|
+
"bottom_silkscreen",
|
|
9834
|
+
transform
|
|
9835
|
+
);
|
|
9836
|
+
}
|
|
9837
|
+
}
|
|
9913
9838
|
drawer.orderAndFadeLayers();
|
|
9914
|
-
}, [primitives, transform, selectedLayer, isShowingSolderMask]);
|
|
9839
|
+
}, [primitives, elements, transform, selectedLayer, isShowingSolderMask]);
|
|
9915
9840
|
return /* @__PURE__ */ jsxs(
|
|
9916
9841
|
"div",
|
|
9917
9842
|
{
|
|
@@ -13946,7 +13871,7 @@ import { css as css3 } from "@emotion/css";
|
|
|
13946
13871
|
// package.json
|
|
13947
13872
|
var package_default = {
|
|
13948
13873
|
name: "@tscircuit/pcb-viewer",
|
|
13949
|
-
version: "1.11.
|
|
13874
|
+
version: "1.11.296",
|
|
13950
13875
|
main: "dist/index.js",
|
|
13951
13876
|
type: "module",
|
|
13952
13877
|
repository: "tscircuit/pcb-viewer",
|
|
@@ -13970,7 +13895,7 @@ var package_default = {
|
|
|
13970
13895
|
"@semantic-release/npm": "^9.0.1",
|
|
13971
13896
|
"@semantic-release/release-notes-generator": "^10.0.3",
|
|
13972
13897
|
"@swc/core": "^1.4.12",
|
|
13973
|
-
"@tscircuit/circuit-json-util": "^0.0.
|
|
13898
|
+
"@tscircuit/circuit-json-util": "^0.0.75",
|
|
13974
13899
|
"@tscircuit/eagle-xml-converter": "^1.0.0",
|
|
13975
13900
|
"@types/bun": "latest",
|
|
13976
13901
|
"@types/color": "^3.0.6",
|
|
@@ -13999,7 +13924,8 @@ var package_default = {
|
|
|
13999
13924
|
"@tscircuit/alphabet": "^0.0.9",
|
|
14000
13925
|
"@tscircuit/math-utils": "^0.0.29",
|
|
14001
13926
|
"@vitejs/plugin-react": "^5.0.2",
|
|
14002
|
-
"circuit-json": "^0.0.
|
|
13927
|
+
"circuit-json": "^0.0.347",
|
|
13928
|
+
"circuit-to-canvas": "^0.0.31",
|
|
14003
13929
|
"circuit-to-svg": "^0.0.271",
|
|
14004
13930
|
color: "^4.2.3",
|
|
14005
13931
|
"react-supergrid": "^1.0.10",
|
|
@@ -14944,6 +14870,7 @@ var CanvasElementsRenderer = (props) => {
|
|
|
14944
14870
|
{
|
|
14945
14871
|
transform,
|
|
14946
14872
|
primitives,
|
|
14873
|
+
elements: elementsToRender,
|
|
14947
14874
|
width: props.width,
|
|
14948
14875
|
height: props.height,
|
|
14949
14876
|
grid: props.grid
|