From d2dcf44ac6da8dc3c21eb3b9bd23cd7936db749f Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 25 Oct 2025 21:05:00 -0400 Subject: [PATCH 01/15] Initial completion of ViaGridBoard to best of ability w current tsc functionality Key points: -4 corner "pacman" are individually hardcoded while polygon rotation is implemented - Vias are all correctly placed but not named - copperpour is defined but does not appear to render? and outline/ clearance props are broken? - bottom text is silkscreen for now since I don't think copper text exists in tsc --- lib/ViaGridBoard/ViaGridBoard.circuit.tsx | 161 ++++++++++++++++++++++ lib/ViaGridBoard/pacmanPolygon.ts | 139 +++++++++++++++++++ lib/ViaGridBoard/viaGridElements.tsx | 30 ++++ 3 files changed, 330 insertions(+) create mode 100644 lib/ViaGridBoard/ViaGridBoard.circuit.tsx create mode 100644 lib/ViaGridBoard/pacmanPolygon.ts create mode 100644 lib/ViaGridBoard/viaGridElements.tsx diff --git a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx new file mode 100644 index 0000000..13810e6 --- /dev/null +++ b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx @@ -0,0 +1,161 @@ +import { splitBoardAndChipProps } from "../../util/splitBoardAndChipProps" +import { ChipProps, BoardProps } from "@tscircuit/props" +import { grid } from "@tscircuit/math-utils" +import { ViaGridVia, ViaGridPlus } from "./viaGridElements" + +import {pacmanPolygonPoints, PCMN1, PCMN2, PCMN3, PCMN4} from "./pacmanPolygon" + + +type ViaGridBoardProps = ChipProps & + BoardProps & { children?: any; boardName?: string } + +//export const ViaGridBoard = (props: ViaGridBoardProps) => { +export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { + const { boardProps, chipProps = {} } = splitBoardAndChipProps({ + ...rest, + }) as { + boardProps: any + chipProps: Record + } + + const resolvedName = `${chipProps.name}_chip` + const { name: _, ...chipRest } = chipProps + + return ( + + + + + + {pacmanGridCells.map((cell) => ( + + + + } /> + ))} + + + + + + + {horizontalEdgeViaGridCells.map((cell) => ( + + ))} + + {verticalEdgeViaGridCells.map((cell) => ( + + ))} + + + + + } /> + + + + + + + + + + ) +} + + +const pacmanGridCells = grid({ +rows: 2, +cols: 2, +// width: 90, +// height: 55, +xSpacing: 90, // if you want to provide the spacing instead of width +ySpacing:55, // if you want to provide the spacing instead of height +offsetX: 90/2 +5, // optional +offsetY: 55/2 +5, // optional +yDirection: "up-is-negative", // optional, default: "cartesian" +// centered: true // optional, default: true +}) + + +const horizontalEdgeViaGridCells = grid({ +rows: 2, +cols: 17, +// width: 80, +// height: 45, +xSpacing: 5, // if you want to provide the spacing instead of width +ySpacing:45, // if you want to provide the spacing instead of height +offsetX: 90/2 +5, // optional +offsetY: 55/2+5, // optional +yDirection: "up-is-negative", // optional, default: "cartesian" +// centered: true // optional, default: true +}) + +const verticalEdgeViaGridCells = grid({ +rows: 8, +cols: 2, +// width: 80, +// height: 45, +xSpacing: 80, // if you want to provide the spacing instead of width +ySpacing: 5, // if you want to provide the spacing instead of height +offsetX: 90/2 +5, // optional +offsetY: 55/2+5, // optional +yDirection: "up-is-negative", // optional, default: "cartesian" +// centered: true // optional, default: true +}) diff --git a/lib/ViaGridBoard/pacmanPolygon.ts b/lib/ViaGridBoard/pacmanPolygon.ts new file mode 100644 index 0000000..7de4619 --- /dev/null +++ b/lib/ViaGridBoard/pacmanPolygon.ts @@ -0,0 +1,139 @@ + + +export const pacmanPolygonPoints = [ + + { x: -0.2, y: -0.2 }, + { x: -0.2, y: 2.5 }, + + + + { x: -2.5, y: 0 }, + + { x: 0, y: -2.5 }, + + { x: 2.5, y: -0.2 }, + + { x: -0.2, y: -0.2 }, + +] + + +export const PCMN1 = [ //BL + + { x: -0.2, y: -0.2 }, + { x: -0.2, y: 2.5 }, + + + + { x: -2.5, y: 0 }, + + { x: 0, y: -2.5 }, + + { x: 2.5, y: -0.2 }, + + { x: -0.2, y: -0.2 }, + +] + +export const PCMN2 = [ //TR + + { x: -0.2, y: 0.2 }, + { x: -0.2, y: -2.5 }, + + + + { x: -2.5, y: 0 }, + + { x: 0, y: 2.5 }, + + { x: 2.5, y: 0.2 }, + + { x: -0.2, y: 0.2 }, + +] + + +export const PCMN3 = [ //BR + + { x: 0.2, y: 0.2 }, + { x: 0.2, y: -2.5 }, + + + + { x: 2.5, y: 0 }, + + { x: 0, y: 2.5 }, + + { x: -2.5, y: 0.2 }, + + { x: 0.2, y: 0.2 }, + +] + +export const PCMN4 = [ //TL + + { x: 0.2, y: -0.2 }, + { x: 0.2, y: 2.5 }, + + + + { x: 2.5, y: 0 }, + + { x: 0, y: -2.5 }, + + { x: -2.5, y: -0.2 }, + + { x: 0.2, y: -0.2 }, + +] + + +/* +export const pacmanPolygonPoints = [ + +{ x: -0.2, y: -0.2 }, // Center/origin point +{ x: -0.2, y: 2.5 }, // Start of arc - top + +{ x: -0.51, y: 2.47 }, +{ x: -0.82, y: 2.38 }, +{ x: -1.12, y: 2.24 }, +{ x: -1.40, y: 2.06 }, +{ x: -1.66, y: 1.84 }, +{ x: -1.90, y: 1.58 }, +{ x: -2.11, y: 1.29 }, +{ x: -2.28, y: 0.97 }, +{ x: -2.42, y: 0.63 }, +{ x: -2.52, y: 0.28 }, + +{ x: -2.5, y: 0 }, // Left side of arc + +{ x: -2.52, y: -0.28 }, +{ x: -2.42, y: -0.63 }, +{ x: -2.28, y: -0.97 }, +{ x: -2.11, y: -1.29 }, +{ x: -1.90, y: -1.58 }, +{ x: -1.66, y: -1.84 }, +{ x: -1.40, y: -2.06 }, +{ x: -1.12, y: -2.24 }, +{ x: -0.82, y: -2.38 }, +{ x: -0.51, y: -2.47 }, + +{ x: 0, y: -2.5 }, // Bottom of arc + +{ x: 0.31, y: -2.47 }, +{ x: 0.62, y: -2.38 }, +{ x: 0.92, y: -2.24 }, +{ x: 1.20, y: -2.06 }, +{ x: 1.46, y: -1.84 }, +{ x: 1.70, y: -1.58 }, +{ x: 1.91, y: -1.29 }, +{ x: 2.08, y: -0.97 }, +{ x: 2.22, y: -0.63 }, +{ x: 2.32, y: -0.28 }, + +{ x: 2.5, y: -0.2 }, // End of arc - right side + +{ x: -0.2, y: -0.2 }, // Back to center/origin - closes the shape + +] +*/ \ No newline at end of file diff --git a/lib/ViaGridBoard/viaGridElements.tsx b/lib/ViaGridBoard/viaGridElements.tsx new file mode 100644 index 0000000..e75677a --- /dev/null +++ b/lib/ViaGridBoard/viaGridElements.tsx @@ -0,0 +1,30 @@ +import { CommonLayoutProps, GroupProps } from "@tscircuit/props"; + + +export const ViaGridVia = (props:CommonLayoutProps) => { + return ( + + ); +} + +export const ViaGridPlus = (props:GroupProps) => { + return ( + + + + + + + + ) +} + +export default ViaGridPlus \ No newline at end of file From 6021468a0746545ef0f4c8d20eb9367fd69ffd8d Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 25 Oct 2025 21:08:56 -0400 Subject: [PATCH 02/15] format! --- lib/ViaGridBoard/ViaGridBoard.circuit.tsx | 269 ++++++++++++---------- lib/ViaGridBoard/pacmanPolygon.ts | 95 ++++---- lib/ViaGridBoard/viaGridElements.tsx | 49 ++-- 3 files changed, 206 insertions(+), 207 deletions(-) diff --git a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx index 13810e6..cddaa76 100644 --- a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx +++ b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx @@ -3,8 +3,13 @@ import { ChipProps, BoardProps } from "@tscircuit/props" import { grid } from "@tscircuit/math-utils" import { ViaGridVia, ViaGridPlus } from "./viaGridElements" -import {pacmanPolygonPoints, PCMN1, PCMN2, PCMN3, PCMN4} from "./pacmanPolygon" - +import { + pacmanPolygonPoints, + PCMN1, + PCMN2, + PCMN3, + PCMN4, +} from "./pacmanPolygon" type ViaGridBoardProps = ChipProps & BoardProps & { children?: any; boardName?: string } @@ -21,141 +26,153 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { const resolvedName = `${chipProps.name}_chip` const { name: _, ...chipRest } = chipProps - return ( - - - - - - {pacmanGridCells.map((cell) => ( - - + + + {pacmanGridCells.map((cell) => ( + + + } /> - - } /> - ))} - - - - - - - {horizontalEdgeViaGridCells.map((cell) => ( - - ))} - - {verticalEdgeViaGridCells.map((cell) => ( - - ))} - - - + + + + + {horizontalEdgeViaGridCells.map((cell) => ( + - - } /> - - + ))} - - - - - - - ) + {verticalEdgeViaGridCells.map((cell) => ( + + ))} + + + + + } + /> + + + + + + ) } - const pacmanGridCells = grid({ -rows: 2, -cols: 2, -// width: 90, -// height: 55, -xSpacing: 90, // if you want to provide the spacing instead of width -ySpacing:55, // if you want to provide the spacing instead of height -offsetX: 90/2 +5, // optional -offsetY: 55/2 +5, // optional -yDirection: "up-is-negative", // optional, default: "cartesian" -// centered: true // optional, default: true + rows: 2, + cols: 2, + // width: 90, + // height: 55, + xSpacing: 90, // if you want to provide the spacing instead of width + ySpacing: 55, // if you want to provide the spacing instead of height + offsetX: 90 / 2 + 5, // optional + offsetY: 55 / 2 + 5, // optional + yDirection: "up-is-negative", // optional, default: "cartesian" + // centered: true // optional, default: true }) - const horizontalEdgeViaGridCells = grid({ -rows: 2, -cols: 17, -// width: 80, -// height: 45, -xSpacing: 5, // if you want to provide the spacing instead of width -ySpacing:45, // if you want to provide the spacing instead of height -offsetX: 90/2 +5, // optional -offsetY: 55/2+5, // optional -yDirection: "up-is-negative", // optional, default: "cartesian" -// centered: true // optional, default: true + rows: 2, + cols: 17, + // width: 80, + // height: 45, + xSpacing: 5, // if you want to provide the spacing instead of width + ySpacing: 45, // if you want to provide the spacing instead of height + offsetX: 90 / 2 + 5, // optional + offsetY: 55 / 2 + 5, // optional + yDirection: "up-is-negative", // optional, default: "cartesian" + // centered: true // optional, default: true }) const verticalEdgeViaGridCells = grid({ -rows: 8, -cols: 2, -// width: 80, -// height: 45, -xSpacing: 80, // if you want to provide the spacing instead of width -ySpacing: 5, // if you want to provide the spacing instead of height -offsetX: 90/2 +5, // optional -offsetY: 55/2+5, // optional -yDirection: "up-is-negative", // optional, default: "cartesian" -// centered: true // optional, default: true + rows: 8, + cols: 2, + // width: 80, + // height: 45, + xSpacing: 80, // if you want to provide the spacing instead of width + ySpacing: 5, // if you want to provide the spacing instead of height + offsetX: 90 / 2 + 5, // optional + offsetY: 55 / 2 + 5, // optional + yDirection: "up-is-negative", // optional, default: "cartesian" + // centered: true // optional, default: true }) diff --git a/lib/ViaGridBoard/pacmanPolygon.ts b/lib/ViaGridBoard/pacmanPolygon.ts index 7de4619..2246085 100644 --- a/lib/ViaGridBoard/pacmanPolygon.ts +++ b/lib/ViaGridBoard/pacmanPolygon.ts @@ -1,93 +1,76 @@ - - export const pacmanPolygonPoints = [ + { x: -0.2, y: -0.2 }, + { x: -0.2, y: 2.5 }, - { x: -0.2, y: -0.2 }, - { x: -0.2, y: 2.5 }, - - - - { x: -2.5, y: 0 }, - - { x: 0, y: -2.5 }, + { x: -2.5, y: 0 }, - { x: 2.5, y: -0.2 }, + { x: 0, y: -2.5 }, - { x: -0.2, y: -0.2 }, + { x: 2.5, y: -0.2 }, + { x: -0.2, y: -0.2 }, ] +export const PCMN1 = [ + //BL -export const PCMN1 = [ //BL + { x: -0.2, y: -0.2 }, + { x: -0.2, y: 2.5 }, - { x: -0.2, y: -0.2 }, - { x: -0.2, y: 2.5 }, - - - - { x: -2.5, y: 0 }, + { x: -2.5, y: 0 }, - { x: 0, y: -2.5 }, + { x: 0, y: -2.5 }, - { x: 2.5, y: -0.2 }, - - { x: -0.2, y: -0.2 }, + { x: 2.5, y: -0.2 }, + { x: -0.2, y: -0.2 }, ] -export const PCMN2 = [ //TR +export const PCMN2 = [ + //TR - { x: -0.2, y: 0.2 }, - { x: -0.2, y: -2.5 }, - + { x: -0.2, y: 0.2 }, + { x: -0.2, y: -2.5 }, + { x: -2.5, y: 0 }, - { x: -2.5, y: 0 }, + { x: 0, y: 2.5 }, - { x: 0, y: 2.5 }, - - { x: 2.5, y: 0.2 }, - - { x: -0.2, y: 0.2 }, + { x: 2.5, y: 0.2 }, + { x: -0.2, y: 0.2 }, ] +export const PCMN3 = [ + //BR -export const PCMN3 = [ //BR - - { x: 0.2, y: 0.2 }, - { x: 0.2, y: -2.5 }, - - - - { x: 2.5, y: 0 }, + { x: 0.2, y: 0.2 }, + { x: 0.2, y: -2.5 }, - { x: 0, y: 2.5 }, + { x: 2.5, y: 0 }, - { x: -2.5, y: 0.2 }, + { x: 0, y: 2.5 }, - { x: 0.2, y: 0.2 }, + { x: -2.5, y: 0.2 }, + { x: 0.2, y: 0.2 }, ] -export const PCMN4 = [ //TL - - { x: 0.2, y: -0.2 }, - { x: 0.2, y: 2.5 }, - +export const PCMN4 = [ + //TL + { x: 0.2, y: -0.2 }, + { x: 0.2, y: 2.5 }, - { x: 2.5, y: 0 }, + { x: 2.5, y: 0 }, - { x: 0, y: -2.5 }, + { x: 0, y: -2.5 }, - { x: -2.5, y: -0.2 }, - - { x: 0.2, y: -0.2 }, + { x: -2.5, y: -0.2 }, + { x: 0.2, y: -0.2 }, ] - /* export const pacmanPolygonPoints = [ @@ -136,4 +119,4 @@ export const pacmanPolygonPoints = [ { x: -0.2, y: -0.2 }, // Back to center/origin - closes the shape ] -*/ \ No newline at end of file +*/ diff --git a/lib/ViaGridBoard/viaGridElements.tsx b/lib/ViaGridBoard/viaGridElements.tsx index e75677a..a41db4b 100644 --- a/lib/ViaGridBoard/viaGridElements.tsx +++ b/lib/ViaGridBoard/viaGridElements.tsx @@ -1,30 +1,29 @@ -import { CommonLayoutProps, GroupProps } from "@tscircuit/props"; +import { CommonLayoutProps, GroupProps } from "@tscircuit/props" - -export const ViaGridVia = (props:CommonLayoutProps) => { - return ( - - ); +export const ViaGridVia = (props: CommonLayoutProps) => { + return ( + + ) } -export const ViaGridPlus = (props:GroupProps) => { - return ( - - - - - - - - ) +export const ViaGridPlus = (props: GroupProps) => { + return ( + + + + + + + + ) } -export default ViaGridPlus \ No newline at end of file +export default ViaGridPlus From 115ea9e7936f3c0e48a7606f78cd09b0ff6c4f66 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 26 Oct 2025 00:06:45 -0400 Subject: [PATCH 03/15] rm phantom code --- lib/ViaGridBoard/pacmanPolygon.ts | 49 ------------------------------- 1 file changed, 49 deletions(-) diff --git a/lib/ViaGridBoard/pacmanPolygon.ts b/lib/ViaGridBoard/pacmanPolygon.ts index 2246085..b6846cd 100644 --- a/lib/ViaGridBoard/pacmanPolygon.ts +++ b/lib/ViaGridBoard/pacmanPolygon.ts @@ -71,52 +71,3 @@ export const PCMN4 = [ { x: 0.2, y: -0.2 }, ] -/* -export const pacmanPolygonPoints = [ - -{ x: -0.2, y: -0.2 }, // Center/origin point -{ x: -0.2, y: 2.5 }, // Start of arc - top - -{ x: -0.51, y: 2.47 }, -{ x: -0.82, y: 2.38 }, -{ x: -1.12, y: 2.24 }, -{ x: -1.40, y: 2.06 }, -{ x: -1.66, y: 1.84 }, -{ x: -1.90, y: 1.58 }, -{ x: -2.11, y: 1.29 }, -{ x: -2.28, y: 0.97 }, -{ x: -2.42, y: 0.63 }, -{ x: -2.52, y: 0.28 }, - -{ x: -2.5, y: 0 }, // Left side of arc - -{ x: -2.52, y: -0.28 }, -{ x: -2.42, y: -0.63 }, -{ x: -2.28, y: -0.97 }, -{ x: -2.11, y: -1.29 }, -{ x: -1.90, y: -1.58 }, -{ x: -1.66, y: -1.84 }, -{ x: -1.40, y: -2.06 }, -{ x: -1.12, y: -2.24 }, -{ x: -0.82, y: -2.38 }, -{ x: -0.51, y: -2.47 }, - -{ x: 0, y: -2.5 }, // Bottom of arc - -{ x: 0.31, y: -2.47 }, -{ x: 0.62, y: -2.38 }, -{ x: 0.92, y: -2.24 }, -{ x: 1.20, y: -2.06 }, -{ x: 1.46, y: -1.84 }, -{ x: 1.70, y: -1.58 }, -{ x: 1.91, y: -1.29 }, -{ x: 2.08, y: -0.97 }, -{ x: 2.22, y: -0.63 }, -{ x: 2.32, y: -0.28 }, - -{ x: 2.5, y: -0.2 }, // End of arc - right side - -{ x: -0.2, y: -0.2 }, // Back to center/origin - closes the shape - -] -*/ From 2f3187cdc6ad1982ceb78b18e92e052b75ab76a6 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 26 Oct 2025 10:36:18 -0400 Subject: [PATCH 04/15] severe cleanup of corner pacmans with OutlineBuilder and arcTo, pcbRotation of chips now working, non-grid simple array for positioning --- lib/ViaGridBoard/ViaGridBoard.circuit.tsx | 55 ++++++++++++----- lib/ViaGridBoard/pacmanPolygon.ts | 73 ----------------------- lib/ViaGridBoard/viaGridElements.tsx | 12 ++++ 3 files changed, 52 insertions(+), 88 deletions(-) delete mode 100644 lib/ViaGridBoard/pacmanPolygon.ts diff --git a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx index cddaa76..2265a24 100644 --- a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx +++ b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx @@ -1,15 +1,7 @@ import { splitBoardAndChipProps } from "../../util/splitBoardAndChipProps" import { ChipProps, BoardProps } from "@tscircuit/props" import { grid } from "@tscircuit/math-utils" -import { ViaGridVia, ViaGridPlus } from "./viaGridElements" - -import { - pacmanPolygonPoints, - PCMN1, - PCMN2, - PCMN3, - PCMN4, -} from "./pacmanPolygon" +import { ViaGridVia, ViaGridPlus, pacmanPolygonOutline } from "./viaGridElements" type ViaGridBoardProps = ChipProps & BoardProps & { children?: any; boardName?: string } @@ -43,7 +35,44 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { color="blue" /> - {pacmanGridCells.map((cell) => ( + + {["BL", "TL", "TR", "BR"].map( (cornerPositionName, index ) => { + console.log (cornerPositionName, index); + const x = (cornerPositionName.includes("R") ? 90 : 0) + 5; + const y = (cornerPositionName.includes("T") ? 55 : 0) + 5; + const rotation = index*90; + return ( + + + + + + } + /> + + ) + + + +// const cornerPosition = getCornerPosition(cornerPositionName) +// return +// ) + })} + + {/* {pacmanGridCells.map((cell) => ( { pcbY="0mm" layer="top" shape="polygon" - //radius="2.5mm" - - //width="5mm" - //height="5mm" portHints={["pin1"]} points={ cell.index === 0 @@ -76,7 +101,7 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { } /> - ))} + ))} */} diff --git a/lib/ViaGridBoard/pacmanPolygon.ts b/lib/ViaGridBoard/pacmanPolygon.ts deleted file mode 100644 index b6846cd..0000000 --- a/lib/ViaGridBoard/pacmanPolygon.ts +++ /dev/null @@ -1,73 +0,0 @@ -export const pacmanPolygonPoints = [ - { x: -0.2, y: -0.2 }, - { x: -0.2, y: 2.5 }, - - { x: -2.5, y: 0 }, - - { x: 0, y: -2.5 }, - - { x: 2.5, y: -0.2 }, - - { x: -0.2, y: -0.2 }, -] - -export const PCMN1 = [ - //BL - - { x: -0.2, y: -0.2 }, - { x: -0.2, y: 2.5 }, - - { x: -2.5, y: 0 }, - - { x: 0, y: -2.5 }, - - { x: 2.5, y: -0.2 }, - - { x: -0.2, y: -0.2 }, -] - -export const PCMN2 = [ - //TR - - { x: -0.2, y: 0.2 }, - { x: -0.2, y: -2.5 }, - - { x: -2.5, y: 0 }, - - { x: 0, y: 2.5 }, - - { x: 2.5, y: 0.2 }, - - { x: -0.2, y: 0.2 }, -] - -export const PCMN3 = [ - //BR - - { x: 0.2, y: 0.2 }, - { x: 0.2, y: -2.5 }, - - { x: 2.5, y: 0 }, - - { x: 0, y: 2.5 }, - - { x: -2.5, y: 0.2 }, - - { x: 0.2, y: 0.2 }, -] - -export const PCMN4 = [ - //TL - - { x: 0.2, y: -0.2 }, - { x: 0.2, y: 2.5 }, - - { x: 2.5, y: 0 }, - - { x: 0, y: -2.5 }, - - { x: -2.5, y: -0.2 }, - - { x: 0.2, y: -0.2 }, -] - diff --git a/lib/ViaGridBoard/viaGridElements.tsx b/lib/ViaGridBoard/viaGridElements.tsx index a41db4b..72df4e6 100644 --- a/lib/ViaGridBoard/viaGridElements.tsx +++ b/lib/ViaGridBoard/viaGridElements.tsx @@ -1,4 +1,5 @@ import { CommonLayoutProps, GroupProps } from "@tscircuit/props" +import { OutlineBuilder } from "../../util/outlineBuilder" export const ViaGridVia = (props: CommonLayoutProps) => { return ( @@ -27,3 +28,14 @@ export const ViaGridPlus = (props: GroupProps) => { } export default ViaGridPlus + + + +export const pacmanPolygonOutline = new OutlineBuilder(-0.2, -0.2) + .lineTo(-0.2, 2.5) + .arcTo (-2.5, 0, { radius: 2.5, sweep: true }) + .arcTo (0, -2.5, { radius: 2.5, sweep: true }) + .arcTo (2.5, -0.2, { radius: 2.5, sweep: true }) + .lineTo(-0.2, -0.2) + .toArray() + From 433bcde687927caa5121102dec15634b2769d4fe Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 26 Oct 2025 10:37:38 -0400 Subject: [PATCH 05/15] format --- lib/ViaGridBoard/ViaGridBoard.circuit.tsx | 64 +++++++++++------------ lib/ViaGridBoard/viaGridElements.tsx | 13 ++--- 2 files changed, 36 insertions(+), 41 deletions(-) diff --git a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx index 2265a24..86e6ea7 100644 --- a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx +++ b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx @@ -1,7 +1,11 @@ import { splitBoardAndChipProps } from "../../util/splitBoardAndChipProps" import { ChipProps, BoardProps } from "@tscircuit/props" import { grid } from "@tscircuit/math-utils" -import { ViaGridVia, ViaGridPlus, pacmanPolygonOutline } from "./viaGridElements" +import { + ViaGridVia, + ViaGridPlus, + pacmanPolygonOutline, +} from "./viaGridElements" type ViaGridBoardProps = ChipProps & BoardProps & { children?: any; boardName?: string } @@ -35,41 +39,35 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { color="blue" /> - - {["BL", "TL", "TR", "BR"].map( (cornerPositionName, index ) => { - console.log (cornerPositionName, index); - const x = (cornerPositionName.includes("R") ? 90 : 0) + 5; - const y = (cornerPositionName.includes("T") ? 55 : 0) + 5; - const rotation = index*90; + {["BL", "TL", "TR", "BR"].map((cornerPositionName, index) => { + console.log(cornerPositionName, index) + const x = (cornerPositionName.includes("R") ? 90 : 0) + 5 + const y = (cornerPositionName.includes("T") ? 55 : 0) + 5 + const rotation = index * 90 return ( - - - - - - } - /> - + + + + } + /> ) - - -// const cornerPosition = getCornerPosition(cornerPositionName) -// return -// ) + // const cornerPosition = getCornerPosition(cornerPositionName) + // return + // ) })} {/* {pacmanGridCells.map((cell) => ( diff --git a/lib/ViaGridBoard/viaGridElements.tsx b/lib/ViaGridBoard/viaGridElements.tsx index 72df4e6..7daefe0 100644 --- a/lib/ViaGridBoard/viaGridElements.tsx +++ b/lib/ViaGridBoard/viaGridElements.tsx @@ -29,13 +29,10 @@ export const ViaGridPlus = (props: GroupProps) => { export default ViaGridPlus - - export const pacmanPolygonOutline = new OutlineBuilder(-0.2, -0.2) - .lineTo(-0.2, 2.5) - .arcTo (-2.5, 0, { radius: 2.5, sweep: true }) - .arcTo (0, -2.5, { radius: 2.5, sweep: true }) - .arcTo (2.5, -0.2, { radius: 2.5, sweep: true }) - .lineTo(-0.2, -0.2) + .lineTo(-0.2, 2.5) + .arcTo(-2.5, 0, { radius: 2.5, sweep: true }) + .arcTo(0, -2.5, { radius: 2.5, sweep: true }) + .arcTo(2.5, -0.2, { radius: 2.5, sweep: true }) + .lineTo(-0.2, -0.2) .toArray() - From 2b14e32a2341543cfd98c60ddbc48ccaedf8858b Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 26 Oct 2025 10:42:39 -0400 Subject: [PATCH 06/15] more cleanup --- lib/ViaGridBoard/ViaGridBoard.circuit.tsx | 49 ----------------------- 1 file changed, 49 deletions(-) diff --git a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx index 86e6ea7..d42203d 100644 --- a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx +++ b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx @@ -10,7 +10,6 @@ import { type ViaGridBoardProps = ChipProps & BoardProps & { children?: any; boardName?: string } -//export const ViaGridBoard = (props: ViaGridBoardProps) => { export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { const { boardProps, chipProps = {} } = splitBoardAndChipProps({ ...rest, @@ -64,43 +63,8 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { } /> ) - - // const cornerPosition = getCornerPosition(cornerPositionName) - // return - // ) })} - {/* {pacmanGridCells.map((cell) => ( - - - - } - /> - ))} */} - @@ -161,19 +125,6 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { ) } -const pacmanGridCells = grid({ - rows: 2, - cols: 2, - // width: 90, - // height: 55, - xSpacing: 90, // if you want to provide the spacing instead of width - ySpacing: 55, // if you want to provide the spacing instead of height - offsetX: 90 / 2 + 5, // optional - offsetY: 55 / 2 + 5, // optional - yDirection: "up-is-negative", // optional, default: "cartesian" - // centered: true // optional, default: true -}) - const horizontalEdgeViaGridCells = grid({ rows: 2, cols: 17, From 6a3ce1862cfcd4076a34dfda26623a76e6f62a84 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 26 Oct 2025 10:46:09 -0400 Subject: [PATCH 07/15] fix .map -> keys --- lib/ViaGridBoard/ViaGridBoard.circuit.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx index d42203d..5130973 100644 --- a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx +++ b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx @@ -45,6 +45,7 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { const rotation = index * 90 return ( Date: Sun, 26 Oct 2025 11:09:32 -0400 Subject: [PATCH 08/15] all vias now have unique names! --- lib/ViaGridBoard/ViaGridBoard.circuit.tsx | 13 +++++++++---- lib/ViaGridBoard/viaGridElements.tsx | 21 ++++++++++++--------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx index 5130973..366bf14 100644 --- a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx +++ b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx @@ -21,6 +21,9 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { const resolvedName = `${chipProps.name}_chip` const { name: _, ...chipRest } = chipProps + // Counter to generate unique via names + let viaCounter = 0 + return ( { ) })} - - - - + + + + {horizontalEdgeViaGridCells.map((cell) => ( ))} @@ -84,6 +88,7 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { pcbX={cell.center.x} pcbY={cell.center.y} key={cell.index} + viaIndex={cell.index + 54} /> ))} diff --git a/lib/ViaGridBoard/viaGridElements.tsx b/lib/ViaGridBoard/viaGridElements.tsx index 7daefe0..f4b0a6a 100644 --- a/lib/ViaGridBoard/viaGridElements.tsx +++ b/lib/ViaGridBoard/viaGridElements.tsx @@ -1,28 +1,31 @@ import { CommonLayoutProps, GroupProps } from "@tscircuit/props" import { OutlineBuilder } from "../../util/outlineBuilder" -export const ViaGridVia = (props: CommonLayoutProps) => { +export const ViaGridVia = (props: CommonLayoutProps & { viaIndex: number }) => { + const { viaIndex, ...restProps } = props return ( ) } -export const ViaGridPlus = (props: GroupProps) => { +export const ViaGridPlus = (props: GroupProps & { startIndex: number }) => { + const { startIndex, ...restProps } = props return ( - - - - - - + + + + + + ) } From 79c980fdeee91058334e0b9e1d23ec0e77cb4851 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 26 Oct 2025 11:19:07 -0400 Subject: [PATCH 09/15] Added GND net to fix errors! snapshots work now! --- lib/ViaGridBoard/ViaGridBoard.circuit.tsx | 4 +-- .../ViaGridBoard.circuit-3d.snap.png | Bin 0 -> 6101 bytes .../ViaGridBoard.circuit-pcb.snap.svg | 1 + .../ViaGridBoard.circuit-schematic.snap.svg | 25 ++++++++++++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-3d.snap.png create mode 100644 lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-pcb.snap.svg create mode 100644 lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-schematic.snap.svg diff --git a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx index 366bf14..9cb5f39 100644 --- a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx +++ b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx @@ -42,7 +42,7 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { /> {["BL", "TL", "TR", "BR"].map((cornerPositionName, index) => { - console.log(cornerPositionName, index) + //console.log(cornerPositionName, index) const x = (cornerPositionName.includes("R") ? 90 : 0) + 5 const y = (cornerPositionName.includes("T") ? 55 : 0) + 5 const rotation = index * 90 @@ -116,7 +116,7 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { pcbX={50} pcbY={2.5} /> - + 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 us=qQ>O;-Gd^z)ye8Tgrje;Wg~t|9#iRVIAGRID TOP \ No newline at end of file diff --git a/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-schematic.snap.svg b/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-schematic.snap.svg new file mode 100644 index 0000000..1bd3a23 --- /dev/null +++ b/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-schematic.snap.svg @@ -0,0 +1,25 @@ +BL1TL1TR1BR1TOP_RECT1 \ No newline at end of file From e51797c2d1689721feb30ded3d8a7751775e8bcf Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 26 Oct 2025 11:26:29 -0400 Subject: [PATCH 10/15] cleanup --- lib/ViaGridBoard/ViaGridBoard.circuit.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx index 9cb5f39..62e49c1 100644 --- a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx +++ b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx @@ -21,9 +21,6 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { const resolvedName = `${chipProps.name}_chip` const { name: _, ...chipRest } = chipProps - // Counter to generate unique via names - let viaCounter = 0 - return ( { /> {["BL", "TL", "TR", "BR"].map((cornerPositionName, index) => { - //console.log(cornerPositionName, index) const x = (cornerPositionName.includes("R") ? 90 : 0) + 5 const y = (cornerPositionName.includes("T") ? 55 : 0) + 5 const rotation = index * 90 From 653773ea0f16197ac1b710eb36da65ae129ad459 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 26 Oct 2025 11:57:52 -0400 Subject: [PATCH 11/15] hide the pacmans and top rect in the schematic --- lib/ViaGridBoard/ViaGridBoard.circuit.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx index 62e49c1..5ab4b0f 100644 --- a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx +++ b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx @@ -48,6 +48,7 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { name={cornerPositionName} pcbX={x} pcbY={y} + noSchematicRepresentation={true} pcbRotation={-rotation} //{(cell.index-1)*90} footprint={ @@ -90,6 +91,7 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { Date: Sun, 26 Oct 2025 11:59:15 -0400 Subject: [PATCH 12/15] Update ViaGridBoard.circuit-schematic.snap.svg --- .../__snapshots__/ViaGridBoard.circuit-schematic.snap.svg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-schematic.snap.svg b/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-schematic.snap.svg index 1bd3a23..ecdef94 100644 --- a/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-schematic.snap.svg +++ b/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-schematic.snap.svg @@ -1,4 +1,4 @@ - \ No newline at end of file From 92b439b920e1f6c8635715a19311de13daa25cbd Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 26 Oct 2025 12:18:32 -0400 Subject: [PATCH 13/15] Update index.tsx --- index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/index.tsx b/index.tsx index 314ee0d..b0b1255 100644 --- a/index.tsx +++ b/index.tsx @@ -4,3 +4,4 @@ export * from "./lib/RaspberryPiHatBoard/RaspberryPiHatBoard.circuit" export * from "./lib/XiaoBoard/XiaoBoard.circuit" export * from "./lib/ProMicroBoard/ProMicroBoard.circuit" // export * from "./Common Boards/RaspberryPiHatBoard/RaspberryPiHatBoard.circuit" +export * from "./lib/ViaGridBoard/ViaGridBoard.circuit" \ No newline at end of file From 4f3bac49c96a80c7b5ebd3554e586309122a8ea9 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 26 Oct 2025 12:19:01 -0400 Subject: [PATCH 14/15] Update index.tsx --- index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.tsx b/index.tsx index b0b1255..fc1a016 100644 --- a/index.tsx +++ b/index.tsx @@ -4,4 +4,4 @@ export * from "./lib/RaspberryPiHatBoard/RaspberryPiHatBoard.circuit" export * from "./lib/XiaoBoard/XiaoBoard.circuit" export * from "./lib/ProMicroBoard/ProMicroBoard.circuit" // export * from "./Common Boards/RaspberryPiHatBoard/RaspberryPiHatBoard.circuit" -export * from "./lib/ViaGridBoard/ViaGridBoard.circuit" \ No newline at end of file +export * from "./lib/ViaGridBoard/ViaGridBoard.circuit" From 727ed53c964958996cb93cac7609437358ee14a7 Mon Sep 17 00:00:00 2001 From: Ray Date: Tue, 28 Oct 2025 20:17:11 -0400 Subject: [PATCH 15/15] comment out copperpour per seve --- lib/ViaGridBoard/ViaGridBoard.circuit.tsx | 4 ++-- .../ViaGridBoard.circuit-3d.snap.png | Bin 6101 -> 5318 bytes .../ViaGridBoard.circuit-pcb.snap.svg | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx index 5ab4b0f..309e28a 100644 --- a/lib/ViaGridBoard/ViaGridBoard.circuit.tsx +++ b/lib/ViaGridBoard/ViaGridBoard.circuit.tsx @@ -115,7 +115,7 @@ export const ViaGridBoard = ({ children, ...rest }: ViaGridBoardProps) => { pcbY={2.5} /> - { // { x: 95, y: 60 }, // { x: 95, y: 5 } // ] - /> + /> */} ) } diff --git a/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-3d.snap.png b/lib/ViaGridBoard/__snapshots__/ViaGridBoard.circuit-3d.snap.png index 2e758d25e37cbe92e224f444677a78279a7e8d45..fa8f5b9ae40d6332ba63c1e79ba64cc0541e6822 100644 GIT binary patch literal 5318 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 VyNNA`%*Uh~*2b=BTD|?ye*r%up(p?V literal 6101 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 us=qQ>O;-Gd^z)ye8Tgrje;Wg~t|9#iRVIAGRID TOP \ No newline at end of file +VIAGRID TOP \ No newline at end of file