Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 33418) +++ trunk/src/draw.c (revision 33419) @@ -1188,6 +1188,7 @@ } } +int pcb_draw_stamp = 0; void rnd_expose_main(rnd_hid_t * hid, const rnd_hid_expose_ctx_t *ctx, rnd_xform_t *xform_caller) { if (!pcb_draw_inhibit) { @@ -1200,6 +1201,7 @@ info.xform_caller = xform_caller; info.xform = info.xform_exporter = NULL; info.layer = NULL; + info.draw_stamp = ++pcb_draw_stamp; pcb_draw_setup_default_xform_info(hid, &info); Index: trunk/src/draw.h =================================================================== --- trunk/src/draw.h (revision 33418) +++ trunk/src/draw.h (revision 33419) @@ -62,6 +62,8 @@ const pcb_layer_t *layer; + int draw_stamp; + union { /* fields used for specific object callbacks */ struct { rnd_layergrp_id_t gid; Index: trunk/src/obj_pstk.c =================================================================== --- trunk/src/obj_pstk.c (revision 33418) +++ trunk/src/obj_pstk.c (revision 33419) @@ -573,11 +573,12 @@ } else pcb_pstk_draw_shape_solid(info, pcb_draw_out.fgGC, ps, shape); + ps->draw_stamp = info->draw_stamp; + + if (ps->ind_editpoint) + pcb_draw_delay_label_add((pcb_any_obj_t *)ps); } - if (ps->ind_editpoint) - pcb_draw_delay_label_add((pcb_any_obj_t *)ps); - return RND_R_DIR_FOUND_CONTINUE; } @@ -616,7 +617,14 @@ { pcb_draw_info_t *info = cl; pcb_pstk_t *ps = (pcb_pstk_t *)b; + int is_drawn = (ps->draw_stamp == info->draw_stamp); + /* do not draw any label if the padstack is not visible, to avoid overlapping + term labels of sides: two SMD pads on the two sides, turn off bottom to + see top only */ + if (!is_drawn) + return RND_R_DIR_FOUND_CONTINUE; + /* draw the label if enabled, after everything else is drawn */ if (ps->term != NULL) { if ((pcb_draw_force_termlab) || PCB_FLAG_TEST(PCB_FLAG_TERMNAME, ps)) Index: trunk/src/obj_pstk.h =================================================================== --- trunk/src/obj_pstk.h (revision 33418) +++ trunk/src/obj_pstk.h (revision 33419) @@ -46,6 +46,7 @@ unsigned long used; unsigned char *shape; /* indexed by layer ID */ } thermals; + int draw_stamp; /* temp: remembers the stamp of the last draw */ gdl_elem_t link; /* a padstack is in a list in pcb_data_t as a global object */ }; #endif