@tscircuit/pcb-viewer 1.11.316 → 1.11.317
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 +334 -280
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -7846,10 +7846,6 @@ var convertElementToPrimitives = (element, allElements) => {
|
|
|
7846
7846
|
return [];
|
|
7847
7847
|
};
|
|
7848
7848
|
|
|
7849
|
-
// src/components/CanvasPrimitiveRenderer.tsx
|
|
7850
|
-
import { SuperGrid, toMMSI } from "react-supergrid";
|
|
7851
|
-
import { useEffect as useEffect4, useRef as useRef2 } from "react";
|
|
7852
|
-
|
|
7853
7849
|
// src/lib/Drawer.ts
|
|
7854
7850
|
import {
|
|
7855
7851
|
applyToPoint as applyToPoint3,
|
|
@@ -8621,6 +8617,265 @@ var Drawer = class {
|
|
|
8621
8617
|
}
|
|
8622
8618
|
};
|
|
8623
8619
|
|
|
8620
|
+
// src/lib/draw-copper-pour.ts
|
|
8621
|
+
import { CircuitToCanvasDrawer } from "circuit-to-canvas";
|
|
8622
|
+
function isCopperPourElement(element) {
|
|
8623
|
+
return element.type === "pcb_copper_pour";
|
|
8624
|
+
}
|
|
8625
|
+
function drawCopperPourElementsForLayer({
|
|
8626
|
+
canvas,
|
|
8627
|
+
elements,
|
|
8628
|
+
layers,
|
|
8629
|
+
realToCanvasMat
|
|
8630
|
+
}) {
|
|
8631
|
+
const copperPourElements = elements.filter(isCopperPourElement);
|
|
8632
|
+
if (copperPourElements.length === 0) return;
|
|
8633
|
+
const drawer = new CircuitToCanvasDrawer(canvas);
|
|
8634
|
+
drawer.realToCanvasMat = realToCanvasMat;
|
|
8635
|
+
drawer.drawElements(copperPourElements, { layers });
|
|
8636
|
+
}
|
|
8637
|
+
|
|
8638
|
+
// src/lib/draw-fabrication-note.ts
|
|
8639
|
+
import {
|
|
8640
|
+
CircuitToCanvasDrawer as CircuitToCanvasDrawer2,
|
|
8641
|
+
DEFAULT_PCB_COLOR_MAP
|
|
8642
|
+
} from "circuit-to-canvas";
|
|
8643
|
+
var PCB_VIEWER_COLOR_MAP = {
|
|
8644
|
+
...DEFAULT_PCB_COLOR_MAP,
|
|
8645
|
+
silkscreen: {
|
|
8646
|
+
top: colors_default.board.f_fab,
|
|
8647
|
+
bottom: colors_default.board.b_fab
|
|
8648
|
+
}
|
|
8649
|
+
};
|
|
8650
|
+
function isFabricationNote(element) {
|
|
8651
|
+
return element.type.includes("pcb_fabrication_note");
|
|
8652
|
+
}
|
|
8653
|
+
function drawFabricationNoteElementsForLayer({
|
|
8654
|
+
canvas,
|
|
8655
|
+
elements,
|
|
8656
|
+
layers,
|
|
8657
|
+
realToCanvasMat
|
|
8658
|
+
}) {
|
|
8659
|
+
const drawer = new CircuitToCanvasDrawer2(canvas);
|
|
8660
|
+
drawer.configure({
|
|
8661
|
+
colorOverrides: PCB_VIEWER_COLOR_MAP
|
|
8662
|
+
});
|
|
8663
|
+
drawer.realToCanvasMat = realToCanvasMat;
|
|
8664
|
+
const fabricationElements = elements.filter(isFabricationNote);
|
|
8665
|
+
drawer.drawElements(fabricationElements, { layers });
|
|
8666
|
+
}
|
|
8667
|
+
|
|
8668
|
+
// src/lib/draw-hole.ts
|
|
8669
|
+
import { CircuitToCanvasDrawer as CircuitToCanvasDrawer3 } from "circuit-to-canvas";
|
|
8670
|
+
function isPcbHole(element) {
|
|
8671
|
+
return element.type === "pcb_hole";
|
|
8672
|
+
}
|
|
8673
|
+
function drawPcbHoleElementsForLayer({
|
|
8674
|
+
canvas,
|
|
8675
|
+
elements,
|
|
8676
|
+
layers,
|
|
8677
|
+
realToCanvasMat,
|
|
8678
|
+
drawSoldermask
|
|
8679
|
+
}) {
|
|
8680
|
+
const drawer = new CircuitToCanvasDrawer3(canvas);
|
|
8681
|
+
drawer.realToCanvasMat = realToCanvasMat;
|
|
8682
|
+
const holeElements = elements.filter(isPcbHole);
|
|
8683
|
+
drawer.drawElements(holeElements, { layers, drawSoldermask });
|
|
8684
|
+
}
|
|
8685
|
+
|
|
8686
|
+
// src/lib/draw-pcb-board.ts
|
|
8687
|
+
import { CircuitToCanvasDrawer as CircuitToCanvasDrawer4 } from "circuit-to-canvas";
|
|
8688
|
+
function isPcbBoardElement(element) {
|
|
8689
|
+
return element.type === "pcb_board";
|
|
8690
|
+
}
|
|
8691
|
+
function drawPcbBoardElements({
|
|
8692
|
+
canvas,
|
|
8693
|
+
elements,
|
|
8694
|
+
layers,
|
|
8695
|
+
realToCanvasMat,
|
|
8696
|
+
drawSoldermask
|
|
8697
|
+
}) {
|
|
8698
|
+
const drawer = new CircuitToCanvasDrawer4(canvas);
|
|
8699
|
+
drawer.realToCanvasMat = realToCanvasMat;
|
|
8700
|
+
const pcbBoardElements = elements.filter(isPcbBoardElement);
|
|
8701
|
+
drawer.drawElements(pcbBoardElements, { layers, drawSoldermask });
|
|
8702
|
+
}
|
|
8703
|
+
|
|
8704
|
+
// src/lib/draw-pcb-cutout.ts
|
|
8705
|
+
import { CircuitToCanvasDrawer as CircuitToCanvasDrawer5 } from "circuit-to-canvas";
|
|
8706
|
+
function isPcbCutout(element) {
|
|
8707
|
+
return element.type === "pcb_cutout";
|
|
8708
|
+
}
|
|
8709
|
+
function drawPcbCutoutElementsForLayer({
|
|
8710
|
+
canvas,
|
|
8711
|
+
elements,
|
|
8712
|
+
layers,
|
|
8713
|
+
realToCanvasMat
|
|
8714
|
+
}) {
|
|
8715
|
+
const drawer = new CircuitToCanvasDrawer5(canvas);
|
|
8716
|
+
drawer.realToCanvasMat = realToCanvasMat;
|
|
8717
|
+
const cutoutElements = elements.filter(isPcbCutout);
|
|
8718
|
+
drawer.drawElements(cutoutElements, { layers });
|
|
8719
|
+
}
|
|
8720
|
+
|
|
8721
|
+
// src/lib/draw-pcb-keepout.ts
|
|
8722
|
+
import { CircuitToCanvasDrawer as CircuitToCanvasDrawer6 } from "circuit-to-canvas";
|
|
8723
|
+
function isPcbKeepout(element) {
|
|
8724
|
+
return element.type === "pcb_keepout";
|
|
8725
|
+
}
|
|
8726
|
+
function drawPcbKeepoutElementsForLayer({
|
|
8727
|
+
canvas,
|
|
8728
|
+
elements,
|
|
8729
|
+
layers,
|
|
8730
|
+
realToCanvasMat
|
|
8731
|
+
}) {
|
|
8732
|
+
const keepoutElements = elements.filter(isPcbKeepout);
|
|
8733
|
+
if (keepoutElements.length === 0) return;
|
|
8734
|
+
const drawer = new CircuitToCanvasDrawer6(canvas);
|
|
8735
|
+
drawer.realToCanvasMat = realToCanvasMat;
|
|
8736
|
+
drawer.drawElements(keepoutElements, { layers: [] });
|
|
8737
|
+
}
|
|
8738
|
+
|
|
8739
|
+
// src/lib/draw-pcb-note.ts
|
|
8740
|
+
import {
|
|
8741
|
+
CircuitToCanvasDrawer as CircuitToCanvasDrawer7
|
|
8742
|
+
} from "circuit-to-canvas";
|
|
8743
|
+
function isPcbNote(element) {
|
|
8744
|
+
return element.type.startsWith("pcb_note_");
|
|
8745
|
+
}
|
|
8746
|
+
function drawPcbNoteElementsForLayer({
|
|
8747
|
+
canvas,
|
|
8748
|
+
elements,
|
|
8749
|
+
layers,
|
|
8750
|
+
realToCanvasMat
|
|
8751
|
+
}) {
|
|
8752
|
+
const drawer = new CircuitToCanvasDrawer7(canvas);
|
|
8753
|
+
drawer.realToCanvasMat = realToCanvasMat;
|
|
8754
|
+
const pcbNoteElements = elements.filter(isPcbNote);
|
|
8755
|
+
drawer.drawElements(pcbNoteElements, { layers });
|
|
8756
|
+
}
|
|
8757
|
+
|
|
8758
|
+
// src/lib/draw-pcb-smtpad.ts
|
|
8759
|
+
import {
|
|
8760
|
+
CircuitToCanvasDrawer as CircuitToCanvasDrawer8,
|
|
8761
|
+
DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP3
|
|
8762
|
+
} from "circuit-to-canvas";
|
|
8763
|
+
import color from "color";
|
|
8764
|
+
var HOVER_COLOR_MAP = {
|
|
8765
|
+
...DEFAULT_PCB_COLOR_MAP3,
|
|
8766
|
+
copper: {
|
|
8767
|
+
...DEFAULT_PCB_COLOR_MAP3.copper,
|
|
8768
|
+
top: color(colors_default.board.pad_front).lighten(0.5).toString(),
|
|
8769
|
+
bottom: color(colors_default.board.pad_back).lighten(0.5).toString()
|
|
8770
|
+
}
|
|
8771
|
+
};
|
|
8772
|
+
function isPcbSmtPad(element) {
|
|
8773
|
+
return element.type === "pcb_smtpad";
|
|
8774
|
+
}
|
|
8775
|
+
function drawPcbSmtPadElementsForLayer({
|
|
8776
|
+
canvas,
|
|
8777
|
+
elements,
|
|
8778
|
+
layers,
|
|
8779
|
+
realToCanvasMat,
|
|
8780
|
+
primitives,
|
|
8781
|
+
drawSoldermask
|
|
8782
|
+
}) {
|
|
8783
|
+
const smtPadElements = elements.filter(isPcbSmtPad).filter((element) => {
|
|
8784
|
+
const elementLayer = element.layer;
|
|
8785
|
+
return layers.some((layer) => {
|
|
8786
|
+
if (layer === "top_copper" && elementLayer === "top") return true;
|
|
8787
|
+
if (layer === "bottom_copper" && elementLayer === "bottom") return true;
|
|
8788
|
+
return false;
|
|
8789
|
+
});
|
|
8790
|
+
});
|
|
8791
|
+
if (smtPadElements.length === 0) return;
|
|
8792
|
+
const highlightedElementIds = /* @__PURE__ */ new Set();
|
|
8793
|
+
if (primitives) {
|
|
8794
|
+
for (const primitive of primitives) {
|
|
8795
|
+
if ((primitive.is_mouse_over || primitive.is_in_highlighted_net) && primitive._element?.type === "pcb_smtpad") {
|
|
8796
|
+
highlightedElementIds.add(primitive._element.pcb_smtpad_id);
|
|
8797
|
+
}
|
|
8798
|
+
}
|
|
8799
|
+
}
|
|
8800
|
+
const highlightedElements = smtPadElements.filter(
|
|
8801
|
+
(element) => highlightedElementIds.has(element.pcb_smtpad_id)
|
|
8802
|
+
);
|
|
8803
|
+
const nonHighlightedElements = smtPadElements.filter(
|
|
8804
|
+
(element) => !highlightedElementIds.has(element.pcb_smtpad_id)
|
|
8805
|
+
);
|
|
8806
|
+
if (nonHighlightedElements.length > 0) {
|
|
8807
|
+
const drawer = new CircuitToCanvasDrawer8(canvas);
|
|
8808
|
+
drawer.realToCanvasMat = realToCanvasMat;
|
|
8809
|
+
drawer.drawElements(nonHighlightedElements, { layers: [], drawSoldermask });
|
|
8810
|
+
}
|
|
8811
|
+
if (highlightedElements.length > 0) {
|
|
8812
|
+
const highlightDrawer = new CircuitToCanvasDrawer8(canvas);
|
|
8813
|
+
highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP });
|
|
8814
|
+
highlightDrawer.realToCanvasMat = realToCanvasMat;
|
|
8815
|
+
highlightDrawer.drawElements(highlightedElements, {
|
|
8816
|
+
layers: [],
|
|
8817
|
+
drawSoldermask
|
|
8818
|
+
});
|
|
8819
|
+
}
|
|
8820
|
+
}
|
|
8821
|
+
|
|
8822
|
+
// src/lib/draw-plated-hole.ts
|
|
8823
|
+
import {
|
|
8824
|
+
CircuitToCanvasDrawer as CircuitToCanvasDrawer9,
|
|
8825
|
+
DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP4
|
|
8826
|
+
} from "circuit-to-canvas";
|
|
8827
|
+
import color2 from "color";
|
|
8828
|
+
var HOVER_COLOR_MAP2 = {
|
|
8829
|
+
...DEFAULT_PCB_COLOR_MAP4,
|
|
8830
|
+
copper: {
|
|
8831
|
+
...DEFAULT_PCB_COLOR_MAP4.copper,
|
|
8832
|
+
top: color2(colors_default.board.pad_front).lighten(0.5).toString(),
|
|
8833
|
+
bottom: color2(colors_default.board.pad_back).lighten(0.5).toString()
|
|
8834
|
+
}
|
|
8835
|
+
};
|
|
8836
|
+
function isPlatedHole(element) {
|
|
8837
|
+
return element.type === "pcb_plated_hole";
|
|
8838
|
+
}
|
|
8839
|
+
function drawPlatedHolePads({
|
|
8840
|
+
canvas,
|
|
8841
|
+
elements,
|
|
8842
|
+
layers,
|
|
8843
|
+
realToCanvasMat,
|
|
8844
|
+
primitives,
|
|
8845
|
+
drawSoldermask
|
|
8846
|
+
}) {
|
|
8847
|
+
const platedHoleElements = elements.filter(isPlatedHole);
|
|
8848
|
+
if (platedHoleElements.length === 0) return;
|
|
8849
|
+
const highlightedElementIds = /* @__PURE__ */ new Set();
|
|
8850
|
+
if (primitives) {
|
|
8851
|
+
for (const primitive of primitives) {
|
|
8852
|
+
if ((primitive.is_mouse_over || primitive.is_in_highlighted_net) && primitive._element?.type === "pcb_plated_hole") {
|
|
8853
|
+
highlightedElementIds.add(primitive._element.pcb_plated_hole_id);
|
|
8854
|
+
}
|
|
8855
|
+
}
|
|
8856
|
+
}
|
|
8857
|
+
const highlightedElements = platedHoleElements.filter(
|
|
8858
|
+
(element) => highlightedElementIds.has(element.pcb_plated_hole_id)
|
|
8859
|
+
);
|
|
8860
|
+
const nonHighlightedElements = platedHoleElements.filter(
|
|
8861
|
+
(element) => !highlightedElementIds.has(element.pcb_plated_hole_id)
|
|
8862
|
+
);
|
|
8863
|
+
if (nonHighlightedElements.length > 0) {
|
|
8864
|
+
const drawer = new CircuitToCanvasDrawer9(canvas);
|
|
8865
|
+
drawer.realToCanvasMat = realToCanvasMat;
|
|
8866
|
+
drawer.drawElements(nonHighlightedElements, { layers, drawSoldermask });
|
|
8867
|
+
}
|
|
8868
|
+
if (highlightedElements.length > 0) {
|
|
8869
|
+
const highlightDrawer = new CircuitToCanvasDrawer9(canvas);
|
|
8870
|
+
highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP2 });
|
|
8871
|
+
highlightDrawer.realToCanvasMat = realToCanvasMat;
|
|
8872
|
+
highlightDrawer.drawElements(highlightedElements, {
|
|
8873
|
+
layers,
|
|
8874
|
+
drawSoldermask
|
|
8875
|
+
});
|
|
8876
|
+
}
|
|
8877
|
+
}
|
|
8878
|
+
|
|
8624
8879
|
// src/lib/util/rotate-text.ts
|
|
8625
8880
|
import { compose as compose4, translate as translate8, rotate, applyToPoint as applyToPoint4 } from "transformation-matrix";
|
|
8626
8881
|
function rotateText(rotateTextParams) {
|
|
@@ -8737,11 +8992,11 @@ var convertTextToLines = (text) => {
|
|
|
8737
8992
|
};
|
|
8738
8993
|
|
|
8739
8994
|
// src/lib/draw-primitives.ts
|
|
8740
|
-
import
|
|
8995
|
+
import color3 from "color";
|
|
8741
8996
|
function getColor(primitive) {
|
|
8742
8997
|
const explicitColor = primitive.color;
|
|
8743
8998
|
const baseColorString = explicitColor ?? LAYER_NAME_TO_COLOR[primitive.layer];
|
|
8744
|
-
let c =
|
|
8999
|
+
let c = color3(baseColorString);
|
|
8745
9000
|
if (primitive._element?.type === "pcb_copper_pour") {
|
|
8746
9001
|
c = c.alpha(0.7);
|
|
8747
9002
|
}
|
|
@@ -9016,11 +9271,11 @@ var drawPrimitives = (drawer, primitives) => {
|
|
|
9016
9271
|
|
|
9017
9272
|
// src/lib/draw-silkscreen.ts
|
|
9018
9273
|
import {
|
|
9019
|
-
|
|
9020
|
-
|
|
9274
|
+
CircuitToCanvasDrawer as CircuitToCanvasDrawer10,
|
|
9275
|
+
DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP5
|
|
9021
9276
|
} from "circuit-to-canvas";
|
|
9022
|
-
var
|
|
9023
|
-
...
|
|
9277
|
+
var PCB_VIEWER_COLOR_MAP2 = {
|
|
9278
|
+
...DEFAULT_PCB_COLOR_MAP5,
|
|
9024
9279
|
silkscreen: {
|
|
9025
9280
|
top: colors_default.board.f_silks,
|
|
9026
9281
|
bottom: colors_default.board.b_silks
|
|
@@ -9029,226 +9284,25 @@ var PCB_VIEWER_COLOR_MAP = {
|
|
|
9029
9284
|
function isSilkscreenElement(element) {
|
|
9030
9285
|
return element.type.includes("pcb_silkscreen");
|
|
9031
9286
|
}
|
|
9032
|
-
function drawSilkscreenElementsForLayer(
|
|
9033
|
-
const drawer = new CircuitToCanvasDrawer(canvas);
|
|
9034
|
-
drawer.configure({
|
|
9035
|
-
colorOverrides: PCB_VIEWER_COLOR_MAP
|
|
9036
|
-
});
|
|
9037
|
-
drawer.realToCanvasMat = realToCanvasMat;
|
|
9038
|
-
const silkscreenElements = elements.filter(isSilkscreenElement);
|
|
9039
|
-
drawer.drawElements(silkscreenElements, { layers });
|
|
9040
|
-
}
|
|
9041
|
-
|
|
9042
|
-
// src/lib/draw-plated-hole.ts
|
|
9043
|
-
import {
|
|
9044
|
-
DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP2,
|
|
9045
|
-
CircuitToCanvasDrawer as CircuitToCanvasDrawer2
|
|
9046
|
-
} from "circuit-to-canvas";
|
|
9047
|
-
import color2 from "color";
|
|
9048
|
-
var HOVER_COLOR_MAP = {
|
|
9049
|
-
...DEFAULT_PCB_COLOR_MAP2,
|
|
9050
|
-
copper: {
|
|
9051
|
-
...DEFAULT_PCB_COLOR_MAP2.copper,
|
|
9052
|
-
top: color2(colors_default.board.pad_front).lighten(0.5).toString(),
|
|
9053
|
-
bottom: color2(colors_default.board.pad_back).lighten(0.5).toString()
|
|
9054
|
-
}
|
|
9055
|
-
};
|
|
9056
|
-
function isPlatedHole(element) {
|
|
9057
|
-
return element.type === "pcb_plated_hole";
|
|
9058
|
-
}
|
|
9059
|
-
function drawPlatedHolePads({
|
|
9287
|
+
function drawSilkscreenElementsForLayer({
|
|
9060
9288
|
canvas,
|
|
9061
9289
|
elements,
|
|
9062
9290
|
layers,
|
|
9063
|
-
realToCanvasMat
|
|
9064
|
-
primitives
|
|
9291
|
+
realToCanvasMat
|
|
9065
9292
|
}) {
|
|
9066
|
-
const
|
|
9067
|
-
if (platedHoleElements.length === 0) return;
|
|
9068
|
-
const highlightedElementIds = /* @__PURE__ */ new Set();
|
|
9069
|
-
if (primitives) {
|
|
9070
|
-
for (const primitive of primitives) {
|
|
9071
|
-
if ((primitive.is_mouse_over || primitive.is_in_highlighted_net) && primitive._element?.type === "pcb_plated_hole") {
|
|
9072
|
-
highlightedElementIds.add(primitive._element.pcb_plated_hole_id);
|
|
9073
|
-
}
|
|
9074
|
-
}
|
|
9075
|
-
}
|
|
9076
|
-
const highlightedElements = platedHoleElements.filter(
|
|
9077
|
-
(element) => highlightedElementIds.has(element.pcb_plated_hole_id)
|
|
9078
|
-
);
|
|
9079
|
-
const nonHighlightedElements = platedHoleElements.filter(
|
|
9080
|
-
(element) => !highlightedElementIds.has(element.pcb_plated_hole_id)
|
|
9081
|
-
);
|
|
9082
|
-
if (nonHighlightedElements.length > 0) {
|
|
9083
|
-
const drawer = new CircuitToCanvasDrawer2(canvas);
|
|
9084
|
-
drawer.realToCanvasMat = realToCanvasMat;
|
|
9085
|
-
drawer.drawElements(nonHighlightedElements, { layers });
|
|
9086
|
-
}
|
|
9087
|
-
if (highlightedElements.length > 0) {
|
|
9088
|
-
const highlightDrawer = new CircuitToCanvasDrawer2(canvas);
|
|
9089
|
-
highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP });
|
|
9090
|
-
highlightDrawer.realToCanvasMat = realToCanvasMat;
|
|
9091
|
-
highlightDrawer.drawElements(highlightedElements, { layers });
|
|
9092
|
-
}
|
|
9093
|
-
}
|
|
9094
|
-
|
|
9095
|
-
// src/lib/draw-fabrication-note.ts
|
|
9096
|
-
import {
|
|
9097
|
-
DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP3,
|
|
9098
|
-
CircuitToCanvasDrawer as CircuitToCanvasDrawer3
|
|
9099
|
-
} from "circuit-to-canvas";
|
|
9100
|
-
var PCB_VIEWER_COLOR_MAP2 = {
|
|
9101
|
-
...DEFAULT_PCB_COLOR_MAP3,
|
|
9102
|
-
silkscreen: {
|
|
9103
|
-
top: colors_default.board.f_fab,
|
|
9104
|
-
bottom: colors_default.board.b_fab
|
|
9105
|
-
}
|
|
9106
|
-
};
|
|
9107
|
-
function isFabricationNote(element) {
|
|
9108
|
-
return element.type.includes("pcb_fabrication_note");
|
|
9109
|
-
}
|
|
9110
|
-
function drawFabricationNoteElementsForLayer(canvas, elements, layers, realToCanvasMat) {
|
|
9111
|
-
const drawer = new CircuitToCanvasDrawer3(canvas);
|
|
9293
|
+
const drawer = new CircuitToCanvasDrawer10(canvas);
|
|
9112
9294
|
drawer.configure({
|
|
9113
9295
|
colorOverrides: PCB_VIEWER_COLOR_MAP2
|
|
9114
9296
|
});
|
|
9115
9297
|
drawer.realToCanvasMat = realToCanvasMat;
|
|
9116
|
-
const
|
|
9117
|
-
drawer.drawElements(
|
|
9118
|
-
}
|
|
9119
|
-
|
|
9120
|
-
// src/lib/draw-pcb-note.ts
|
|
9121
|
-
import {
|
|
9122
|
-
CircuitToCanvasDrawer as CircuitToCanvasDrawer4
|
|
9123
|
-
} from "circuit-to-canvas";
|
|
9124
|
-
function isPcbNote(element) {
|
|
9125
|
-
return element.type.startsWith("pcb_note_");
|
|
9126
|
-
}
|
|
9127
|
-
function drawPcbNoteElementsForLayer(canvas, elements, layers, realToCanvasMat) {
|
|
9128
|
-
const drawer = new CircuitToCanvasDrawer4(canvas);
|
|
9129
|
-
drawer.realToCanvasMat = realToCanvasMat;
|
|
9130
|
-
const pcbNoteElements = elements.filter(isPcbNote);
|
|
9131
|
-
drawer.drawElements(pcbNoteElements, { layers });
|
|
9132
|
-
}
|
|
9133
|
-
|
|
9134
|
-
// src/lib/draw-hole.ts
|
|
9135
|
-
import { CircuitToCanvasDrawer as CircuitToCanvasDrawer5 } from "circuit-to-canvas";
|
|
9136
|
-
function isPcbHole(element) {
|
|
9137
|
-
return element.type === "pcb_hole";
|
|
9138
|
-
}
|
|
9139
|
-
function drawPcbHoleElementsForLayer(canvas, elements, layers, realToCanvasMat) {
|
|
9140
|
-
const drawer = new CircuitToCanvasDrawer5(canvas);
|
|
9141
|
-
drawer.realToCanvasMat = realToCanvasMat;
|
|
9142
|
-
const holeElements = elements.filter(isPcbHole);
|
|
9143
|
-
drawer.drawElements(holeElements, { layers });
|
|
9144
|
-
}
|
|
9145
|
-
|
|
9146
|
-
// src/lib/draw-pcb-board.ts
|
|
9147
|
-
import { CircuitToCanvasDrawer as CircuitToCanvasDrawer6 } from "circuit-to-canvas";
|
|
9148
|
-
function isPcbBoardElement(element) {
|
|
9149
|
-
return element.type === "pcb_board";
|
|
9150
|
-
}
|
|
9151
|
-
function drawPcbBoardElements(canvas, elements, layers, realToCanvasMat) {
|
|
9152
|
-
const drawer = new CircuitToCanvasDrawer6(canvas);
|
|
9153
|
-
drawer.realToCanvasMat = realToCanvasMat;
|
|
9154
|
-
const pcbBoardElements = elements.filter(isPcbBoardElement);
|
|
9155
|
-
drawer.drawElements(pcbBoardElements, { layers });
|
|
9156
|
-
}
|
|
9157
|
-
|
|
9158
|
-
// src/lib/draw-pcb-cutout.ts
|
|
9159
|
-
import { CircuitToCanvasDrawer as CircuitToCanvasDrawer7 } from "circuit-to-canvas";
|
|
9160
|
-
function isPcbCutout(element) {
|
|
9161
|
-
return element.type === "pcb_cutout";
|
|
9162
|
-
}
|
|
9163
|
-
function drawPcbCutoutElementsForLayer(canvas, elements, layers, realToCanvasMat) {
|
|
9164
|
-
const drawer = new CircuitToCanvasDrawer7(canvas);
|
|
9165
|
-
drawer.realToCanvasMat = realToCanvasMat;
|
|
9166
|
-
const cutoutElements = elements.filter(isPcbCutout);
|
|
9167
|
-
drawer.drawElements(cutoutElements, { layers });
|
|
9168
|
-
}
|
|
9169
|
-
|
|
9170
|
-
// src/lib/draw-pcb-smtpad.ts
|
|
9171
|
-
import {
|
|
9172
|
-
DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP5,
|
|
9173
|
-
CircuitToCanvasDrawer as CircuitToCanvasDrawer8
|
|
9174
|
-
} from "circuit-to-canvas";
|
|
9175
|
-
import color3 from "color";
|
|
9176
|
-
var HOVER_COLOR_MAP2 = {
|
|
9177
|
-
...DEFAULT_PCB_COLOR_MAP5,
|
|
9178
|
-
copper: {
|
|
9179
|
-
...DEFAULT_PCB_COLOR_MAP5.copper,
|
|
9180
|
-
top: color3(colors_default.board.pad_front).lighten(0.5).toString(),
|
|
9181
|
-
bottom: color3(colors_default.board.pad_back).lighten(0.5).toString()
|
|
9182
|
-
}
|
|
9183
|
-
};
|
|
9184
|
-
function isPcbSmtPad(element) {
|
|
9185
|
-
return element.type === "pcb_smtpad";
|
|
9186
|
-
}
|
|
9187
|
-
function drawPcbSmtPadElementsForLayer({
|
|
9188
|
-
canvas,
|
|
9189
|
-
elements,
|
|
9190
|
-
layers,
|
|
9191
|
-
realToCanvasMat,
|
|
9192
|
-
primitives
|
|
9193
|
-
}) {
|
|
9194
|
-
const smtPadElements = elements.filter(isPcbSmtPad).filter((element) => {
|
|
9195
|
-
const elementLayer = element.layer;
|
|
9196
|
-
return layers.some((layer) => {
|
|
9197
|
-
if (layer === "top_copper" && elementLayer === "top") return true;
|
|
9198
|
-
if (layer === "bottom_copper" && elementLayer === "bottom") return true;
|
|
9199
|
-
return false;
|
|
9200
|
-
});
|
|
9201
|
-
});
|
|
9202
|
-
if (smtPadElements.length === 0) return;
|
|
9203
|
-
const highlightedElementIds = /* @__PURE__ */ new Set();
|
|
9204
|
-
if (primitives) {
|
|
9205
|
-
for (const primitive of primitives) {
|
|
9206
|
-
if ((primitive.is_mouse_over || primitive.is_in_highlighted_net) && primitive._element?.type === "pcb_smtpad") {
|
|
9207
|
-
highlightedElementIds.add(primitive._element.pcb_smtpad_id);
|
|
9208
|
-
}
|
|
9209
|
-
}
|
|
9210
|
-
}
|
|
9211
|
-
const highlightedElements = smtPadElements.filter(
|
|
9212
|
-
(element) => highlightedElementIds.has(element.pcb_smtpad_id)
|
|
9213
|
-
);
|
|
9214
|
-
const nonHighlightedElements = smtPadElements.filter(
|
|
9215
|
-
(element) => !highlightedElementIds.has(element.pcb_smtpad_id)
|
|
9216
|
-
);
|
|
9217
|
-
if (nonHighlightedElements.length > 0) {
|
|
9218
|
-
const drawer = new CircuitToCanvasDrawer8(canvas);
|
|
9219
|
-
drawer.realToCanvasMat = realToCanvasMat;
|
|
9220
|
-
drawer.drawElements(nonHighlightedElements, { layers: [] });
|
|
9221
|
-
}
|
|
9222
|
-
if (highlightedElements.length > 0) {
|
|
9223
|
-
const highlightDrawer = new CircuitToCanvasDrawer8(canvas);
|
|
9224
|
-
highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP2 });
|
|
9225
|
-
highlightDrawer.realToCanvasMat = realToCanvasMat;
|
|
9226
|
-
highlightDrawer.drawElements(highlightedElements, { layers: [] });
|
|
9227
|
-
}
|
|
9228
|
-
}
|
|
9229
|
-
|
|
9230
|
-
// src/lib/draw-pcb-keepout.ts
|
|
9231
|
-
import { CircuitToCanvasDrawer as CircuitToCanvasDrawer9 } from "circuit-to-canvas";
|
|
9232
|
-
function isPcbKeepout(element) {
|
|
9233
|
-
return element.type === "pcb_keepout";
|
|
9234
|
-
}
|
|
9235
|
-
function drawPcbKeepoutElementsForLayer({
|
|
9236
|
-
canvas,
|
|
9237
|
-
elements,
|
|
9238
|
-
layers,
|
|
9239
|
-
realToCanvasMat
|
|
9240
|
-
}) {
|
|
9241
|
-
const keepoutElements = elements.filter(isPcbKeepout);
|
|
9242
|
-
if (keepoutElements.length === 0) return;
|
|
9243
|
-
const drawer = new CircuitToCanvasDrawer9(canvas);
|
|
9244
|
-
drawer.realToCanvasMat = realToCanvasMat;
|
|
9245
|
-
drawer.drawElements(keepoutElements, { layers: [] });
|
|
9298
|
+
const silkscreenElements = elements.filter(isSilkscreenElement);
|
|
9299
|
+
drawer.drawElements(silkscreenElements, { layers });
|
|
9246
9300
|
}
|
|
9247
9301
|
|
|
9248
9302
|
// src/lib/draw-via.ts
|
|
9249
9303
|
import {
|
|
9250
9304
|
DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP6,
|
|
9251
|
-
CircuitToCanvasDrawer as
|
|
9305
|
+
CircuitToCanvasDrawer as CircuitToCanvasDrawer11
|
|
9252
9306
|
} from "circuit-to-canvas";
|
|
9253
9307
|
import color4 from "color";
|
|
9254
9308
|
var HOVER_COLOR_MAP3 = {
|
|
@@ -9288,37 +9342,21 @@ function drawPcbViaElementsForLayer({
|
|
|
9288
9342
|
(element) => !highlightedElementIds.has(element.pcb_via_id)
|
|
9289
9343
|
);
|
|
9290
9344
|
if (nonHighlightedElements.length > 0) {
|
|
9291
|
-
const drawer = new
|
|
9345
|
+
const drawer = new CircuitToCanvasDrawer11(canvas);
|
|
9292
9346
|
drawer.realToCanvasMat = realToCanvasMat;
|
|
9293
9347
|
drawer.drawElements(nonHighlightedElements, { layers });
|
|
9294
9348
|
}
|
|
9295
9349
|
if (highlightedElements.length > 0) {
|
|
9296
|
-
const highlightDrawer = new
|
|
9350
|
+
const highlightDrawer = new CircuitToCanvasDrawer11(canvas);
|
|
9297
9351
|
highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP3 });
|
|
9298
9352
|
highlightDrawer.realToCanvasMat = realToCanvasMat;
|
|
9299
9353
|
highlightDrawer.drawElements(highlightedElements, { layers });
|
|
9300
9354
|
}
|
|
9301
9355
|
}
|
|
9302
9356
|
|
|
9303
|
-
// src/lib/draw-copper-pour.ts
|
|
9304
|
-
import { CircuitToCanvasDrawer as CircuitToCanvasDrawer11 } from "circuit-to-canvas";
|
|
9305
|
-
function isCopperPourElement(element) {
|
|
9306
|
-
return element.type === "pcb_copper_pour";
|
|
9307
|
-
}
|
|
9308
|
-
function drawCopperPourElementsForLayer({
|
|
9309
|
-
canvas,
|
|
9310
|
-
elements,
|
|
9311
|
-
layers,
|
|
9312
|
-
realToCanvasMat
|
|
9313
|
-
}) {
|
|
9314
|
-
const copperPourElements = elements.filter(isCopperPourElement);
|
|
9315
|
-
if (copperPourElements.length === 0) return;
|
|
9316
|
-
const drawer = new CircuitToCanvasDrawer11(canvas);
|
|
9317
|
-
drawer.realToCanvasMat = realToCanvasMat;
|
|
9318
|
-
drawer.drawElements(copperPourElements, { layers });
|
|
9319
|
-
}
|
|
9320
|
-
|
|
9321
9357
|
// src/components/CanvasPrimitiveRenderer.tsx
|
|
9358
|
+
import { useEffect as useEffect4, useRef as useRef2 } from "react";
|
|
9359
|
+
import { SuperGrid, toMMSI } from "react-supergrid";
|
|
9322
9360
|
import { jsx as jsx3, jsxs } from "react/jsx-runtime";
|
|
9323
9361
|
var orderedLayers = [
|
|
9324
9362
|
"board",
|
|
@@ -9382,7 +9420,8 @@ var CanvasPrimitiveRenderer = ({
|
|
|
9382
9420
|
elements,
|
|
9383
9421
|
layers: ["top_copper"],
|
|
9384
9422
|
realToCanvasMat: transform,
|
|
9385
|
-
primitives
|
|
9423
|
+
primitives,
|
|
9424
|
+
drawSoldermask: isShowingSolderMask
|
|
9386
9425
|
});
|
|
9387
9426
|
}
|
|
9388
9427
|
const bottomCanvas = canvasRefs.current.bottom;
|
|
@@ -9392,7 +9431,8 @@ var CanvasPrimitiveRenderer = ({
|
|
|
9392
9431
|
elements,
|
|
9393
9432
|
layers: ["bottom_copper"],
|
|
9394
9433
|
realToCanvasMat: transform,
|
|
9395
|
-
primitives
|
|
9434
|
+
primitives,
|
|
9435
|
+
drawSoldermask: isShowingSolderMask
|
|
9396
9436
|
});
|
|
9397
9437
|
}
|
|
9398
9438
|
if (topCanvas) {
|
|
@@ -9401,7 +9441,8 @@ var CanvasPrimitiveRenderer = ({
|
|
|
9401
9441
|
elements,
|
|
9402
9442
|
layers: ["top_copper"],
|
|
9403
9443
|
realToCanvasMat: transform,
|
|
9404
|
-
primitives
|
|
9444
|
+
primitives,
|
|
9445
|
+
drawSoldermask: isShowingSolderMask
|
|
9405
9446
|
});
|
|
9406
9447
|
}
|
|
9407
9448
|
if (bottomCanvas) {
|
|
@@ -9410,7 +9451,8 @@ var CanvasPrimitiveRenderer = ({
|
|
|
9410
9451
|
elements,
|
|
9411
9452
|
layers: ["bottom_copper"],
|
|
9412
9453
|
realToCanvasMat: transform,
|
|
9413
|
-
primitives
|
|
9454
|
+
primitives,
|
|
9455
|
+
drawSoldermask: isShowingSolderMask
|
|
9414
9456
|
});
|
|
9415
9457
|
}
|
|
9416
9458
|
if (topCanvas) {
|
|
@@ -9449,74 +9491,86 @@ var CanvasPrimitiveRenderer = ({
|
|
|
9449
9491
|
}
|
|
9450
9492
|
const topSilkscreenCanvas = canvasRefs.current.top_silkscreen;
|
|
9451
9493
|
if (topSilkscreenCanvas) {
|
|
9452
|
-
drawSilkscreenElementsForLayer(
|
|
9453
|
-
topSilkscreenCanvas,
|
|
9494
|
+
drawSilkscreenElementsForLayer({
|
|
9495
|
+
canvas: topSilkscreenCanvas,
|
|
9454
9496
|
elements,
|
|
9455
|
-
["top_silkscreen"],
|
|
9456
|
-
transform
|
|
9457
|
-
);
|
|
9497
|
+
layers: ["top_silkscreen"],
|
|
9498
|
+
realToCanvasMat: transform
|
|
9499
|
+
});
|
|
9458
9500
|
}
|
|
9459
9501
|
const bottomSilkscreenCanvas = canvasRefs.current.bottom_silkscreen;
|
|
9460
9502
|
if (bottomSilkscreenCanvas) {
|
|
9461
|
-
drawSilkscreenElementsForLayer(
|
|
9462
|
-
bottomSilkscreenCanvas,
|
|
9503
|
+
drawSilkscreenElementsForLayer({
|
|
9504
|
+
canvas: bottomSilkscreenCanvas,
|
|
9463
9505
|
elements,
|
|
9464
|
-
["bottom_silkscreen"],
|
|
9465
|
-
transform
|
|
9466
|
-
);
|
|
9506
|
+
layers: ["bottom_silkscreen"],
|
|
9507
|
+
realToCanvasMat: transform
|
|
9508
|
+
});
|
|
9467
9509
|
}
|
|
9468
9510
|
const topFabCanvas = canvasRefs.current.top_fabrication;
|
|
9469
9511
|
if (topFabCanvas) {
|
|
9470
|
-
drawFabricationNoteElementsForLayer(
|
|
9471
|
-
topFabCanvas,
|
|
9512
|
+
drawFabricationNoteElementsForLayer({
|
|
9513
|
+
canvas: topFabCanvas,
|
|
9472
9514
|
elements,
|
|
9473
|
-
["top_fabrication_note"],
|
|
9474
|
-
transform
|
|
9475
|
-
);
|
|
9515
|
+
layers: ["top_fabrication_note"],
|
|
9516
|
+
realToCanvasMat: transform
|
|
9517
|
+
});
|
|
9476
9518
|
}
|
|
9477
9519
|
const bottomFabCanvas = canvasRefs.current.bottom_fabrication;
|
|
9478
9520
|
if (bottomFabCanvas) {
|
|
9479
|
-
drawFabricationNoteElementsForLayer(
|
|
9480
|
-
bottomFabCanvas,
|
|
9521
|
+
drawFabricationNoteElementsForLayer({
|
|
9522
|
+
canvas: bottomFabCanvas,
|
|
9481
9523
|
elements,
|
|
9482
|
-
["bottom_fabrication_note"],
|
|
9483
|
-
transform
|
|
9484
|
-
);
|
|
9524
|
+
layers: ["bottom_fabrication_note"],
|
|
9525
|
+
realToCanvasMat: transform
|
|
9526
|
+
});
|
|
9485
9527
|
}
|
|
9486
9528
|
const bottomNotesCanvas = canvasRefs.current.bottom_notes;
|
|
9487
9529
|
if (bottomNotesCanvas) {
|
|
9488
|
-
drawPcbNoteElementsForLayer(
|
|
9489
|
-
bottomNotesCanvas,
|
|
9530
|
+
drawPcbNoteElementsForLayer({
|
|
9531
|
+
canvas: bottomNotesCanvas,
|
|
9490
9532
|
elements,
|
|
9491
|
-
["bottom_user_note"],
|
|
9492
|
-
transform
|
|
9493
|
-
);
|
|
9533
|
+
layers: ["bottom_user_note"],
|
|
9534
|
+
realToCanvasMat: transform
|
|
9535
|
+
});
|
|
9494
9536
|
}
|
|
9495
9537
|
const topNotesCanvas = canvasRefs.current.top_notes;
|
|
9496
9538
|
if (topNotesCanvas) {
|
|
9497
|
-
drawPcbNoteElementsForLayer(
|
|
9498
|
-
topNotesCanvas,
|
|
9539
|
+
drawPcbNoteElementsForLayer({
|
|
9540
|
+
canvas: topNotesCanvas,
|
|
9499
9541
|
elements,
|
|
9500
|
-
["top_user_note"],
|
|
9501
|
-
transform
|
|
9502
|
-
);
|
|
9542
|
+
layers: ["top_user_note"],
|
|
9543
|
+
realToCanvasMat: transform
|
|
9544
|
+
});
|
|
9503
9545
|
}
|
|
9504
9546
|
const drillCanvas = canvasRefs.current.drill;
|
|
9505
9547
|
if (drillCanvas) {
|
|
9506
|
-
drawPcbHoleElementsForLayer(
|
|
9548
|
+
drawPcbHoleElementsForLayer({
|
|
9549
|
+
canvas: drillCanvas,
|
|
9550
|
+
elements,
|
|
9551
|
+
layers: ["drill"],
|
|
9552
|
+
realToCanvasMat: transform,
|
|
9553
|
+
drawSoldermask: isShowingSolderMask
|
|
9554
|
+
});
|
|
9507
9555
|
}
|
|
9508
9556
|
const boardCanvas = canvasRefs.current.board;
|
|
9509
9557
|
if (boardCanvas) {
|
|
9510
|
-
drawPcbBoardElements(
|
|
9558
|
+
drawPcbBoardElements({
|
|
9559
|
+
canvas: boardCanvas,
|
|
9560
|
+
elements,
|
|
9561
|
+
layers: [],
|
|
9562
|
+
realToCanvasMat: transform,
|
|
9563
|
+
drawSoldermask: isShowingSolderMask
|
|
9564
|
+
});
|
|
9511
9565
|
}
|
|
9512
9566
|
const edgeCutsCanvas = canvasRefs.current.edge_cuts;
|
|
9513
9567
|
if (edgeCutsCanvas) {
|
|
9514
|
-
drawPcbCutoutElementsForLayer(
|
|
9515
|
-
edgeCutsCanvas,
|
|
9568
|
+
drawPcbCutoutElementsForLayer({
|
|
9569
|
+
canvas: edgeCutsCanvas,
|
|
9516
9570
|
elements,
|
|
9517
|
-
["edge_cuts"],
|
|
9518
|
-
transform
|
|
9519
|
-
);
|
|
9571
|
+
layers: ["edge_cuts"],
|
|
9572
|
+
realToCanvasMat: transform
|
|
9573
|
+
});
|
|
9520
9574
|
}
|
|
9521
9575
|
if (topCanvas) {
|
|
9522
9576
|
drawPcbKeepoutElementsForLayer({
|
|
@@ -13569,7 +13623,7 @@ import { css as css3 } from "@emotion/css";
|
|
|
13569
13623
|
// package.json
|
|
13570
13624
|
var package_default = {
|
|
13571
13625
|
name: "@tscircuit/pcb-viewer",
|
|
13572
|
-
version: "1.11.
|
|
13626
|
+
version: "1.11.316",
|
|
13573
13627
|
main: "dist/index.js",
|
|
13574
13628
|
type: "module",
|
|
13575
13629
|
repository: "tscircuit/pcb-viewer",
|
|
@@ -13623,7 +13677,7 @@ var package_default = {
|
|
|
13623
13677
|
"@tscircuit/math-utils": "^0.0.29",
|
|
13624
13678
|
"@vitejs/plugin-react": "^5.0.2",
|
|
13625
13679
|
"circuit-json": "^0.0.356",
|
|
13626
|
-
"circuit-to-canvas": "^0.0.
|
|
13680
|
+
"circuit-to-canvas": "^0.0.52",
|
|
13627
13681
|
"circuit-to-svg": "^0.0.271",
|
|
13628
13682
|
color: "^4.2.3",
|
|
13629
13683
|
"react-supergrid": "^1.0.10",
|