Skip to content

Commit 382864b

Browse files
committed
Revert "subcircuit filtering"
This reverts commit 8c5a6f7.
1 parent da18624 commit 382864b

File tree

3 files changed

+63
-61
lines changed

3 files changed

+63
-61
lines changed

lib/utils/autorouting/SimpleRouteJson.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export interface SimpleRouteConnection {
4949
y: number
5050
layer: string
5151
pointId?: string // NEW – identifier used by the solver
52-
source_port_id?: string
52+
pcb_port_id?: string // (kept for convenience, was already used)
5353
}>
5454
externallyConnectedPointIds?: string[][] // NEW – groups of pointIds
5555
}

lib/utils/autorouting/getSimpleRouteJsonFromCircuitJson.ts

Lines changed: 54 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export const getSimpleRouteJsonFromCircuitJson = ({
5050
}
5151

5252
const subcircuitElements = (circuitJson ?? db.toArray()).filter(
53-
(e: any) =>
53+
(e) =>
5454
!subcircuit_id ||
5555
("subcircuit_id" in e && relevantSubcircuitIds!.has(e.subcircuit_id!)),
5656
)
@@ -70,13 +70,22 @@ export const getSimpleRouteJsonFromCircuitJson = ({
7070
board = db.pcb_board.list()[0]
7171
}
7272

73-
73+
db = su(subcircuitElements)
7474

7575
const connMap = getFullConnectivityMapFromCircuitJson(subcircuitElements)
7676

7777
const obstacles = getObstaclesFromCircuitJson(
78-
subcircuitElements.filter((e: any) =>
79-
["pcb_component", "pcb_smtpad", "pcb_plated_hole", "pcb_hole", "pcb_via", "pcb_cutout"].includes(e.type),
78+
[
79+
...db.pcb_component.list(),
80+
...db.pcb_smtpad.list(),
81+
...db.pcb_plated_hole.list(),
82+
...db.pcb_hole.list(),
83+
...db.pcb_via.list(),
84+
...db.pcb_cutout.list(),
85+
// getObstaclesFromSoup is old and doesn't support diagonal traces
86+
// ...db.pcb_trace.list(),
87+
].filter(
88+
(e) => !subcircuit_id || relevantSubcircuitIds?.has(e.subcircuit_id!),
8089
),
8190
connMap,
8291
)
@@ -90,9 +99,7 @@ export const getSimpleRouteJsonFromCircuitJson = ({
9099
}
91100

92101
// Build mapping from source_port_id to internal connection ID for interconnects
93-
const internalConnections = subcircuitElements.filter(
94-
(e: any) => e.type === "source_component_internal_connection",
95-
) as any[]
102+
const internalConnections = db.source_component_internal_connection.list()
96103
const sourcePortIdToInternalConnectionId = new Map<string, string>()
97104
for (const ic of internalConnections) {
98105
for (const sourcePortId of ic.source_port_ids) {
@@ -105,7 +112,7 @@ export const getSimpleRouteJsonFromCircuitJson = ({
105112

106113
// Build mapping from pcb_smtpad_id/pcb_plated_hole_id to source_port_id via pcb_port
107114
const pcbElementIdToSourcePortId = new Map<string, string>()
108-
for (const pcbPort of subcircuitElements.filter((e: any) => e.type === "pcb_port") as any[]) {
115+
for (const pcbPort of db.pcb_port.list()) {
109116
if (pcbPort.source_port_id) {
110117
// Find the smtpad or plated hole associated with this port
111118
const smtpad = db.pcb_smtpad.getWhere({
@@ -195,21 +202,18 @@ export const getSimpleRouteJsonFromCircuitJson = ({
195202
}
196203
}
197204
const routedTraceIds = new Set(
198-
(subcircuitElements.filter((e: any) => e.type === "pcb_trace") as any[])
199-
.map((t: any) => t.source_trace_id)
200-
.filter((id: any): id is string => Boolean(id)),
205+
db.pcb_trace
206+
.list()
207+
.map((t) => t.source_trace_id)
208+
.filter((id): id is string => Boolean(id)),
201209
)
202210

203211
// Create connections from traces
204-
const directTraceConnections = (subcircuitElements.filter(
205-
(e: any) => e.type === "source_trace",
206-
) as any[])
207-
.filter(
208-
(trace: any) =>
209-
!routedTraceIds.has(trace.source_trace_id),
210-
)
211-
.map((trace: any) => {
212-
const connectedPorts = trace.connected_source_port_ids.map((id: string) => {
212+
const directTraceConnections = db.source_trace
213+
.list()
214+
.filter((trace) => !routedTraceIds.has(trace.source_trace_id))
215+
.map((trace) => {
216+
const connectedPorts = trace.connected_source_port_ids.map((id) => {
213217
const source_port = db.source_port.get(id)
214218
const pcb_port = db.pcb_port.getWhere({ source_port_id: id })
215219
return {
@@ -220,16 +224,9 @@ export const getSimpleRouteJsonFromCircuitJson = ({
220224

221225
if (connectedPorts.length < 2) return null
222226

227+
// TODO handle trace.connected_source_net_ids
223228
const [portA, portB] = connectedPorts
224229

225-
const netId = trace.source_trace_id
226-
? connMap.getNetConnectedToId(trace.source_trace_id)
227-
: null
228-
const net = netId ? db.source_net.get(netId) : null
229-
const connectionName = net?.name
230-
? `net.${net.name}`
231-
: `trace ${trace.source_trace_id}`
232-
233230
if (
234231
!portA.pcb_port_id ||
235232
portA.x === undefined ||
@@ -238,16 +235,9 @@ export const getSimpleRouteJsonFromCircuitJson = ({
238235
const readablePortA = portA.pcb_port_id
239236
? getReadableNameForPcbPort(db.toArray(), portA.pcb_port_id)
240237
: "unknown"
241-
db.pcb_trace_error.insert({
242-
error_type: "pcb_trace_error",
243-
source_trace_id: trace.source_trace_id!,
244-
message: `Port ${readablePortA} on ${connectionName} does not have x/y coordinates. Skipping this trace.`,
245-
pcb_trace_id: null as any,
246-
pcb_component_ids: [portA.pcb_component_id].filter(
247-
(id): id is string => Boolean(id),
248-
),
249-
pcb_port_ids: [portA.pcb_port_id!],
250-
})
238+
console.error(
239+
`(${readablePortA}) for trace ${trace.source_trace_id} does not have x/y coordinates. Skipping this trace.`,
240+
)
251241
return null
252242
}
253243
if (
@@ -258,16 +248,9 @@ export const getSimpleRouteJsonFromCircuitJson = ({
258248
const readablePortB = portB.pcb_port_id
259249
? getReadableNameForPcbPort(db.toArray(), portB.pcb_port_id)
260250
: "unknown"
261-
db.pcb_trace_error.insert({
262-
error_type: "pcb_trace_error",
263-
source_trace_id: trace.source_trace_id!,
264-
message: `Port ${readablePortB} on ${connectionName} does not have x/y coordinates. Skipping this trace.`,
265-
pcb_trace_id: null as any,
266-
pcb_component_ids: [portB.pcb_component_id].filter(
267-
(id): id is string => Boolean(id),
268-
),
269-
pcb_port_ids: [portB.pcb_port_id!],
270-
})
251+
console.error(
252+
`(${readablePortB}) for trace ${trace.source_trace_id} does not have x/y coordinates. Skipping this trace.`,
253+
)
271254
return null
272255
}
273256

@@ -296,7 +279,10 @@ export const getSimpleRouteJsonFromCircuitJson = ({
296279
}
297280

298281
return {
299-
name: connectionName,
282+
name:
283+
trace.source_trace_id ??
284+
connMap.getNetConnectedToId(trace.source_trace_id) ??
285+
"",
300286
source_trace_id: trace.source_trace_id,
301287
nominalTraceWidth: trace.min_trace_thickness,
302288
width: trace.min_trace_thickness,
@@ -306,15 +292,15 @@ export const getSimpleRouteJsonFromCircuitJson = ({
306292
y: portA.y!,
307293
layer: layerA,
308294
pointId: portA.pcb_port_id,
309-
source_port_id: portA.source_port_id,
295+
pcb_port_id: portA.pcb_port_id,
310296
},
311297
...hintPoints,
312298
{
313299
x: portB.x!,
314300
y: portB.y!,
315301
layer: layerB,
316302
pointId: portB.pcb_port_id,
317-
source_port_id: portB.source_port_id,
303+
pcb_port_id: portB.pcb_port_id,
318304
},
319305
],
320306
} as SimpleRouteConnection
@@ -324,7 +310,11 @@ export const getSimpleRouteJsonFromCircuitJson = ({
324310
directTraceConnections.map((c) => [c.source_trace_id, c]),
325311
)
326312

327-
const source_nets = subcircuitElements.filter((e: any) => e.type === "source_net") as any[]
313+
const source_nets = db.source_net
314+
.list()
315+
.filter(
316+
(e) => !subcircuit_id || relevantSubcircuitIds?.has(e.subcircuit_id!),
317+
)
328318

329319
const connectionsFromNets: SimpleRouteConnection[] = []
330320
for (const net of source_nets) {
@@ -346,13 +336,17 @@ export const getSimpleRouteJsonFromCircuitJson = ({
346336
y: p.y!,
347337
layer: (p.layers?.[0] as any) ?? "top",
348338
pointId: p.pcb_port_id,
349-
source_port_id: p.source_port_id,
339+
pcb_port_id: p.pcb_port_id,
350340
}))
351341
}),
352342
})
353343
}
354344

355-
const breakoutPoints = subcircuitElements.filter((e: any) => e.type === "pcb_breakout_point") as any[]
345+
const breakoutPoints = db.pcb_breakout_point
346+
.list()
347+
.filter(
348+
(bp) => !subcircuit_id || relevantSubcircuitIds?.has(bp.subcircuit_id!),
349+
)
356350

357351
const connectionsFromBreakoutPoints: SimpleRouteConnection[] = []
358352
const breakoutTraceConnectionsById = new Map<string, SimpleRouteConnection>()
@@ -400,7 +394,7 @@ export const getSimpleRouteJsonFromCircuitJson = ({
400394
layer: (pcb_port.layers?.[0] as any) ?? "top",
401395
pointId: pcb_port.pcb_port_id,
402396
// @ts-ignore
403-
source_port_id: pcb_port.source_port_id,
397+
pcb_port_id: pcb_port.pcb_port_id,
404398
},
405399
pt,
406400
],
@@ -425,7 +419,11 @@ export const getSimpleRouteJsonFromCircuitJson = ({
425419
}
426420

427421
// ----- 3. Walk existing pcb_traces to find already-connected port groups
428-
const existingTraces = subcircuitElements.filter((e: any) => e.type === "pcb_trace") as any[]
422+
const existingTraces = db.pcb_trace
423+
.list()
424+
.filter(
425+
(t) => !subcircuit_id || relevantSubcircuitIds?.has(t.subcircuit_id!),
426+
)
429427

430428
for (const tr of existingTraces) {
431429
const tracePortIds = new Set<string>()

tests/utils/autorouting/simple-route-json-readable-names.test.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ test("verify human-readable errors in autorouter diagnostics", async () => {
1010
<board width={10} height={10}>
1111
<resistor name="R1" pcbX={-2} pcbY={0} resistance="1k" footprint="0402" />
1212
<resistor name="R2" pcbX={2} pcbY={0} resistance="1k" footprint="0402" />
13+
<net name="MY_NET" />
1314
<trace from=".R1 > .pin1" to=".R2 > .pin1" />
1415
</board>,
1516
)
@@ -23,11 +24,14 @@ test("verify human-readable errors in autorouter diagnostics", async () => {
2324
circuit.db.pcb_trace.delete(pcb_trace.pcb_trace_id)
2425
}
2526

27+
const consoleSpy = spyOn(console, "error").mockImplementation(() => {})
28+
2629
getSimpleRouteJsonFromCircuitJson({ db: circuit.db })
27-
const pcb_errors = circuit.db.pcb_trace_error.list()
2830

29-
expect(pcb_errors.length).toBeGreaterThan(0)
30-
expect(pcb_errors[0].message).toMatchInlineSnapshot(
31-
`"Port pcb_port[.R1 > .pin1] on trace source_trace_0 does not have x/y coordinates. Skipping this trace."`,
31+
expect(consoleSpy).toHaveBeenCalled()
32+
expect(consoleSpy.mock.calls[0][0]).toMatchInlineSnapshot(
33+
`"(pcb_port[.R1 > .pin1]) for trace source_trace_0 does not have x/y coordinates. Skipping this trace."`,
3234
)
35+
36+
consoleSpy.mockRestore()
3337
})

0 commit comments

Comments
 (0)