Index: trunk/src_plugins/lib_netmap/map_2nets.c =================================================================== --- trunk/src_plugins/lib_netmap/map_2nets.c (revision 34938) +++ trunk/src_plugins/lib_netmap/map_2nets.c (revision 34939) @@ -34,15 +34,87 @@ #include "netlist.h" #include #include +#include "../src_plugins/query/net_len.h" +static void list_obj(void *ctx, pcb_board_t *pcb, pcb_layer_t *layer, pcb_any_obj_t *obj) +{ + pcb_2netmap_t *map = ctx; + pcb_qry_netseg_len_t *seg; + pcb_any_obj_t **o; + long n; + +#if 0 + map->curr_net = NULL; + if (obj->term != NULL) { + pcb_net_term_t *t = pcb_net_find_by_obj(&pcb->netlist[PCB_NETLIST_EDITED], obj); + if (t != NULL) { + /*t->parent.net;*/ + } + } +#endif + + if ((layer != NULL) && (pcb_layer_flags_(layer) & PCB_LYT_COPPER) == 0) + return; + + if (htpp_get(&map->o2n, obj) != NULL) /* object already found */ + return; + + seg = pcb_qry_parent_net_len_mapseg(pcb, obj); + printf("seg=%p\n", (void *)seg); + for(n = 0, o = (pcb_any_obj_t **)seg->objs.array; n < seg->objs.used; n++,o++) { + if (*o == NULL) { + printf(" NULL\n"); + } + else { + htpp_set(&map->o2n, *o, seg); + printf(" #%ld\n", (*o)->ID); + } + } + +} + +static void list_line_cb(void *ctx, pcb_board_t *pcb, pcb_layer_t *layer, pcb_line_t *line) +{ + list_obj(ctx, pcb, layer, (pcb_any_obj_t *)line); +} + +static void list_arc_cb(void *ctx, pcb_board_t *pcb, pcb_layer_t *layer, pcb_arc_t *arc) +{ + list_obj(ctx, pcb, layer, (pcb_any_obj_t *)arc); +} + +static void list_poly_cb(void *ctx, pcb_board_t *pcb, pcb_layer_t *layer, pcb_poly_t *poly) +{ + list_obj(ctx, pcb, layer, (pcb_any_obj_t *)poly); +} + +static void list_pstk_cb(void *ctx, pcb_board_t *pcb, pcb_pstk_t *ps) +{ + list_obj(ctx, pcb, NULL, (pcb_any_obj_t *)ps); +} + int pcb_map_2nets_init(pcb_2netmap_t *map, pcb_board_t *pcb, pcb_2netmap_control_t how) { + htpp_init(&map->o2n, ptrhash, ptrkeyeq); + pcb_loop_all(PCB, map, + NULL, /* layer */ + list_line_cb, + list_arc_cb, + NULL, /* text */ + list_poly_cb, + NULL, /* gfx */ + NULL, /* subc */ + list_pstk_cb + ); + return -1; } int pcb_map_2nets_uninit(pcb_2netmap_t *map) { + + htpp_uninit(&map->o2n); return -1; } Index: trunk/src_plugins/lib_netmap/map_2nets.h =================================================================== --- trunk/src_plugins/lib_netmap/map_2nets.h (revision 34938) +++ trunk/src_plugins/lib_netmap/map_2nets.h (revision 34939) @@ -26,6 +26,8 @@ #include "board.h" +#include + typedef enum { /* bits */ PCB_2NETMAPCTRL_RATS = 1 /* include rat lines */ } pcb_2netmap_control_t; @@ -32,6 +34,7 @@ typedef struct pcb_2netmap_s { pcb_2netmap_control_t ctrl; + htpp_t o2n; /* of (pcb_2netmap_net_t *); tells the net for an object */ } pcb_2netmap_t;