Index: trunk/src/obj_elem.c =================================================================== --- trunk/src/obj_elem.c (revision 11959) +++ trunk/src/obj_elem.c (revision 11960) @@ -261,6 +261,8 @@ } if (PCB_FLAG_TEST(PCB_FLAG_SQUARE, pad)) pcb_attribute_put(&line->Attributes, "elem_smash_shape_square", "1"); + if (PCB_FLAG_TEST(PCB_FLAG_NOPASTE, pad)) + pcb_attribute_put(&line->Attributes, "elem_smash_nopaste", "1"); pcb_attribute_put(&line->Attributes, "elem_smash_pad", "1"); pcb_sprintf(tmp, "%$mm", pad->Mask); pcb_attribute_put(&line->Attributes, "elem_smash_pad_mask", tmp); Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 11959) +++ trunk/src/obj_subc.c (revision 11960) @@ -273,7 +273,7 @@ while((line = linelist_first(&src->Line)) != NULL) { pcb_coord_t mask = 0; - char *sq, *termpad; + char *np, *sq, *termpad; const char *term; termpad = pcb_attribute_get(&line->Attributes, "elem_smash_pad"); @@ -285,13 +285,15 @@ mask = read_mask((pcb_any_obj_t *)line); } term = pcb_attribute_get(&line->Attributes, "term"); + np = pcb_attribute_get(&line->Attributes, "elem_smash_nopaste"); sq = pcb_attribute_get(&line->Attributes, "elem_smash_shape_square"); if ((sq != NULL) && (*sq == '1')) { /* convert to polygon */ poly = sqline2term(dst, line); - if (termpad != NULL) { - poly = sqline2term(dst, line); - vtp0_append(&paste_pads, poly); + if ((np == NULL) || (*np != '1')) { + poly = sqline2term(dst, line); + vtp0_append(&paste_pads, poly); + } if (mask > 0) { line->Thickness = mask; poly = sqline2term(dst, line); @@ -312,7 +314,8 @@ if (termpad != NULL) { pcb_line_t *nl = pcb_line_dup(dst, line); - vtp0_append(&paste_pads, nl); + if ((np == NULL) || (*np != '1')) + vtp0_append(&paste_pads, nl); if (mask > 0) { nl = pcb_line_dup(dst, line); nl->Thickness = mask;