Index: trunk/src/change.c =================================================================== --- trunk/src/change.c (revision 11677) +++ trunk/src/change.c (revision 11678) @@ -202,6 +202,7 @@ static pcb_opfunc_t ChangeJoinFunctions = { pcb_lineop_change_join, pcb_textop_change_join, + pcb_polyop_change_join, NULL, NULL, NULL, @@ -209,7 +210,6 @@ NULL, NULL, NULL, - NULL, pcb_arcop_change_join, NULL, NULL, Index: trunk/src/change.h =================================================================== --- trunk/src/change.h (revision 11677) +++ trunk/src/change.h (revision 11678) @@ -62,7 +62,7 @@ (PCB_TYPE_ELEMENT | PCB_TYPE_SUBC | PCB_TYPE_PIN | PCB_TYPE_VIA | PCB_TYPE_SUBC_PART) #define PCB_CHANGEJOIN_TYPES \ - (PCB_TYPE_ARC | PCB_TYPE_LINE | PCB_TYPE_TEXT) + (PCB_TYPE_ARC | PCB_TYPE_LINE | PCB_TYPE_TEXT | PCB_TYPE_POLYGON) #define PCB_CHANGETHERMAL_TYPES \ (PCB_TYPE_PIN | PCB_TYPE_VIA | PCB_TYPE_SUBC_PART) Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 11677) +++ trunk/src/obj_poly.c (revision 11678) @@ -461,6 +461,26 @@ return (&Polygon->Points[ctx->insert.idx]); } +/* changes the clearance flag of a line */ +void *pcb_polyop_change_join(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_polygon_t *poly) +{ + if (PCB_FLAG_TEST(PCB_FLAG_LOCK, poly)) + return (NULL); + pcb_line_invalidate_erase(poly); + if (PCB_FLAG_TEST(PCB_FLAG_CLEARPOLYPOLY, poly)) { + pcb_undo_add_obj_to_clear_poly(PCB_TYPE_POLYGON, Layer, poly, poly, pcb_false); + pcb_poly_restore_to_poly(PCB->Data, PCB_TYPE_POLYGON, Layer, poly); + } + pcb_undo_add_obj_to_flag(poly); + PCB_FLAG_TOGGLE(PCB_FLAG_CLEARPOLYPOLY, poly); + if (PCB_FLAG_TEST(PCB_FLAG_CLEARPOLYPOLY, poly)) { + pcb_undo_add_obj_to_clear_poly(PCB_TYPE_POLYGON, Layer, poly, poly, pcb_true); + pcb_poly_clear_from_poly(PCB->Data, PCB_TYPE_POLYGON, Layer, poly); + } + pcb_line_invalidate_draw(Layer, poly); + return poly; +} + /* low level routine to move a polygon */ void pcb_poly_move(pcb_polygon_t *Polygon, pcb_coord_t DX, pcb_coord_t DY) { Index: trunk/src/obj_poly_op.h =================================================================== --- trunk/src/obj_poly_op.h (revision 11677) +++ trunk/src/obj_poly_op.h (revision 11678) @@ -46,5 +46,6 @@ void *pcb_polyop_rotate90(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_polygon_t *Polygon); void *pcb_polyop_change_flag(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_polygon_t *Polygon); void *pcb_polyop_invalidate_label(pcb_opctx_t *ctx, pcb_layer_t *layer, pcb_polygon_t *poly); +void *pcb_polyop_change_join(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_polygon_t *poly);