Index: trunk/src/layer_grp.c =================================================================== --- trunk/src/layer_grp.c (revision 12759) +++ trunk/src/layer_grp.c (revision 12760) @@ -169,7 +169,6 @@ return pcb_layer_is_paste_auto_empty(pcb, PCB_SOLDER_SIDE); } -#warning padstack TODO: not true with pad stacks /* copper layers are always non-empty if there are vias or pins because of the rings */ if (g->type & PCB_LYT_COPPER) { if ((pcb->Data->via_tree != NULL) && (pcb->Data->via_tree->size > 0)) @@ -178,6 +177,9 @@ return pcb_false; } + if (!pcb_pstk_is_group_empty(pcb, num)) + return pcb_false; + for (i = 0; i < g->len; i++) if (!pcb_layer_is_empty(pcb, g->lid[i])) return pcb_false; Index: trunk/src/obj_pstk.c =================================================================== --- trunk/src/obj_pstk.c (revision 12759) +++ trunk/src/obj_pstk.c (revision 12760) @@ -687,4 +687,19 @@ return 0; } +pcb_bool pcb_pstk_is_group_empty(pcb_board_t *pcb, pcb_layergrp_id_t gid) +{ + pcb_layergrp_t *g = &pcb->LayerGroups.grp[gid]; + + PCB_PADSTACK_LOOP(pcb->Data); { + pcb_cardinal_t n; + for(n = 0; n < g->len; n++) + if (pcb_pstk_shape_at(pcb, padstack, &pcb->Data->Layer[g->lid[n]])) + return pcb_false; + } + PCB_END_LOOP; + return pcb_true; +} + + #include "obj_pstk_op.c" Index: trunk/src/obj_pstk.h =================================================================== --- trunk/src/obj_pstk.h (revision 12759) +++ trunk/src/obj_pstk.h (revision 12760) @@ -87,6 +87,10 @@ /* Undoably change the instance parameters of a padstack ref */ int pcb_pstk_change_instance(pcb_pstk_t *ps, pcb_cardinal_t *proto, const pcb_coord_t *clearance, double *rot, int *xmirror); +/* Return whether a group is empty (free of padstack shapes) */ +pcb_bool pcb_pstk_is_group_empty(pcb_board_t *pcb, pcb_layergrp_id_t gid); + + /*** proto ***/ /* allocate and return the next available group ID */