Index: trunk/src/change.c =================================================================== --- trunk/src/change.c (revision 12778) +++ trunk/src/change.c (revision 12779) @@ -62,7 +62,7 @@ NULL, NULL, pcb_subcop_change_size, - NULL /* padstack */ + pcb_pstkop_change_size }; pcb_opfunc_t Change1stSizeFunctions = { Index: trunk/src/change.h =================================================================== --- trunk/src/change.h (revision 12778) +++ trunk/src/change.h (revision 12779) @@ -42,7 +42,7 @@ (PCB_TYPE_VIA | PCB_TYPE_PSTK | PCB_TYPE_PIN | PCB_TYPE_PAD | PCB_TYPE_TEXT | PCB_TYPE_ELEMENT | PCB_TYPE_SUBC | PCB_TYPE_ELEMENT_NAME | PCB_TYPE_LINE | PCB_TYPE_ARC | PCB_TYPE_POLY | PCB_TYPE_SUBC_PART | PCB_TYPE_SUBC) #define PCB_CHANGESIZE_TYPES \ - (PCB_TYPE_POLY | PCB_TYPE_VIA | PCB_TYPE_PIN | PCB_TYPE_PAD | PCB_TYPE_LINE | \ + (PCB_TYPE_PSTK | PCB_TYPE_POLY | PCB_TYPE_VIA | PCB_TYPE_PIN | PCB_TYPE_PAD | PCB_TYPE_LINE | \ PCB_TYPE_ARC | PCB_TYPE_TEXT | PCB_TYPE_ELEMENT_NAME | PCB_TYPE_ELEMENT | PCB_TYPE_SUBC | PCB_TYPE_SUBC_PART ) #define PCB_CHANGE2NDSIZE_TYPES \ Index: trunk/src/obj_pstk.h =================================================================== --- trunk/src/obj_pstk.h (revision 12778) +++ trunk/src/obj_pstk.h (revision 12779) @@ -137,7 +137,10 @@ /* Deep copy a prototype */ void pcb_pstk_proto_copy(pcb_pstk_proto_t *dst, const pcb_pstk_proto_t *src); +/* grow (or shrink) a prototype to or by offs - change the proto in place */ +void pcb_pstk_proto_grow(pcb_pstk_proto_t *proto, pcb_bool is_absolute, pcb_coord_t offs); + /*** hash ***/ unsigned int pcb_pstk_hash(const pcb_pstk_proto_t *p); int pcb_pstk_eq(const pcb_pstk_proto_t *p1, const pcb_pstk_proto_t *p2); Index: trunk/src/obj_pstk_op.c =================================================================== --- trunk/src/obj_pstk_op.c (revision 12778) +++ trunk/src/obj_pstk_op.c (revision 12779) @@ -187,3 +187,23 @@ return NULL; } +void *pcb_pstkop_change_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)); + pcb_pstk_proto_grow(&proto, ctx->chgsize.is_absolute, 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 12778) +++ trunk/src/obj_pstk_op.h (revision 12779) @@ -40,9 +40,10 @@ 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); + /*** TODO: unimplemented ones ***/ -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); void *pcb_pstkop_change_clear_size(pcb_opctx_t *ctx, pcb_pstk_t *ps); Index: trunk/src/obj_pstk_proto.c =================================================================== --- trunk/src/obj_pstk_proto.c (revision 12778) +++ trunk/src/obj_pstk_proto.c (revision 12779) @@ -613,6 +613,12 @@ return ts; } +void pcb_pstk_proto_grow(pcb_pstk_proto_t *proto, pcb_bool is_absolute, pcb_coord_t offs) +{ + +} + + /*** hash ***/ static unsigned int pcb_pstk_shape_hash(const pcb_pstk_shape_t *sh) {