diff --git a/lib/components/primitive-components/Group/Group.ts b/lib/components/primitive-components/Group/Group.ts index f0a80bfc7..c790dd1c5 100644 --- a/lib/components/primitive-components/Group/Group.ts +++ b/lib/components/primitive-components/Group/Group.ts @@ -39,7 +39,7 @@ import { import { getLocalAutoroutingStages } from "lib/utils/autorouting/localAutorouterStrategies" import { shouldSkipAutoroutingBecauseOfPlacementErrors } from "lib/utils/autorouting/should-skip-autorouting-because-of-placement-errors" import { getBoundsOfPcbComponents } from "lib/utils/get-bounds-of-pcb-components" -import { getViaBoardLayers } from "lib/utils/getViaSpanLayers" +import { getViaSpanLayers } from "lib/utils/getViaSpanLayers" import { GROUND_NET_REGEX, POWER_NET_REGEX, @@ -1648,7 +1648,11 @@ export class Group = typeof groupProps> routedViaPoint.via_diameter ?? routedViaPoint.outer_diameter ?? routedViaPadDiameter, - layers: getViaBoardLayers(this._getSubcircuitLayerCount()), + layers: getViaSpanLayers({ + fromLayer, + toLayer, + layerCount: this._getSubcircuitLayerCount(), + }), from_layer: fromLayer, to_layer: toLayer, subcircuit_id: this.subcircuit_id!, diff --git a/lib/components/primitive-components/Group/Group_phasedAutoroutingUtils.ts b/lib/components/primitive-components/Group/Group_phasedAutoroutingUtils.ts index 005e2bf47..c3fd2f295 100644 --- a/lib/components/primitive-components/Group/Group_phasedAutoroutingUtils.ts +++ b/lib/components/primitive-components/Group/Group_phasedAutoroutingUtils.ts @@ -1,3 +1,4 @@ +import type { LayerRef } from "circuit-json" import type { Obstacle, SimpleRouteDifferentialPair, @@ -5,7 +6,7 @@ import type { SimpleRouteJson, SimplifiedPcbTrace, } from "lib/utils/autorouting/SimpleRouteJson" -import { getViaBoardLayers } from "lib/utils/getViaSpanLayers" +import { getViaSpanLayers } from "lib/utils/getViaSpanLayers" import type { RoutingPhaseDrcTolerances, RoutingPhasePlan, @@ -126,7 +127,11 @@ function createViaObstacle( return { obstacleId: `${connectedTo}_phase_via_obstacle_${obstacleIndex}`, type: "rect", - layers: getViaBoardLayers(layerCount), + layers: getViaSpanLayers({ + fromLayer: point.from_layer as LayerRef, + toLayer: point.to_layer as LayerRef, + layerCount, + }), center: { x: point.x, y: point.y }, width: 0.6, height: 0.6, diff --git a/tests/examples/__snapshots__/example39-unbroken-copper-pour-escape-vias-pcb.snap.svg b/tests/examples/__snapshots__/example39-unbroken-copper-pour-escape-vias-pcb.snap.svg index 7c0548799..4c85a6308 100644 --- a/tests/examples/__snapshots__/example39-unbroken-copper-pour-escape-vias-pcb.snap.svg +++ b/tests/examples/__snapshots__/example39-unbroken-copper-pour-escape-vias-pcb.snap.svg @@ -1 +1 @@ -U1C1C2U2 \ No newline at end of file +U1C1C2U2 \ No newline at end of file diff --git a/tests/examples/example39-unbroken-copper-pour-escape-vias.test.tsx b/tests/examples/example39-unbroken-copper-pour-escape-vias.test.tsx index 17c827f71..cf5ddc025 100644 --- a/tests/examples/example39-unbroken-copper-pour-escape-vias.test.tsx +++ b/tests/examples/example39-unbroken-copper-pour-escape-vias.test.tsx @@ -72,13 +72,11 @@ test("unbroken inner-layer copper pours participate in autorouting", async () => .list() .every((via) => via.subcircuit_connectivity_map_key), ).toBe(true) - expect(topToInner2Vias.every((via) => via.layers.includes("inner1"))).toBe( - true, - ) - expect(topToInner2Vias.every((via) => via.layers.includes("bottom"))).toBe( - true, - ) - expect(topToInner2Vias.every((via) => via.layers.length === 4)).toBe(true) + expect( + topToInner2Vias.every( + (via) => via.layers.join(",") === "top,inner1,inner2", + ), + ).toBe(true) const vccNet = circuit.db.source_net.list().find((net) => net.name === "VCC") expect(vccNet?.subcircuit_connectivity_map_key).toBeDefined() diff --git a/tests/features/autorouter-fanout-plane-termination.test.tsx b/tests/features/autorouter-fanout-plane-termination.test.tsx index 2f08efeee..ecf9d44e7 100644 --- a/tests/features/autorouter-fanout-plane-termination.test.tsx +++ b/tests/features/autorouter-fanout-plane-termination.test.tsx @@ -113,6 +113,15 @@ test("fanout drops source-only power and ground connections to internal planes", const vias = circuit.db.pcb_via.list() expect(vias.some((via) => via.to_layer === "inner1")).toBe(true) expect(vias.some((via) => via.to_layer === "inner2")).toBe(true) + expect(vias.find((via) => via.to_layer === "inner1")?.layers).toEqual([ + "top", + "inner1", + ]) + expect(vias.find((via) => via.to_layer === "inner2")?.layers).toEqual([ + "top", + "inner1", + "inner2", + ]) const signalSourceTraceIds = new Set( ["SIGNAL", "SIGNAL_RETURN"].map( diff --git a/tests/features/ten-layer-custom-autorouting.test.tsx b/tests/features/ten-layer-custom-autorouting.test.tsx index 6ad5c9d5e..5f956078d 100644 --- a/tests/features/ten-layer-custom-autorouting.test.tsx +++ b/tests/features/ten-layer-custom-autorouting.test.tsx @@ -96,7 +96,7 @@ test("Core carries an inner8 route through the full autorouting pipeline", async ), ).toBe(true) - const allCopperLayers: LayerRef[] = [ + const topToInner8Layers: LayerRef[] = [ "top", "inner1", "inner2", @@ -106,14 +106,10 @@ test("Core carries an inner8 route through the full autorouting pipeline", async "inner6", "inner7", "inner8", - "bottom", ] expect(circuit.db.pcb_via.list()).toHaveLength(2) - expect( - circuit.db.pcb_via - .list() - .every((via) => - allCopperLayers.every((layer) => via.layers.includes(layer)), - ), - ).toBe(true) + expect(circuit.db.pcb_via.list().map((via) => via.layers)).toEqual([ + topToInner8Layers, + [...topToInner8Layers].reverse(), + ]) }) diff --git a/tests/utils/autorouting/phased-routing-ten-layer-via-obstacle.test.ts b/tests/utils/autorouting/phased-routing-ten-layer-via-obstacle.test.ts index 105424d9d..aa7489004 100644 --- a/tests/utils/autorouting/phased-routing-ten-layer-via-obstacle.test.ts +++ b/tests/utils/autorouting/phased-routing-ten-layer-via-obstacle.test.ts @@ -2,7 +2,7 @@ import { expect, test } from "bun:test" import { Group_getObstaclesFromRoutedTraces } from "lib/components/primitive-components/Group/Group_phasedAutoroutingUtils" import type { SimplifiedPcbTrace } from "lib/utils/autorouting/SimpleRouteJson" -test("phased autorouting blocks every layer crossed by a through via", () => { +test("phased autorouting blocks only the layers crossed by a blind via", () => { const trace: SimplifiedPcbTrace = { type: "pcb_trace", pcb_trace_id: "pcb_trace_0", @@ -20,7 +20,6 @@ test("phased autorouting blocks every layer crossed by a through via", () => { const [viaObstacle] = Group_getObstaclesFromRoutedTraces([trace], 10) expect(viaObstacle.layers).toEqual([ - "top", "inner1", "inner2", "inner3", @@ -29,6 +28,5 @@ test("phased autorouting blocks every layer crossed by a through via", () => { "inner6", "inner7", "inner8", - "bottom", ]) })