Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions lib/components/primitive-components/Group/Group.ts
Original file line number Diff line number Diff line change
Expand Up @@ -904,6 +904,9 @@ export class Group<Props extends z.ZodType<any, any, any> = typeof groupProps>
// Apply each routed trace to the corresponding circuit trace
const pcbStyle = this.getInheritedMergedProperty("pcbStyle")
const { holeDiameter, padDiameter } = getViaDiameterDefaults(pcbStyle)
const board = db.pcb_board.list()[0]
const routedViaHoleDiameter = board?.min_via_hole_diameter ?? holeDiameter
const routedViaPadDiameter = board?.min_via_pad_diameter ?? padDiameter

// First, create jumper components from getOutputJumpers() result
if (output_jumpers && output_jumpers.length > 0) {
Expand Down Expand Up @@ -958,12 +961,24 @@ export class Group<Props extends z.ZodType<any, any, any> = typeof groupProps>
if (pcb_trace.type === "pcb_trace") {
for (const point of pcb_trace.route) {
if (point.route_type === "via") {
const routedViaPoint = point as typeof point & {
via_diameter?: number
via_hole_diameter?: number
outer_diameter?: number
hole_diameter?: number
}
db.pcb_via.insert({
pcb_trace_id: pcb_trace.pcb_trace_id,
x: point.x,
y: point.y,
hole_diameter: holeDiameter,
outer_diameter: padDiameter,
hole_diameter:
routedViaPoint.via_hole_diameter ??
routedViaPoint.hole_diameter ??
routedViaHoleDiameter,
outer_diameter:
routedViaPoint.via_diameter ??
routedViaPoint.outer_diameter ??
routedViaPadDiameter,
layers: [
point.from_layer as LayerRef,
point.to_layer as LayerRef,
Expand Down
8 changes: 8 additions & 0 deletions lib/utils/autorouting/SimpleRouteJson.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ export type SimplifiedPcbTrace = {
y: number
to_layer: string
from_layer: string
via_diameter?: number
via_hole_diameter?: number
}
| {
route_type: "jumper"
Expand Down Expand Up @@ -60,6 +62,12 @@ export interface SimpleRouteJson {
layerCount: number
minTraceWidth: number
nominalTraceWidth?: number
/** @deprecated Use `min_via_pad_diameter` / `minViaPadDiameter` instead. */
minViaDiameter?: number
minViaHoleDiameter?: number
minViaPadDiameter?: number
min_via_hole_diameter?: number
min_via_pad_diameter?: number
obstacles: Obstacle[]
connections: Array<SimpleRouteConnection>
bounds: { minX: number; maxX: number; minY: number; maxY: number }
Expand Down
5 changes: 5 additions & 0 deletions lib/utils/autorouting/getSimpleRouteJsonFromCircuitJson.ts
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,11 @@ export const getSimpleRouteJsonFromCircuitJson = ({
// subcircuit
layerCount: board?.num_layers ?? 2,
minTraceWidth,
minViaDiameter: board?.min_via_pad_diameter,
minViaHoleDiameter: board?.min_via_hole_diameter,
minViaPadDiameter: board?.min_via_pad_diameter,
min_via_hole_diameter: board?.min_via_hole_diameter,
min_via_pad_diameter: board?.min_via_pad_diameter,
nominalTraceWidth,
outline: board?.outline?.map((point) => ({ ...point })),
},
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"@biomejs/biome": "^1.8.3",
"@resvg/resvg-js": "^2.6.2",
"@tscircuit/alphabet": "0.0.25",
"@tscircuit/capacity-autorouter": "^0.0.434",
"@tscircuit/capacity-autorouter": "^0.0.447",
"@tscircuit/checks": "0.0.120",
"@tscircuit/circuit-json-util": "^0.0.93",
"@tscircuit/common": "^0.0.20",
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
51 changes: 51 additions & 0 deletions tests/features/autorouter-min-via-dimensions.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { expect, test } from "bun:test"
import { getTestFixture } from "../fixtures/get-test-fixture"

test(
"autorouter uses board min via dimensions for routed vias",
async () => {
const { circuit } = getTestFixture()

circuit.add(
<board
width="12mm"
height="12mm"
layers={2}
minViaHoleDiameter={0.25}
minViaPadDiameter={0.8}
autorouter={{
local: true,
groupMode: "subcircuit",
}}
autorouterVersion="v4"
>
<testpoint
name="TP_TOP"
footprintVariant="pad"
pcbX={0}
pcbY={4}
layer="top"
/>
<testpoint
name="TP_BOTTOM"
footprintVariant="pad"
pcbX={0}
pcbY={-4}
layer="bottom"
/>

<trace from=".TP_TOP > .pin1" to=".TP_BOTTOM > .pin1" />
</board>,
)

await circuit.renderUntilSettled()

const vias = circuit.db.pcb_via.list()
expect(vias.length).toBeGreaterThan(0)
expect(vias.every((via) => via.outer_diameter === 0.8)).toBe(true)
expect(vias.every((via) => via.hole_diameter === 0.25)).toBe(true)

expect(circuit).toMatchPcbSnapshot(import.meta.path)
},
{ timeout: 30_000 },
)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading