Index: trunk/src/obj_pstk.c =================================================================== --- trunk/src/obj_pstk.c (revision 14155) +++ trunk/src/obj_pstk.c (revision 14156) @@ -344,15 +344,26 @@ pcb_pstk_draw_t *ctx = cl; pcb_pstk_t *ps = (pcb_pstk_t *)b; pcb_pstk_shape_t *shape; - pcb_layergrp_t *grp; + pcb_layergrp_t *grp = NULL; if (!PCB->SubcPartsOn && pcb_gobj_parent_subc(ps->parent_type, &ps->parent)) return PCB_R_DIR_NOT_FOUND; - shape = pcb_pstk_shape_gid(ctx->pcb, ps, ctx->gid, ctx->comb, &grp); + if (ctx->gid < 0) { + if (ctx->shape_mask != 0) + shape = pcb_pstk_shape(ps, ctx->shape_mask, ctx->comb); + else + return PCB_R_DIR_NOT_FOUND; + } + else + shape = pcb_pstk_shape_gid(ctx->pcb, ps, ctx->gid, ctx->comb, &grp); + if (shape != NULL) { pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 0); - set_ps_color(ps, ctx->is_current, grp->type); + if (grp == NULL) + set_ps_color(ps, ctx->is_current, ctx->shape_mask); + else + set_ps_color(ps, ctx->is_current, grp->type); if (conf_core.editor.thin_draw || conf_core.editor.wireframe_draw) { pcb_gui->set_line_width(pcb_draw_out.fgGC, 0); pcb_pstk_draw_shape_thin(pcb_draw_out.fgGC, ps, shape); Index: trunk/src/obj_pstk_draw.h =================================================================== --- trunk/src/obj_pstk_draw.h (revision 14155) +++ trunk/src/obj_pstk_draw.h (revision 14156) @@ -47,6 +47,8 @@ int is_current; pcb_pstk_draw_hole_t holetype; pcb_layer_combining_t comb; + + pcb_layer_type_t shape_mask; /* when gid is invalid, use this for the shapes */ } pcb_pstk_draw_t; pcb_r_dir_t pcb_pstk_draw_callback(const pcb_box_t *b, void *cl); Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 14155) +++ trunk/src/obj_subc.c (revision 14156) @@ -1584,6 +1584,7 @@ ctx.gid = -1; ctx.is_current = 1; ctx.comb = 0; + ctx.shape_mask = PCB_LYT_COPPER | PCB_LYT_TOP; pcb_r_search(sc->data->padstack_tree, drawn_area, NULL, pcb_pstk_draw_callback, &ctx, NULL); }