diff --git a/lib/solvers.ts b/lib/solvers.ts index 71f659412..4957952fd 100644 --- a/lib/solvers.ts +++ b/lib/solvers.ts @@ -5,6 +5,7 @@ import { AutoroutingPipeline1_OriginalUnravel, AssignableAutoroutingPipeline3, AutoroutingPipelineSolver3_HgPortPointPathing, + AutoroutingPipelineSolver4, } from "@tscircuit/capacity-autorouter" import { CopperPourPipelineSolver } from "@tscircuit/copper-pour-solver" @@ -15,6 +16,7 @@ export const SOLVERS = { AssignableAutoroutingPipeline3, AutoroutingPipeline1_OriginalUnravel, AutoroutingPipelineSolver3_HgPortPointPathing, + AutoroutingPipelineSolver4, CopperPourPipelineSolver, } diff --git a/lib/utils/autorouting/CapacityMeshAutorouter.ts b/lib/utils/autorouting/CapacityMeshAutorouter.ts index a03c9317f..06ab7f678 100644 --- a/lib/utils/autorouting/CapacityMeshAutorouter.ts +++ b/lib/utils/autorouting/CapacityMeshAutorouter.ts @@ -4,6 +4,7 @@ import { AssignableAutoroutingPipeline3, AutoroutingPipeline1_OriginalUnravel, AutoroutingPipelineSolver3_HgPortPointPathing, + AutoroutingPipelineSolver4, } from "@tscircuit/capacity-autorouter" import { AutorouterError } from "lib/errors/AutorouterError" import type { SimpleRouteJson, SimplifiedPcbTrace } from "./SimpleRouteJson" @@ -22,7 +23,7 @@ export interface AutorouterOptions { stepDelay?: number useAssignableSolver?: boolean useAutoJumperSolver?: boolean - autorouterVersion?: "v1" | "v2" | "v3" | "latest" + autorouterVersion?: "v1" | "v2" | "v3" | "v4" | "latest" effort?: number onSolverStarted?: (details: { solverName: string @@ -39,6 +40,7 @@ export class TscircuitAutorouter implements GenericLocalAutorouter { | AssignableAutoroutingPipeline3 | AutoroutingPipeline1_OriginalUnravel | AutoroutingPipelineSolver3_HgPortPointPathing + | AutoroutingPipelineSolver4 private eventHandlers: { complete: Array<(ev: AutorouterCompleteEvent) => void> error: Array<(ev: AutorouterErrorEvent) => void> @@ -71,6 +73,8 @@ export class TscircuitAutorouter implements GenericLocalAutorouter { solverName = "AutoroutingPipeline1_OriginalUnravel" } else if (autorouterVersion === "v3") { solverName = "AutoroutingPipelineSolver3_HgPortPointPathing" + } else if (autorouterVersion === "v4") { + solverName = "AutoroutingPipelineSolver4" } else if (useAutoJumperSolver) { solverName = "AssignableAutoroutingPipeline3" } else if (useAssignableSolver) { diff --git a/package.json b/package.json index 0f0d17165..2e5334b9d 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@resvg/resvg-js": "^2.6.2", "@tscircuit/alphabet": "0.0.18", "@tscircuit/checks": "0.0.110", - "@tscircuit/capacity-autorouter": "^0.0.334", + "@tscircuit/capacity-autorouter": "^0.0.353", "@tscircuit/circuit-json-util": "^0.0.90", "@tscircuit/common": "^0.0.20", "@tscircuit/copper-pour-solver": "^0.0.20", @@ -46,7 +46,7 @@ "@tscircuit/math-utils": "^0.0.36", "@tscircuit/miniflex": "^0.0.4", "@tscircuit/ngspice-spice-engine": "^0.0.8", - "@tscircuit/props": "^0.0.497", + "@tscircuit/props": "^0.0.498", "@tscircuit/schematic-match-adapt": "^0.0.16", "@tscircuit/schematic-trace-solver": "^v0.0.45", "@tscircuit/solver-utils": "^0.0.3", diff --git a/tests/components/primitive-components/__snapshots__/via-connect-trace-pcb.snap.svg b/tests/components/primitive-components/__snapshots__/via-connect-trace-pcb.snap.svg index 3ec0ccc0d..877511ca6 100644 --- a/tests/components/primitive-components/__snapshots__/via-connect-trace-pcb.snap.svg +++ b/tests/components/primitive-components/__snapshots__/via-connect-trace-pcb.snap.svg @@ -1 +1 @@ -C1TP1TP2 \ No newline at end of file +C1TP1TP2 \ No newline at end of file diff --git a/tests/components/primitive-components/__snapshots__/via-connect-trace-simple-3d.snap.png b/tests/components/primitive-components/__snapshots__/via-connect-trace-simple-3d.snap.png index 1885ebd03..aa0a96d8a 100644 Binary files a/tests/components/primitive-components/__snapshots__/via-connect-trace-simple-3d.snap.png and b/tests/components/primitive-components/__snapshots__/via-connect-trace-simple-3d.snap.png differ diff --git a/tests/examples/__snapshots__/example3-3x3-keyboard-pcb.snap.svg b/tests/examples/__snapshots__/example3-3x3-keyboard-pcb.snap.svg index 8a93309e0..7c3678cad 100644 --- a/tests/examples/__snapshots__/example3-3x3-keyboard-pcb.snap.svg +++ b/tests/examples/__snapshots__/example3-3x3-keyboard-pcb.snap.svg @@ -1 +1 @@ -D1D2D3D4D5D6D7D8D9U1{pin1}{pin2}{pin3}{pin4}{pin5}{pin6}{pin7}{pin8}{pin9}{pin10}{pin11}{pin12}{pin13}{pin14}{pin15}{pin16}{pin17}{pin18}{pin19}{pin20}{pin21}{pin22}{pin23}{pin24} \ No newline at end of file +D1D2D3D4D5D6D7D8D9U1{pin1}{pin2}{pin3}{pin4}{pin5}{pin6}{pin7}{pin8}{pin9}{pin10}{pin11}{pin12}{pin13}{pin14}{pin15}{pin16}{pin17}{pin18}{pin19}{pin20}{pin21}{pin22}{pin23}{pin24} \ No newline at end of file diff --git a/tests/features/__snapshots__/autorouter-version-v4-pcb.snap.svg b/tests/features/__snapshots__/autorouter-version-v4-pcb.snap.svg new file mode 100644 index 000000000..e4c1d155c --- /dev/null +++ b/tests/features/__snapshots__/autorouter-version-v4-pcb.snap.svg @@ -0,0 +1 @@ +R1LED1 \ No newline at end of file diff --git a/tests/features/autorouter-version-v4.test.tsx b/tests/features/autorouter-version-v4.test.tsx new file mode 100644 index 000000000..64c8c3f53 --- /dev/null +++ b/tests/features/autorouter-version-v4.test.tsx @@ -0,0 +1,44 @@ +import { expect, test } from "bun:test" +import { getTestFixture } from "../fixtures/get-test-fixture" + +test("board with autorouterVersion v4 uses AutoroutingPipelineSolver4", async () => { + const { circuit } = getTestFixture() + + let solverStartedName: string | undefined + + circuit.on("solver:started", (event) => { + solverStartedName = event.solverName + }) + + circuit.add( + + + + + + , + ) + + await circuit.renderUntilSettled() + + expect(solverStartedName).toBe("AutoroutingPipelineSolver4") + + const traces = circuit.selectAll("trace") + expect(traces.length).toBeGreaterThan(0) + + expect(circuit).toMatchPcbSnapshot(import.meta.path) +})