Index: trunk/src_plugins/lib_netmap/map_2nets.c =================================================================== --- trunk/src_plugins/lib_netmap/map_2nets.c (revision 34973) +++ trunk/src_plugins/lib_netmap/map_2nets.c (revision 34974) @@ -57,7 +57,7 @@ if (htpp_get(&map->o2n, obj) != NULL) /* object already found */ return; - seg = pcb_qry_parent_net_len_mapseg(map->ec, obj); + seg = pcb_qry_parent_net_len_mapseg(map->ec, obj, map->find_rats); if (seg == NULL) return; Index: trunk/src_plugins/lib_netmap/map_2nets.h =================================================================== --- trunk/src_plugins/lib_netmap/map_2nets.h (revision 34973) +++ trunk/src_plugins/lib_netmap/map_2nets.h (revision 34974) @@ -26,6 +26,10 @@ #include "board.h" +#include "obj_rat.h" +#include "obj_poly.h" +#include "obj_pstk.h" + #include #include "../src_plugins/query/net_len.h" @@ -49,9 +53,10 @@ typedef union pcb_2netmap_obj_s { pcb_arc_t arc; pcb_line_t line; - pcb_line_t pstk; - pcb_line_t poly; - pcb_line_t text; + pcb_rat_t rat; + pcb_pstk_t pstk; + pcb_poly_t poly; + pcb_text_t text; } pcb_2netmap_obj_t; typedef struct pcb_2netmap_oseg_s pcb_2netmap_oseg_t; @@ -65,6 +70,7 @@ typedef struct pcb_2netmap_s { pcb_2netmap_control_t ctrl; pcb_2netmap_oseg_t *osegs; /* output: head of a singly linked list */ + unsigned find_rats:1; /* config: set to 1 if rats shall be included */ /* internal */ htpp_t o2n; /* of (pcb_2netmap_iseg_t *); tells the net for an object */ Index: trunk/src_plugins/lib_netmap/map_2nets_map.c =================================================================== --- trunk/src_plugins/lib_netmap/map_2nets_map.c (revision 34973) +++ trunk/src_plugins/lib_netmap/map_2nets_map.c (revision 34974) @@ -42,6 +42,7 @@ /* copy the object but reset some fields as this object is not part of any layer list */ switch(obj->type) { case PCB_OBJ_LINE: memcpy(res, obj, sizeof(res->line)); memset(&res->line.link, 0, sizeof(gdl_elem_t)); break; + case PCB_OBJ_RAT: memcpy(res, obj, sizeof(res->rat)); memset(&res->rat.link, 0, sizeof(gdl_elem_t)); break; case PCB_OBJ_ARC: memcpy(res, obj, sizeof(res->arc)); memset(&res->arc.link, 0, sizeof(gdl_elem_t)); break; case PCB_OBJ_PSTK: memcpy(res, obj, sizeof(res->pstk)); memset(&res->pstk.link, 0, sizeof(gdl_elem_t)); break; case PCB_OBJ_POLY: memcpy(res, obj, sizeof(res->poly)); memset(&res->poly.link, 0, sizeof(gdl_elem_t)); break; @@ -87,6 +88,8 @@ map_seg_get_end_coords_on_line(from, (pcb_line_t *)hub_obj, &tmp->line.Point1.X, &tmp->line.Point1.Y); map_seg_get_end_coords_on_line(to, (pcb_line_t *)hub_obj, &tmp->line.Point2.X, &tmp->line.Point2.Y); break; + case PCB_OBJ_RAT: + abort(); case PCB_OBJ_ARC: { double sa, ea, mid; Index: trunk/src_plugins/query/net_len.c =================================================================== --- trunk/src_plugins/query/net_len.c (revision 34973) +++ trunk/src_plugins/query/net_len.c (revision 34974) @@ -115,6 +115,13 @@ *thick = l->Thickness; return 0; + case PCB_OBJ_RAT: + /* not called if find was not configured so */ + ends[0] = l->Point1.X; ends[1] = l->Point1.Y; + ends[2] = l->Point2.X; ends[3] = l->Point2.Y; + *thick = 100; /* will be very close to the center but becauese of *4/5 it can't be 0 or 1 */ + return 0; + case PCB_OBJ_PSTK: ends[0] = p->x; ends[1] = p->y; ends[2] = ends[3] = RND_COORD_MAX; @@ -124,7 +131,7 @@ /* netlen segment breaking objects */ case PCB_OBJ_VOID: case PCB_OBJ_POLY: case PCB_OBJ_TEXT: case PCB_OBJ_SUBC: - case PCB_OBJ_RAT: case PCB_OBJ_GFX: case PCB_OBJ_NET: case PCB_OBJ_NET_TERM: + case PCB_OBJ_GFX: case PCB_OBJ_NET: case PCB_OBJ_NET_TERM: case PCB_OBJ_LAYER: case PCB_OBJ_LAYERGRP: return -1; } @@ -138,9 +145,13 @@ case PCB_OBJ_LINE: return pcb_line_length((pcb_line_t *)o); case PCB_OBJ_PSTK: return 0; + case PCB_OBJ_RAT: + /* not called if find was not configured so */ + return pcb_line_length((pcb_rat_t *)o); + /* netlen segment breaking objects */ case PCB_OBJ_VOID: case PCB_OBJ_POLY: case PCB_OBJ_TEXT: case PCB_OBJ_SUBC: - case PCB_OBJ_RAT: case PCB_OBJ_GFX: case PCB_OBJ_NET: case PCB_OBJ_NET_TERM: + case PCB_OBJ_GFX: case PCB_OBJ_NET: case PCB_OBJ_NET_TERM: case PCB_OBJ_LAYER: case PCB_OBJ_LAYERGRP: return -1; } @@ -391,7 +402,7 @@ return NULL; } -RND_INLINE pcb_qry_netseg_len_t *pcb_qry_parent_net_lenseg_(pcb_qry_exec_t *ec, pcb_any_obj_t *from) +RND_INLINE pcb_qry_netseg_len_t *pcb_qry_parent_net_lenseg_(pcb_qry_exec_t *ec, pcb_any_obj_t *from, int find_rats) { pcb_find_t fctx; parent_net_len_t ctx; @@ -409,6 +420,7 @@ memset(&fctx, 0, sizeof(fctx)); fctx.user_data = &ctx; fctx.found_cb = parent_net_len_found_cb; + fctx.consider_rats = find_rats; pcb_find_from_obj(&fctx, ec->pcb->Data, from); pcb_find_free(&fctx); @@ -527,7 +539,7 @@ res = htpp_get(&ec->obj2lenseg, from); if (res == NULL) - res = pcb_qry_parent_net_lenseg_(ec, from); + res = pcb_qry_parent_net_lenseg_(ec, from, 0); return res; } @@ -538,10 +550,10 @@ vtp0_uninit(&ns->objs); } -pcb_qry_netseg_len_t *pcb_qry_parent_net_len_mapseg(pcb_qry_exec_t *ec, pcb_any_obj_t *from) +pcb_qry_netseg_len_t *pcb_qry_parent_net_len_mapseg(pcb_qry_exec_t *ec, pcb_any_obj_t *from, int find_rats) { pcb_qry_parent_net_lenseg_init(ec); - return pcb_qry_parent_net_lenseg_(ec, from); + return pcb_qry_parent_net_lenseg_(ec, from, find_rats); } const char pcb_acts_QueryCalcNetLen[] = "QueryCalcNetLen(netname)"; Index: trunk/src_plugins/query/net_len.h =================================================================== --- trunk/src_plugins/query/net_len.h (revision 34973) +++ trunk/src_plugins/query/net_len.h (revision 34974) @@ -14,7 +14,7 @@ pcb_qry_netseg_len_t *pcb_qry_parent_net_lenseg(pcb_qry_exec_t *ec, pcb_any_obj_t *from); /* Return a segment (up to the first junction) starting from an object */ -pcb_qry_netseg_len_t *pcb_qry_parent_net_len_mapseg(pcb_qry_exec_t *ec, pcb_any_obj_t *from); +pcb_qry_netseg_len_t *pcb_qry_parent_net_len_mapseg(pcb_qry_exec_t *ec, pcb_any_obj_t *from, int find_rats); void pcb_qry_lenseg_free_fields(pcb_qry_netseg_len_t *ns);