From b0a253eeec64de356ac00daed1506bcaf3b9fa66 Mon Sep 17 00:00:00 2001 From: AnasSarkiz Date: Mon, 27 Jul 2026 16:56:36 +0200 Subject: [PATCH 1/2] Add via-in-pad autorouter configuration --- README.md | 3 ++- src/pcb/pcb_group.ts | 11 +++++++++-- tests/pcb_group_autorouter.test.ts | 15 +++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ea479e28..d370c5d1 100644 --- a/README.md +++ b/README.md @@ -1879,7 +1879,8 @@ interface PcbGroup { description?: string layout_mode?: string autorouter_configuration?: { - trace_clearance: Length + trace_clearance?: Length + allow_via_in_pad?: boolean } autorouter_used_string?: string } diff --git a/src/pcb/pcb_group.ts b/src/pcb/pcb_group.ts index b86c8a31..555c87af 100644 --- a/src/pcb/pcb_group.ts +++ b/src/pcb/pcb_group.ts @@ -46,7 +46,13 @@ export const pcb_group = z layout_mode: z.string().optional(), autorouter_configuration: z .object({ - trace_clearance: length, + trace_clearance: length.optional(), + allow_via_in_pad: z + .boolean() + .optional() + .describe( + "Allows the autorouter to place vias inside connected pads. Omitted or false keeps via-in-pad routing disabled.", + ), }) .optional(), autorouter_used_string: z.string().optional(), @@ -82,7 +88,8 @@ export interface PcbGroup { description?: string layout_mode?: string autorouter_configuration?: { - trace_clearance: Length + trace_clearance?: Length + allow_via_in_pad?: boolean } autorouter_used_string?: string } diff --git a/tests/pcb_group_autorouter.test.ts b/tests/pcb_group_autorouter.test.ts index cbaf12df..1d627ff3 100644 --- a/tests/pcb_group_autorouter.test.ts +++ b/tests/pcb_group_autorouter.test.ts @@ -16,6 +16,21 @@ test("pcb_group.autorouter_configuration.trace_clearance parses", () => { expect(group.autorouter_configuration?.trace_clearance).toBe(0.2) }) +test("pcb_group.autorouter_configuration.allow_via_in_pad parses independently", () => { + const group = pcb_group.parse({ + type: "pcb_group", + source_group_id: "g1", + center: { x: 0, y: 0 }, + width: 10, + height: 10, + pcb_component_ids: [], + autorouter_configuration: { allow_via_in_pad: true }, + }) + + expect(group.autorouter_configuration?.allow_via_in_pad).toBe(true) + expect(group.autorouter_configuration?.trace_clearance).toBeUndefined() +}) + test("pcb_group.autorouter_used_string is optional", () => { const group = pcb_group.parse({ type: "pcb_group", From 2d79df30949102aac389ba67dc3a6dc98d859626 Mon Sep 17 00:00:00 2001 From: AnasSarkiz Date: Mon, 27 Jul 2026 17:32:06 +0200 Subject: [PATCH 2/2] Keep trace clearance required --- README.md | 2 +- src/pcb/pcb_group.ts | 4 ++-- tests/pcb_group_autorouter.test.ts | 9 ++++++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index d370c5d1..7654198b 100644 --- a/README.md +++ b/README.md @@ -1879,7 +1879,7 @@ interface PcbGroup { description?: string layout_mode?: string autorouter_configuration?: { - trace_clearance?: Length + trace_clearance: Length allow_via_in_pad?: boolean } autorouter_used_string?: string diff --git a/src/pcb/pcb_group.ts b/src/pcb/pcb_group.ts index 555c87af..c528764d 100644 --- a/src/pcb/pcb_group.ts +++ b/src/pcb/pcb_group.ts @@ -46,7 +46,7 @@ export const pcb_group = z layout_mode: z.string().optional(), autorouter_configuration: z .object({ - trace_clearance: length.optional(), + trace_clearance: length, allow_via_in_pad: z .boolean() .optional() @@ -88,7 +88,7 @@ export interface PcbGroup { description?: string layout_mode?: string autorouter_configuration?: { - trace_clearance?: Length + trace_clearance: Length allow_via_in_pad?: boolean } autorouter_used_string?: string diff --git a/tests/pcb_group_autorouter.test.ts b/tests/pcb_group_autorouter.test.ts index 1d627ff3..2d8f06ee 100644 --- a/tests/pcb_group_autorouter.test.ts +++ b/tests/pcb_group_autorouter.test.ts @@ -16,7 +16,7 @@ test("pcb_group.autorouter_configuration.trace_clearance parses", () => { expect(group.autorouter_configuration?.trace_clearance).toBe(0.2) }) -test("pcb_group.autorouter_configuration.allow_via_in_pad parses independently", () => { +test("pcb_group.autorouter_configuration.allow_via_in_pad parses", () => { const group = pcb_group.parse({ type: "pcb_group", source_group_id: "g1", @@ -24,11 +24,14 @@ test("pcb_group.autorouter_configuration.allow_via_in_pad parses independently", width: 10, height: 10, pcb_component_ids: [], - autorouter_configuration: { allow_via_in_pad: true }, + autorouter_configuration: { + trace_clearance: 0.2, + allow_via_in_pad: true, + }, }) expect(group.autorouter_configuration?.allow_via_in_pad).toBe(true) - expect(group.autorouter_configuration?.trace_clearance).toBeUndefined() + expect(group.autorouter_configuration?.trace_clearance).toBe(0.2) }) test("pcb_group.autorouter_used_string is optional", () => {