Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 18629) +++ trunk/src/obj_arc.c (revision 18630) @@ -319,6 +319,27 @@ return pcb_arc_bbox_(arc, 1); } +void pcb_arc_pre(pcb_arc_t *arc) +{ + pcb_layer_t *ly = pcb_layer_get_real(arc->parent.layer); + if (ly == NULL) + return; + if (ly->arc_tree != NULL) + pcb_r_delete_entry(ly->arc_tree, (pcb_box_t *)arc); + pcb_poly_restore_to_poly(ly->parent.data, PCB_OBJ_ARC, ly, arc); +} + +void pcb_arc_post(pcb_arc_t *arc) +{ + pcb_layer_t *ly = pcb_layer_get_real(arc->parent.layer); + if (ly == NULL) + return; + if (ly->arc_tree != NULL) + pcb_r_insert_entry(ly->arc_tree, (pcb_box_t *)arc); + pcb_poly_clear_from_poly(ly->parent.data, PCB_OBJ_ARC, ly, arc); +} + + /***** operations *****/ /* copies an arc to buffer */ Index: trunk/src/obj_arc.h =================================================================== --- trunk/src/obj_arc.h (revision 18629) +++ trunk/src/obj_arc.h (revision 18630) @@ -84,7 +84,12 @@ /* ptr3 values for start and end point */ extern int *pcb_arc_start_ptr, *pcb_arc_end_ptr; +/* un-administrate a arc; call before changing geometry */ +void pcb_arc_pre(pcb_arc_t *arc); +/* re-administrate a arc; call after changing geometry */ +void pcb_arc_post(pcb_arc_t *arc); + #define pcb_arc_move(a,dx,dy) \ do { \ pcb_coord_t __dx__ = (dx), __dy__ = (dy); \