Index: trunk/src/change.c =================================================================== --- trunk/src/change.c (revision 12785) +++ trunk/src/change.c (revision 12786) @@ -98,7 +98,7 @@ NULL, NULL, pcb_subcop_change_2nd_size, - NULL /* padstack */ + pcb_pstkop_change_2nd_size }; static pcb_opfunc_t ChangeThermalFunctions = { Index: trunk/src/change.h =================================================================== --- trunk/src/change.h (revision 12785) +++ trunk/src/change.h (revision 12786) @@ -46,7 +46,7 @@ PCB_TYPE_ARC | PCB_TYPE_TEXT | PCB_TYPE_ELEMENT_NAME | PCB_TYPE_ELEMENT | PCB_TYPE_SUBC | PCB_TYPE_SUBC_PART ) #define PCB_CHANGE2NDSIZE_TYPES \ - (PCB_TYPE_VIA | PCB_TYPE_PIN | PCB_TYPE_ELEMENT | PCB_TYPE_SUBC| PCB_TYPE_SUBC_PART) + (PCB_TYPE_PSTK | PCB_TYPE_VIA | PCB_TYPE_PIN | PCB_TYPE_ELEMENT | PCB_TYPE_SUBC| PCB_TYPE_SUBC_PART) /* We include polygons here only to inform the user not to do it that way. */ #define PCB_CHANGECLEARSIZE_TYPES \ Index: trunk/src/obj_pstk_op.c =================================================================== --- trunk/src/obj_pstk_op.c (revision 12785) +++ trunk/src/obj_pstk_op.c (revision 12786) @@ -207,3 +207,30 @@ return NULL; } + +void *pcb_pstkop_change_2nd_size(pcb_opctx_t *ctx, pcb_pstk_t *ps) +{ + pcb_pstk_proto_t proto; + pcb_cardinal_t nproto; + + /* create the new prototype and insert it */ + pcb_pstk_proto_copy(&proto, pcb_pstk_get_proto(ps)); + if (!ctx->chgsize.is_absolute) { + proto.hdia += ctx->chgsize.value; + if (proto.hdia < ctx->chgsize.pcb->minDrill) + proto.hdia = ctx->chgsize.pcb->minDrill; + } + else + proto.hdia = ctx->chgsize.value; + nproto = pcb_pstk_proto_insert_dup(ps->parent.data, &proto, 1); + pcb_pstk_proto_free_fields(&proto); + + if (nproto == PCB_PADSTACK_INVALID) + return NULL; + + if (pcb_pstk_change_instance(ps, &nproto, NULL, NULL, NULL) == 0) + return ps; + + return NULL; +} + Index: trunk/src/obj_pstk_op.h =================================================================== --- trunk/src/obj_pstk_op.h (revision 12785) +++ trunk/src/obj_pstk_op.h (revision 12786) @@ -41,9 +41,8 @@ void *pcb_pstkop_rotate90(pcb_opctx_t *ctx, pcb_pstk_t *ps); void *pcb_pstkop_change_size(pcb_opctx_t *ctx, pcb_pstk_t *ps); +void *pcb_pstkop_change_2nd_size(pcb_opctx_t *ctx, pcb_pstk_t *ps); - /*** TODO: unimplemented ones ***/ -void *pcb_pstkop_change_2nd_size(pcb_opctx_t *ctx, pcb_pstk_t *ps); void *pcb_pstkop_change_clear_size(pcb_opctx_t *ctx, pcb_pstk_t *ps);