@@ -14,7 +14,7 @@ import { getDescendantSubcircuitIds } from "./getAncestorSubcircuitIds"
1414 * This function can only be called in the PcbTraceRender phase or later
1515 */
1616export const getSimpleRouteJsonFromCircuitJson = ( {
17- db,
17+ db : inputDb ,
1818 circuitJson,
1919 subcircuit_id,
2020 minTraceWidth = 0.1 ,
@@ -26,6 +26,7 @@ export const getSimpleRouteJsonFromCircuitJson = ({
2626 minTraceWidth ?: number
2727 nominalTraceWidth ?: number
2828} ) : { simpleRouteJson : SimpleRouteJson ; connMap : ConnectivityMap } => {
29+ let db = inputDb
2930 if ( ! db && circuitJson ) {
3031 db = su ( circuitJson )
3132 }
@@ -70,18 +71,18 @@ export const getSimpleRouteJsonFromCircuitJson = ({
7071 board = db . pcb_board . list ( ) [ 0 ]
7172 }
7273
73- db = su ( subcircuitElements )
74+ const subcircuitDb = su ( subcircuitElements )
7475
75- const connMap = getFullConnectivityMapFromCircuitJson ( subcircuitElements )
76+ const connMap = getFullConnectivityMapFromCircuitJson ( db . toArray ( ) )
7677
7778 const obstacles = getObstaclesFromCircuitJson (
7879 [
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 ( ) ,
80+ ...subcircuitDb . pcb_component . list ( ) ,
81+ ...subcircuitDb . pcb_smtpad . list ( ) ,
82+ ...subcircuitDb . pcb_plated_hole . list ( ) ,
83+ ...subcircuitDb . pcb_hole . list ( ) ,
84+ ...subcircuitDb . pcb_via . list ( ) ,
85+ ...subcircuitDb . pcb_cutout . list ( ) ,
8586 // getObstaclesFromSoup is old and doesn't support diagonal traces
8687 // ...db.pcb_trace.list(),
8788 ] . filter (
@@ -99,7 +100,8 @@ export const getSimpleRouteJsonFromCircuitJson = ({
99100 }
100101
101102 // Build mapping from source_port_id to internal connection ID for interconnects
102- const internalConnections = db . source_component_internal_connection . list ( )
103+ const internalConnections =
104+ subcircuitDb . source_component_internal_connection . list ( )
103105 const sourcePortIdToInternalConnectionId = new Map < string , string > ( )
104106 for ( const ic of internalConnections ) {
105107 for ( const sourcePortId of ic . source_port_ids ) {
@@ -209,7 +211,7 @@ export const getSimpleRouteJsonFromCircuitJson = ({
209211 )
210212
211213 // Create connections from traces
212- const directTraceConnections = db . source_trace
214+ const directTraceConnections = subcircuitDb . source_trace
213215 . list ( )
214216 . filter ( ( trace ) => ! routedTraceIds . has ( trace . source_trace_id ) )
215217 . map ( ( trace ) => {
@@ -228,29 +230,51 @@ export const getSimpleRouteJsonFromCircuitJson = ({
228230 const [ portA , portB ] = connectedPorts
229231
230232 if (
231- ! portA . pcb_port_id ||
233+ ! portA . source_port_id ||
232234 portA . x === undefined ||
233235 portA . y === undefined
234236 ) {
235- const readablePortA = portA . pcb_port_id
236- ? getReadableNameForPcbPort ( db . toArray ( ) , portA . pcb_port_id )
237- : "unknown"
238- console . error (
239- `(${ readablePortA } ) for trace ${ trace . source_trace_id } does not have x/y coordinates. Skipping this trace.` ,
240- )
237+ const source_port = db . source_port . get ( portA . source_port_id ! )
238+ const source_component = source_port
239+ ? db . source_component . get ( source_port . source_component_id ! )
240+ : null
241+ const readablePortA =
242+ source_component && source_port
243+ ? `.${ source_component . name } > .${ source_port . name } `
244+ : portA . pcb_port_id
245+ ? getReadableNameForPcbPort ( db . toArray ( ) , portA . pcb_port_id )
246+ : portA . source_port_id ?? "unknown"
247+
248+ db . pcb_trace_error . insert ( {
249+ error_type : "pcb_trace_error" ,
250+ message : `(pcb_port[${ readablePortA } ]) for trace ${ trace . source_trace_id } does not have x/y coordinates. Skipping this trace.` ,
251+ source_trace_id : trace . source_trace_id ,
252+ source_port_ids : portA . source_port_id ? [ portA . source_port_id ] : [ ] ,
253+ } as any )
241254 return null
242255 }
243256 if (
244- ! portB . pcb_port_id ||
257+ ! portB . source_port_id ||
245258 portB . x === undefined ||
246259 portB . y === undefined
247260 ) {
248- const readablePortB = portB . pcb_port_id
249- ? getReadableNameForPcbPort ( db . toArray ( ) , portB . pcb_port_id )
250- : "unknown"
251- console . error (
252- `(${ readablePortB } ) for trace ${ trace . source_trace_id } does not have x/y coordinates. Skipping this trace.` ,
253- )
261+ const source_port = db . source_port . get ( portB . source_port_id ! )
262+ const source_component = source_port
263+ ? db . source_component . get ( source_port . source_component_id ! )
264+ : null
265+ const readablePortB =
266+ source_component && source_port
267+ ? `.${ source_component . name } > .${ source_port . name } `
268+ : portB . pcb_port_id
269+ ? getReadableNameForPcbPort ( db . toArray ( ) , portB . pcb_port_id )
270+ : portB . source_port_id ?? "unknown"
271+
272+ db . pcb_trace_error . insert ( {
273+ error_type : "pcb_trace_error" ,
274+ message : `(pcb_port[${ readablePortB } ]) for trace ${ trace . source_trace_id } does not have x/y coordinates. Skipping this trace.` ,
275+ source_trace_id : trace . source_trace_id ,
276+ source_port_ids : portB . source_port_id ? [ portB . source_port_id ] : [ ] ,
277+ } as any )
254278 return null
255279 }
256280
@@ -260,6 +284,8 @@ export const getSimpleRouteJsonFromCircuitJson = ({
260284 // Collect all traceHints that apply to either port
261285 const matchingHints = traceHints . filter (
262286 ( hint ) =>
287+ ( hint as any ) . source_port_id === portA . source_port_id ||
288+ ( hint as any ) . source_port_id === portB . source_port_id ||
263289 hint . pcb_port_id === portA . pcb_port_id ||
264290 hint . pcb_port_id === portB . pcb_port_id ,
265291 )
@@ -291,15 +317,15 @@ export const getSimpleRouteJsonFromCircuitJson = ({
291317 x : portA . x ! ,
292318 y : portA . y ! ,
293319 layer : layerA ,
294- pointId : portA . pcb_port_id ,
320+ pointId : portA . source_port_id ,
295321 pcb_port_id : portA . pcb_port_id ,
296322 } ,
297323 ...hintPoints ,
298324 {
299325 x : portB . x ! ,
300326 y : portB . y ! ,
301327 layer : layerB ,
302- pointId : portB . pcb_port_id ,
328+ pointId : portB . source_port_id ,
303329 pcb_port_id : portB . pcb_port_id ,
304330 } ,
305331 ] ,
@@ -310,7 +336,7 @@ export const getSimpleRouteJsonFromCircuitJson = ({
310336 directTraceConnections . map ( ( c ) => [ c . source_trace_id , c ] ) ,
311337 )
312338
313- const source_nets = db . source_net
339+ const source_nets = subcircuitDb . source_net
314340 . list ( )
315341 . filter (
316342 ( e ) => ! subcircuit_id || relevantSubcircuitIds ?. has ( e . subcircuit_id ! ) ,
@@ -335,14 +361,14 @@ export const getSimpleRouteJsonFromCircuitJson = ({
335361 x : p . x ! ,
336362 y : p . y ! ,
337363 layer : ( p . layers ?. [ 0 ] as any ) ?? "top" ,
338- pointId : p . pcb_port_id ,
364+ pointId : p . source_port_id ,
339365 pcb_port_id : p . pcb_port_id ,
340366 } ) )
341367 } ) ,
342368 } )
343369 }
344370
345- const breakoutPoints = db . pcb_breakout_point
371+ const breakoutPoints = subcircuitDb . pcb_breakout_point
346372 . list ( )
347373 . filter (
348374 ( bp ) => ! subcircuit_id || relevantSubcircuitIds ?. has ( bp . subcircuit_id ! ) ,
@@ -392,7 +418,7 @@ export const getSimpleRouteJsonFromCircuitJson = ({
392418 x : pcb_port . x ! ,
393419 y : pcb_port . y ! ,
394420 layer : ( pcb_port . layers ?. [ 0 ] as any ) ?? "top" ,
395- pointId : pcb_port . pcb_port_id ,
421+ pointId : pcb_port . source_port_id ,
396422 // @ts -ignore
397423 pcb_port_id : pcb_port . pcb_port_id ,
398424 } ,
@@ -428,8 +454,14 @@ export const getSimpleRouteJsonFromCircuitJson = ({
428454 for ( const tr of existingTraces ) {
429455 const tracePortIds = new Set < string > ( )
430456 for ( const seg of tr . route as any [ ] ) {
431- if ( seg . start_pcb_port_id ) tracePortIds . add ( seg . start_pcb_port_id )
432- if ( seg . end_pcb_port_id ) tracePortIds . add ( seg . end_pcb_port_id )
457+ if ( seg . start_pcb_port_id ) {
458+ const port = db . pcb_port . get ( seg . start_pcb_port_id )
459+ if ( port ?. source_port_id ) tracePortIds . add ( port . source_port_id )
460+ }
461+ if ( seg . end_pcb_port_id ) {
462+ const port = db . pcb_port . get ( seg . end_pcb_port_id )
463+ if ( port ?. source_port_id ) tracePortIds . add ( port . source_port_id )
464+ }
433465 }
434466 if ( tracePortIds . size < 2 ) continue
435467
@@ -460,3 +492,4 @@ export const getSimpleRouteJsonFromCircuitJson = ({
460492 connMap,
461493 }
462494}
495+
0 commit comments