Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 12523) +++ trunk/src/obj_subc.c (revision 12524) @@ -1281,3 +1281,19 @@ PCB_END_LOOP; return NULL; } + +pcb_subc_t *pcb_subc_by_id(pcb_data_t *base, long int ID) +{ + pcb_box_t *sc; + pcb_rtree_it_t it; + + for(sc = pcb_r_first(base->subc_tree, &it); sc != NULL; sc = pcb_r_next(&it)) { + if (((pcb_subc_t *)sc)->ID == ID) { + pcb_r_end(&it); + return (pcb_subc_t *)sc; + } + } + + pcb_r_end(&it); + return NULL; +} Index: trunk/src/obj_subc.h =================================================================== --- trunk/src/obj_subc.h (revision 12523) +++ trunk/src/obj_subc.h (revision 12524) @@ -84,6 +84,9 @@ NULL if not found */ pcb_subc_t *pcb_subc_by_refdes(pcb_data_t *base, const char *name); +/* Search subc, "recursively", by ID */ +pcb_subc_t *pcb_subc_by_id(pcb_data_t *base, long int ID); + /*** loops ***/ #define PCB_SUBC_LOOP(top) do { \