Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 18573) +++ trunk/src/obj_line.c (revision 18574) @@ -365,7 +365,25 @@ y[3] = (pcb_coord_t)pcb_round(y2 + vy * width + ny * width); } +void pcb_line_pre(pcb_line_t *line) +{ + pcb_layer_t *ly = pcb_layer_get_real(line->parent.layer); + if (ly == NULL) + return; + if (ly->line_tree != NULL) + pcb_r_delete_entry(ly->line_tree, (pcb_box_t *)line); + pcb_poly_restore_to_poly(ly->parent.data, PCB_OBJ_LINE, ly, line); +} +void pcb_line_post(pcb_line_t *line) +{ + pcb_layer_t *ly = pcb_layer_get_real(line->parent.layer); + if (ly == NULL) + return; + if (ly->line_tree != NULL) + pcb_r_insert_entry(ly->line_tree, (pcb_box_t *)line); + pcb_poly_clear_from_poly(ly->parent.data, PCB_OBJ_LINE, ly, line); +} /*** ops ***/ /* copies a line to buffer */ Index: trunk/src/obj_line.h =================================================================== --- trunk/src/obj_line.h (revision 18573) +++ trunk/src/obj_line.h (revision 18574) @@ -77,7 +77,12 @@ int pcb_line_eq(const pcb_host_trans_t *tr1, const pcb_line_t *l1, const pcb_host_trans_t *tr2, const pcb_line_t *l2); unsigned int pcb_line_hash(const pcb_host_trans_t *tr, const pcb_line_t *l); +/* un-administrate a line; call before changing geometry */ +void pcb_line_pre(pcb_line_t *line); +/* re-administrate a line; call after changing geometry */ +void pcb_line_pre(pcb_line_t *line); + /*** DRC enforcement (obj_line_drcenf.c) ***/ void pcb_line_adjust_attached(void); void pcb_line_adjust_attached_2lines(pcb_bool);