Skip to content

Commit f1032d7

Browse files
Add View Toggle For Fabrication Notes (Default Hidden)
1 parent 30f7441 commit f1032d7

4 files changed

Lines changed: 64 additions & 26 deletions

File tree

src/components/CanvasPrimitiveRenderer.tsx

Lines changed: 38 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -71,25 +71,25 @@ export const CanvasPrimitiveRenderer = ({
7171
const canvasRefs = useRef<Record<string, HTMLCanvasElement>>({})
7272
const selectedLayer = useGlobalStore((s) => s.selected_layer)
7373
const isShowingSolderMask = useGlobalStore((s) => s.is_showing_solder_mask)
74+
const isShowingFabricationNotes = useGlobalStore(
75+
(s) => s.is_showing_fabrication_notes,
76+
)
7477

7578
useEffect(() => {
7679
if (!canvasRefs.current) return
7780
if (Object.keys(canvasRefs.current).length === 0) return
7881

79-
// Filter out null canvas refs and solder mask layers when disabled
80-
const filteredCanvasRefs = Object.fromEntries(
82+
// Keep all non-null canvas refs so hidden layers are still cleared.
83+
const availableCanvasRefs = Object.fromEntries(
8184
Object.entries(canvasRefs.current).filter(([layer, canvas]) => {
8285
if (!canvas) return false
83-
if (!isShowingSolderMask && layer.includes("soldermask")) {
84-
return false
85-
}
8686
return true
8787
}),
8888
)
8989

90-
if (Object.keys(filteredCanvasRefs).length === 0) return
90+
if (Object.keys(availableCanvasRefs).length === 0) return
9191

92-
const drawer = new Drawer(filteredCanvasRefs)
92+
const drawer = new Drawer(availableCanvasRefs)
9393
if (transform) drawer.transform = transform
9494
drawer.clear()
9595
drawer.foregroundLayer = selectedLayer
@@ -98,6 +98,9 @@ export const CanvasPrimitiveRenderer = ({
9898
// Also filter out SMT pad primitives since they're drawn with circuit-to-canvas
9999
const filteredPrimitives = primitives
100100
.filter((p) => isShowingSolderMask || !p.layer?.includes("soldermask"))
101+
.filter(
102+
(p) => isShowingFabricationNotes || !p.layer?.includes("fabrication"),
103+
)
101104
.filter((p) => p.layer !== "board")
102105
.filter((p) => p._element?.type !== "pcb_smtpad")
103106
.filter((p) => p._element?.type !== "pcb_plated_hole")
@@ -304,25 +307,27 @@ export const CanvasPrimitiveRenderer = ({
304307
}
305308

306309
// Draw top fabrication
307-
const topFabCanvas = canvasRefs.current.top_fabrication
308-
if (topFabCanvas) {
309-
drawFabricationNoteElementsForLayer({
310-
canvas: topFabCanvas,
311-
elements,
312-
layers: ["top_fabrication_note"],
313-
realToCanvasMat: transform,
314-
})
315-
}
310+
if (isShowingFabricationNotes) {
311+
const topFabCanvas = canvasRefs.current.top_fabrication
312+
if (topFabCanvas) {
313+
drawFabricationNoteElementsForLayer({
314+
canvas: topFabCanvas,
315+
elements,
316+
layers: ["top_fabrication_note"],
317+
realToCanvasMat: transform,
318+
})
319+
}
316320

317-
// Draw bottom fabrication
318-
const bottomFabCanvas = canvasRefs.current.bottom_fabrication
319-
if (bottomFabCanvas) {
320-
drawFabricationNoteElementsForLayer({
321-
canvas: bottomFabCanvas,
322-
elements,
323-
layers: ["bottom_fabrication_note"],
324-
realToCanvasMat: transform,
325-
})
321+
// Draw bottom fabrication
322+
const bottomFabCanvas = canvasRefs.current.bottom_fabrication
323+
if (bottomFabCanvas) {
324+
drawFabricationNoteElementsForLayer({
325+
canvas: bottomFabCanvas,
326+
elements,
327+
layers: ["bottom_fabrication_note"],
328+
realToCanvasMat: transform,
329+
})
330+
}
326331
}
327332

328333
// Draw bottom notes
@@ -417,7 +422,14 @@ export const CanvasPrimitiveRenderer = ({
417422
}
418423

419424
drawer.orderAndFadeLayers()
420-
}, [primitives, elements, transform, selectedLayer, isShowingSolderMask])
425+
}, [
426+
primitives,
427+
elements,
428+
transform,
429+
selectedLayer,
430+
isShowingSolderMask,
431+
isShowingFabricationNotes,
432+
])
421433

422434
return (
423435
<div

src/components/ToolbarOverlay.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ export const ToolbarOverlay = ({ children, elements }: Props) => {
244244
setIsShowingPcbGroups,
245245
setIsShowingGroupAnchorOffsets,
246246
setIsShowingSolderMask,
247+
setIsShowingFabricationNotes,
247248
setPcbGroupViewMode,
248249
setHoveredErrorId,
249250
} = useGlobalStore((s) => ({
@@ -264,6 +265,7 @@ export const ToolbarOverlay = ({ children, elements }: Props) => {
264265
is_showing_pcb_groups: s.is_showing_pcb_groups,
265266
is_showing_group_anchor_offsets: s.is_showing_group_anchor_offsets,
266267
is_showing_solder_mask: s.is_showing_solder_mask,
268+
is_showing_fabrication_notes: s.is_showing_fabrication_notes,
267269
pcb_group_view_mode: s.pcb_group_view_mode,
268270
},
269271
setEditMode: s.setEditMode,
@@ -275,6 +277,7 @@ export const ToolbarOverlay = ({ children, elements }: Props) => {
275277
setIsShowingPcbGroups: s.setIsShowingPcbGroups,
276278
setIsShowingGroupAnchorOffsets: s.setIsShowingGroupAnchorOffsets,
277279
setIsShowingSolderMask: s.setIsShowingSolderMask,
280+
setIsShowingFabricationNotes: s.setIsShowingFabricationNotes,
278281
setPcbGroupViewMode: s.setPcbGroupViewMode,
279282
setHoveredErrorId: s.setHoveredErrorId,
280283
}))
@@ -823,6 +826,15 @@ export const ToolbarOverlay = ({ children, elements }: Props) => {
823826
setIsShowingSolderMask(!viewSettings.is_showing_solder_mask)
824827
}}
825828
/>
829+
<CheckboxMenuItem
830+
label="Show Fabrication Notes"
831+
checked={viewSettings.is_showing_fabrication_notes}
832+
onClick={() => {
833+
setIsShowingFabricationNotes(
834+
!viewSettings.is_showing_fabrication_notes,
835+
)
836+
}}
837+
/>
826838
<CheckboxMenuItem
827839
label="Show Group Anchor Offsets"
828840
checked={viewSettings.is_showing_group_anchor_offsets}

src/global-store.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export interface State {
3434
is_showing_pcb_groups: boolean
3535
is_showing_group_anchor_offsets: boolean
3636
is_showing_solder_mask: boolean
37+
is_showing_fabrication_notes: boolean
3738
pcb_group_view_mode: "all" | "named_only"
3839

3940
hovered_error_id: string | null
@@ -51,6 +52,7 @@ export interface State {
5152
setIsShowingPcbGroups: (is_showing: boolean) => void
5253
setIsShowingGroupAnchorOffsets: (is_showing: boolean) => void
5354
setIsShowingSolderMask: (is_showing: boolean) => void
55+
setIsShowingFabricationNotes: (is_showing: boolean) => void
5456
setPcbGroupViewMode: (mode: "all" | "named_only") => void
5557
setHoveredErrorId: (errorId: string | null) => void
5658
}
@@ -100,6 +102,10 @@ export const createStore = (
100102
STORAGE_KEYS.IS_SHOWING_SOLDER_MASK,
101103
false,
102104
),
105+
is_showing_fabrication_notes: getStoredBoolean(
106+
STORAGE_KEYS.IS_SHOWING_FABRICATION_NOTES,
107+
false,
108+
),
103109
pcb_group_view_mode: disablePcbGroups
104110
? "all"
105111
: (getStoredString(
@@ -153,6 +159,13 @@ export const createStore = (
153159
setStoredBoolean(STORAGE_KEYS.IS_SHOWING_SOLDER_MASK, is_showing)
154160
set({ is_showing_solder_mask: is_showing })
155161
},
162+
setIsShowingFabricationNotes: (is_showing) => {
163+
setStoredBoolean(
164+
STORAGE_KEYS.IS_SHOWING_FABRICATION_NOTES,
165+
is_showing,
166+
)
167+
set({ is_showing_fabrication_notes: is_showing })
168+
},
156169
setPcbGroupViewMode: (mode) => {
157170
if (disablePcbGroups) return
158171
setStoredString(STORAGE_KEYS.PCB_GROUP_VIEW_MODE, mode)

src/hooks/useLocalStorage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export const STORAGE_KEYS = {
66
IS_SHOWING_COPPER_POURS: "pcb_viewer_is_showing_copper_pours",
77
IS_SHOWING_GROUP_ANCHOR_OFFSETS: "pcb_viewer_is_showing_group_anchor_offsets",
88
IS_SHOWING_SOLDER_MASK: "pcb_viewer_is_showing_solder_mask",
9+
IS_SHOWING_FABRICATION_NOTES: "pcb_viewer_is_showing_fabrication_notes",
910
} as const
1011

1112
export const getStoredBoolean = (

0 commit comments

Comments
 (0)