Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 12367) +++ trunk/src/buffer.c (revision 12368) @@ -46,6 +46,7 @@ #include "compat_nls.h" #include "obj_all_op.h" #include "obj_subc_op.h" +#include "obj_padstack_op.h" #include "layer_grp.h" #include "event.h" #include "safe_fs.h" @@ -68,7 +69,7 @@ pcb_ratop_add_to_buffer, NULL, pcb_subcop_add_to_buffer, - NULL /* padstack */ + pcb_padstackop_add_to_buffer, }; #warning TODO: rename this; move_to_buffer is also used to move from buffer to pcb @@ -87,7 +88,7 @@ pcb_ratop_move_to_buffer, NULL, pcb_subcop_move_to_buffer, - NULL /* padstack */ + pcb_padstackop_move_to_buffer, }; /* --------------------------------------------------------------------------- Index: trunk/src/obj_padstack_op.c =================================================================== --- trunk/src/obj_padstack_op.c (revision 12367) +++ trunk/src/obj_padstack_op.c (revision 12368) @@ -20,9 +20,30 @@ * */ -void *pcb_padstackop_move_to_buffer(pcb_opctx_t *ctx, pcb_layer_t * layer, pcb_line_t * line) +void *pcb_padstackop_add_to_buffer(pcb_opctx_t *ctx, pcb_padstack_t *ps) { + pcb_padstack_t *p = pcb_padstack_new(ctx->buffer.dst, ps->proto, ps->x, ps->y, pcb_flag_mask(ps->Flags, PCB_FLAG_FOUND | ctx->buffer.extraflg)); + return pcb_padstack_copy_meta(p, ps); +} +void *pcb_padstackop_move_to_buffer(pcb_opctx_t *ctx, pcb_padstack_t *ps) +{ + pcb_poly_restore_to_poly(ctx->buffer.src, PCB_TYPE_PADSTACK, ps, ps); + pcb_r_delete_entry(ctx->buffer.src->padstack_tree, (pcb_box_t *)ps); + + padstacklist_remove(ps); + padstacklist_append(&ctx->buffer.dst->padstack, ps); + + PCB_FLAG_CLEAR(PCB_FLAG_WARN | PCB_FLAG_FOUND, ps); + + if (!ctx->buffer.dst->padstack_tree) + ctx->buffer.dst->padstack_tree = pcb_r_create_tree(NULL, 0, 0); + + pcb_r_insert_entry(ctx->buffer.dst->padstack_tree, (pcb_box_t *)ps, 0); + pcb_poly_clear_from_poly(ctx->buffer.dst, PCB_TYPE_PADSTACK, ps, ps); + + PCB_SET_PARENT(ps, data, ctx->buffer.dst); + return ps; } void *pcb_padstackop_copy(pcb_opctx_t *ctx, pcb_padstack_t *ps) Index: trunk/src/obj_padstack_op.h =================================================================== --- trunk/src/obj_padstack_op.h (revision 12367) +++ trunk/src/obj_padstack_op.h (revision 12368) @@ -36,7 +36,10 @@ void *pcb_padstackop_change_flag(pcb_opctx_t *ctx, pcb_element_t *elem, pcb_padstack_t *ps); */ -void *pcb_padstackop_move_to_buffer(pcb_opctx_t *ctx, pcb_layer_t * layer, pcb_line_t * line); + +void *pcb_padstackop_add_to_buffer(pcb_opctx_t *ctx, pcb_padstack_t *ps); +void *pcb_padstackop_move_to_buffer(pcb_opctx_t *ctx, pcb_padstack_t *ps); + void *pcb_padstackop_copy(pcb_opctx_t *ctx, pcb_padstack_t *ps); void *pcb_padstackop_move(pcb_opctx_t *ctx, pcb_padstack_t *ps); void *pcb_padstackop_move_noclip(pcb_opctx_t *ctx, pcb_padstack_t *ps);